💉 [웹 해킹 스터디 #3] SQL Injection 맛보기: Login Bypass 1, 2 풀이
이번 주는 Login Bypass 1~2 문제를 풀며 SQL Injection(SQLi)의 기초적인 로직을 익혀보았다. 다음 글에서는 6주차 이론 내용을 복습하고, 그 뒤에 남은 Bypass 문제들과 SQL Injection 심화 문제를 다룰 예정이다.
(TMI: 웹 개발 공부도 해야 하는데... 조만간 Udemy 강의를 하나 질러야겠다. 해킹을 하려니 개발 지식이 절실하다 😭)
1. Login Bypass 1: 연산자 우선순위와 개행(Newline)

돌아온 돌돌~ normaltic1 계정으로 로그인하라는 미션이다.
1-1. 취약점 확인 및 가설 설정
Request, Response 패킷을 뜯어봐도 별다른 힌트가 없다. 입력폼이 있으니 SQL Injection을 의심해본다.
먼저 doldol' and '1'='1을 넣어 참(True) 조건이 먹히는지 확인해 본다.

로그인이 되는 걸 보니 SQLi가 가능하다! 이제 서버의 쿼리 형태를 추측하며 공격을 설계해야 한다.
- 가설 1 (단일 행 쿼리):
WHERE id='___' AND pw='___'형태일 것이다. - 검증: 주석(
#)을 사용하여 뒤의 비밀번호 검증을 날려보자.
Payload:doldol' # - 결과: 실패. 비밀번호가 틀렸다고 나온다.
1-2. 실패 원인 분석: 개행(Newline)의 함정
주석 처리가 안 먹히는 이유는 쿼리문이 개행(줄바꿈)되어 있기 때문일 가능성이 높다.
💻 서버 쿼리 추측
SELECT * FROM member WHERE id='[입력값]'
AND pw='[비밀번호]'
이 경우 doldol' #을 입력하면 첫 줄의 끝까지만 주석 처리되고, 다음 줄에 있는 AND pw=... 구문은 여전히 살아서 실행된다. 그래서 로그인이 안 된 것이다.
1-3. 해결: OR 연산자를 이용한 우회
주석으로 뒷부분을 날릴 수 없다면, 논리 연산을 이용해 조건을 무조건 참(True)으로 만들어야 한다.
Payload: doldol' or '1'='1
이렇게 입력하면 쿼리가 다음과 같이 완성된다.
WHERE id='doldol' or '1'='1' AND pw='...'
💡 핵심 로직 (연산자 우선순위):
SQL에서는 AND가 OR보다 우선순위가 높다.
1. '1'='1' AND pw='...' 가 먼저 계산됨 (비밀번호가 틀리므로 False)
2. 남은 조건: id='doldol' OR False
3. id='doldol'은 참이므로 최종 결과는 True!(또는 id가 doldol인 행을 반환)

이 논리를 이용하여 normaltic1 계정으로 로그인에 성공했다.
2. Login Bypass 2: 주석 처리가 가능한 경우

이번에도 SQLi 문제로 보인다. 위와 동일한 논리로 접근해 보자.
2-1. 가설 검증
먼저 and '1'='1'을 넣어보니 잘 동작한다. 이번에는 주석(#)을 넣어 비밀번호 검증을 무력화 시도해 본다.
Payload: doldol' # (비밀번호는 아무거나)
결과: 바로 로그인이 된다!
즉, 이번 문제는 ID와 PW 검증 로직이 한 줄에 있거나 개행 처리가 되어 있지 않아서 주석 문자가 비밀번호 검증 부분까지 완벽하게 지워버린 것이다.
💡 Bonus: Password 필드 인젝션
공부하다 보니 ID뿐만 아니라 Password 입력창에서도 인젝션이 가능하다는 걸 알게 되었다.
만약 비밀번호 입력칸에 abcd' or id='doldol 이라고 입력하면 쿼리는 어떻게 될까?
SELECT * FROM member WHERE id='normaltic' AND pw='abcd' or id='doldol'
앞의 id='normaltic' AND pw='abcd'는 거짓(False)이 되지만, 뒤에 OR id='doldol'이 붙으면서 결과적으로 doldol 계정의 정보를 가져오게 된다.
물론 이 방법을 쓰려면 테이블명이나 컬럼명을 정확히 알아야겠지만, 입력값이 들어가는 모든 곳은 공격 벡터가 될 수 있다는 점을 명심해야겠다.
📝 마무리
오늘의 교훈: "SQL 쿼리의 구조(개행, 연산자 순서)를 상상하면서 공격하자."
다음 포스팅에서는 미뤄뒀던 6주차 이론 내용을 정리하고, 남은 문제들을 마저 풀어보겠다.
'해킹스터디' 카테고리의 다른 글
| [Normaltic 웹해킹 입문] 6주차 CTF 문제풀이 - Login Bypass(3) (0) | 2025.11.27 |
|---|---|
| [Normaltic 웹해킹 입문] 6주차 복습(UNION을 이용한 SQLi) (0) | 2025.11.27 |
| [Normaltic 웹해킹 입문] 6주차 CTF 문제풀이 - Authentication Bypass (5) | 2025.11.22 |
| [Normaltic 웹해킹 입문] CTF 문제풀이 - burp 설정 및 기본문제 풀이(1~5) (2) | 2025.11.21 |
| [Normaltic 웹해킹 입문] 3강 관련 복습&리뷰-②(세션) (0) | 2025.11.04 |