BUU 流量分析 sqltest


知識點

sql盲注
有一段盲注的分析過程,看腳本請拉到底

做題過程

首先我們觀察流量包,可以看到很多條這樣的http請求,url中有selectSCHEMA_name等,可以確定是對mysql數據庫的盲注


我們來把url的部分提取出來
一種方法是導出http對象,但是這樣的話接下來就要手動讀注入信息了,這很不方便

所以我們用tshark提取

tshark -r sqltest.pcapng -Y "http.request" -T fields -e http.request.full_uri > data.txt
-r 讀取文件
-Y 過濾語句
-T pdml|ps|text|fields|psml,設置解碼結果輸出的格式
-e 輸出特定字段
http.request.uri http請求的uri部分


現在我們可以寫python來提取數據了。
來看提取出的payload:

第一部分 獲取數據庫庫名

1.獲取information_schema.SCHEMATA中數據行數的長度,從中可以知道長度是1

2.獲取information_schema.SCHEMATA中數據行數,chr(53) = '5' ,即infomation_schema.SCHEMATA有5行數據
information_schema.SCHEMATA中保存了所有數據庫

3.(第19行-第61行+第65,66行)
開始獲取每一個數據庫的長度,這一部分是並發執行的

4.(62,63,64,第67-417行)
開始獲取每一個數據庫庫名,並發執行

418行已經獲取到了庫名

第二部分 表

1.表名個數的長度

2.表名個數

3.表名長度

4.表名(445-510)

511看到已經獲取了表名

第三部分 字段

1.字段個數的長度

2.字段個數

3.獲取每一個字段長度

4.並發獲取每個字段字段名(546-601)

第四部分 值

1.值個數的長度

2.值的個數

值的個數為1
3.值的長度

這一個值的長度是38
4.獲取值(628-972)
這一步就是我們要找的flag了,寫一個腳本提取一下。我們知道注入語句為

id=1 and ascii(substr(((select concat_ws(char(94), flag)  from db_flag.tb_flag  limit 0,1)), {第i個字符}, 1))>{字符的ascii值}

我們把第i個字符ascii值提取出來,取i變化時的值,腳本為:

import urllib.parse
f = open("data.txt","r").readlines()

s = []
for i in range(627,972):
    data = urllib.parse.unquote(f[i]).strip()
    payload = data.split("and")[1]
    positions = payload.find("from db_flag.tb_flag  limit 0,1)), ")
    data1 = payload[positions+35:].split(",")[0]
    data2 = payload[positions+35:].split(">")[1]
    s.append([data1,data2])

for i in range(1,len(s)):
    if s[i][0]!=s[i-1][0]:
        print(chr(int(s[i-1][1])),end="")
print(chr(int(s[-1][1])))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM