본문 바로가기

워게임

SQL 인젝션 추가 공부

이런 코드문은 

userid나 userpassword에 악의적인 문자열이 들어오면 그대로 SQL 문에 삽입되기 때문에, 공격자가 비밀번호 없이 로그인하거나 DB를 조작할 수 있다.

 

SQL에서 --(또는 DB에 따라 #)는 주석(comment) 을 시작하는 표시입니다.

주석이 시작되면 그 줄의 나머지 내용은 DB가 무시하는데, 공격자가 이걸 이용하면 AND userpassword="..." 같은 조건을 주석 처리해서 비밀번호 검사 자체를 없애버릴 수 있습니다.

 

위의 코드에서 값은 "(큰따옴표)로 감싸여 있으니, 공격자가 userid에 다음처럼 넣을 수 있습니다.

그러면 쿼리가 이렇게 됩니다

-- 뒤는 주석이므로 DB가 무시해서 실제로 실행되는 부분은 다음과 같습니다.

select * from users where userid="admin"

 

결과: 비밀번호 조건이 사라져서 admin 계정으로 비밀번호 없이 접근해버릴 수 있음.

 

 

 

 

변형

만약 쿼리가 '(작은따옴표)로 감싸여 있으면 다음과 같고

공격자가 userid에 admin' -- 을 넣으면

... where userid='admin' -- ' and userpassword='...'

이런 식으로 비번 검사 부분이 주석 처리 되는 겁니다.

 

 

-> 사용자 입력을 쿼리 문자열에 그대로 붙여넣기(string concatenation / f-string)하면, 입력 안에 있는 특수문자(", ', -- 등)가 SQL 문법의 일부가 되어 버립니다. 즉 서버가 입력을 데이터로서가 아니라 코드의 일부로 해석하게 됩니다.

☆ 이게 바로 SQL 인젝션입니다.

'워게임' 카테고리의 다른 글

rev-basic-0 - 리버싱 추가 공부  (0) 2026.01.11
[드림핵] rev-basic-0 - 리버싱  (0) 2026.01.11
[드림핵] simple_sqli - web  (0) 2025.11.04
XSS 취약점 문제 추가 공부  (0) 2025.10.28
[드림핵] xss1 - web  (0) 2025.10.28