반응형
목표
WAF(Web Application Firewall)의 필터링을 우회하여 admin 계정으로 로그인에 성공하는 것을 목표로 합니다.
환경
대상 웹 애플리케이션에는 기본적인 SQL 인젝션을 차단하기 위해 WAF가 적용되어 있습니다.
WAF는 SQL 인젝션 공격을 방지하기 위해 다음과 같은 필터링 규칙을 적용합니다:
- ', OR, --와 같은 특수 문자와 키워드를 차단.
- OR은 ||로, =는 IN으로, --는 #로 대체함으로써 우회 가능.
공격 전략
WAF 필터링 규칙을 우회하기 위해 다음과 같은 전략을 사용했습니다:
- OR 대신 || 사용.
- = 대신 IN 사용.
- -- 대신 # 사용.
이러한 대체 기법을 통해 필터링을 우회하고 SQL 인젝션을 성공적으로 수행할 수 있었습니다.
공격 과정
1. 로그인 페이지 탐색
대상 웹 애플리케이션의 로그인 페이지는 username과 password를 입력받아 데이터베이스에서 확인하는 구조를 가지고 있었습니다. 일반적인 SQL 쿼리는 다음과 같을 것으로 추정되었습니다:
SELECT * FROM users WHERE username = '[username]' AND password = '[password]';
2. WAF 필터링 규칙 확인
공격을 시도하면서 WAF가 다음과 같은 규칙으로 SQL 인젝션 구문을 차단함을 확인했습니다:
- OR, = 및 --와 같은 키워드 및 특수 문자를 필터링.
- 이를 우회하기 위해 다음과 같은 대체 기법을 적용했습니다:
- OR 대신 ||.
- = 대신 IN.
- -- 대신 #.
3. 필터링 우회 및 페이로드 작성
WAF 규칙을 우회하기 위해 다음과 같은 페이로드를 username 필드에 입력했습니다:
1' || username IN ("admin") #
이 페이로드는 SQL 쿼리를 다음과 같이 변형합니다:
SELECT * FROM users WHERE username = '1' || username IN ('admin') # AND password = '[password]';
- 1' ||는 항상 참인 조건을 만들어줌.
- username IN ("admin")는 username이 admin일 경우 참이 되도록 설정.
- #는 SQL에서 주석 처리를 하여 뒤의 조건(AND password = '[password]')을 무시.
4. 로그인 성공 확인
해당 페이로드를 입력한 결과, 비밀번호 조건을 우회하여 admin 계정으로 로그인에 성공했습니다.
실제 비밀번호를 알지 못하더라도 이 방식으로 인증을 우회할 수 있었습니다.
이번 실습을 통해 다음을 확인할 수 있었습니다:
- 기본적인 WAF 필터링 규칙(예: OR, =, -- 차단)은 대체 기법(||, IN, #)을 통해 우회할 수 있습니다.
- SQL 인젝션 공격을 방어하기 위해서는 WAF만으로는 충분하지 않으며, 다음과 같은 보안 조치가 필요합니다:
- 프리페어드 스테이트먼트(Prepared Statement) 사용: 모든 SQL 요청을 안전하게 처리.
- 입력 값 검증 및 필터링 강화: 사용자의 입력 값을 철저히 검증.
- 로그 모니터링: 비정상적인 로그인 시도를 탐지하고 대응.
이번 공격은 WAF가 SQL 인젝션에 취약할 수 있음을 보여주며, 보다 강력한 보안 대책이 필요하다는 점을 강조합니다.
반응형
'Security > CTF' 카테고리의 다른 글
| 8.1 SSTI - server flag (0) | 2025.01.22 |
|---|---|
| 3.3 SQLi_WAF_3 (0) | 2025.01.22 |
| Web_main 기초 과정 정리 (0) | 2025.01.20 |
| 6. XSS - mitigations (0) | 2025.01.20 |
| 3.2 SQLi_WAF_2 (0) | 2025.01.20 |