본문 바로가기
CTF/Dreamhack

[Dreamhack] sql injection bypass WAF

by 8희 2023. 5. 2.

https://dreamhack.io/wargame/challenges/415

 

sql injection bypass WAF

Description Exercise: SQL Injection Bypass WAF에서 실습하는 문제입니다.

dreamhack.io

 

SQL Injection Bypass WAF에서 실습하는 문제이다.

 

 

접속 정보에 들어가면 이런 화면이 뜬다.

임의로 guest를 입력했더니 url과 화면에 그대로 입력한 값이 보였다.

 

 

그리고 admin을 입력했더니 필터링에 걸려서 이런 문자열이 떴다.

필터링을 우회해야 되는 문제이므로 우선 코드를 확인하러 갔다.

 

 

문제 파일의 app.py를 봤더니 주요 키워드들이 모두 필터링 되어 있는 것을 확인할 수 있었다.

 

 

키워드 필터링을 회피하고 False를 리턴해야 되므로

우선 필터링 키워드인 admin에서 대소문자만 바꾸서 Admin을 입력했더니

비밀번호가 아닌 admin이 출력됐다.

 

* SQL은 대소문자를 구분하지 않음

 

 

다시 app.py를 살펴봤다.

result[1]이 쿼리에서 나온 내용 중 2번째만을 출력한다.

예를 들어, uid가 “admin”인 데이터를 조회하면 idxuidupw가 모두 반환되는데, 

이때 두 번째 결과인 uid를 페이지에 출력한다.

 

따라서 admin 계정의 패스워드를 획득하기 위해서는

UNION을 이용해 새로운 SELECT 구문을 작성해 upw가 페이지에 출력되게끔 해야 한다.

 

 

'Union%09Select%09null,upw,null%09From%09user%09where%09uid="Admin"%23'

 

이 값을 입력했더니 flag 값이 떴다!

입력 창에 입력을 하면 특수문자가 url에서 인코딩 되므로 꼭 url에 값을 입력해야 된다.

이거 땜에 더 오래 걸렸다.

%09는 띄어쓰기를 의미하고, %23은 주석 처리를 의미한다.

 

 

참고

https://learn.dreamhack.io/311#8

 

'CTF > Dreamhack' 카테고리의 다른 글

[Dreamhack] command-injection-1  (0) 2023.05.02
[Dreamhack] error based sql injection  (0) 2023.05.02
[Dreamhack] session  (0) 2023.04.12
[Dreamhack] image-storage  (0) 2023.04.12
[Dreamhack] File Vulnerability Advanced for linux  (0) 2023.04.12