- 資訊首頁(yè) > 網(wǎng)絡(luò )安全 >
- Wireshark分析出攻擊者sql注入時(shí)查詢(xún)了哪些數據
這篇文章主要介紹“Wireshark分析出攻擊者sql注入時(shí)查詢(xún)了哪些數據”,在日常操作中,相信很多人在Wireshark分析出攻擊者sql注入時(shí)查詢(xún)了哪些數據問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對大家解答”Wireshark分析出攻擊者sql注入時(shí)查詢(xún)了哪些數據”的疑惑有所幫助!接下來(lái),請跟著(zhù)小編一起來(lái)學(xué)習吧!
將流量包導入Wireshark
看著(zhù)很亂,輸入url
通過(guò)瀏覽器請求使用的協(xié)議為http/https
,該流量包中只有http
,所以我們直接過(guò)濾出http
協(xié)議的數據包。
過(guò)濾出http請求的數據包
注入語(yǔ)句如下:
http://localhost:81/?id=1' and ascii(substring((select keyid from flag limit 0,1),1,1))=32#
由此可見(jiàn)攻擊者采用布爾盲注進(jìn)行sql注入。
這里我們想到注入語(yǔ)句成功和失敗所返回的數據包一定是不同的。
觀(guān)察sql
注入響應包。
注入失敗響應內容:
注入成功響應內容:
由此我們可以想到是不是可以先將注入成功響應包過(guò)濾出來(lái)???那么我們應該以什么規則進(jìn)行過(guò)濾呢,或者說(shuō)以響應包哪個(gè)特征進(jìn)行過(guò)濾呢???
我想到的過(guò)濾條件:
過(guò)濾出響應內容中有文章內容的所有響應包
根據響應包的長(cháng)度進(jìn)行過(guò)濾
注入失敗的響應包長(cháng)度:
注入成功的響應包長(cháng)度:
對于Wireshark的語(yǔ)法不是很熟悉,沒(méi)有找到怎么以?xún)热葸^(guò)濾的語(yǔ)法,所以我這里以響應包的長(cháng)度進(jìn)行過(guò)濾。
Wireshark http過(guò)濾規則:
http.host==magentonotes.com http.host contains magentonotes.com //過(guò)濾經(jīng)過(guò)指定域名的http數據包,這里的host值不一定是請求中的域名 http.response.code==302 //過(guò)濾http響應狀態(tài)碼為302的數據包 http.response==1 //過(guò)濾所有的http響應包 http.request==1 //過(guò)濾所有的http請求,貌似也可以使用http.request http.request.method==POST //wireshark過(guò)濾所有請求方式為POST的http請求包,注意POST為大寫(xiě) http.cookie contains guid //過(guò)濾含有指定cookie的http數據包 http.request.uri==”/online/setpoint” //過(guò)濾請求的uri,取值是域名后的部分 http.request.full_uri==” http://task.browser.#/online/setpoint” //過(guò)濾含域名的整個(gè)url則需要使用http.request.full_uri http.server contains “nginx” //過(guò)濾http頭中server字段含有nginx字符的數據包 http.content_type == “text/html” //過(guò)濾content_type是text/html的http響應、post包,即根據文件類(lèi)型過(guò)濾http數據包 http.content_encoding == “gzip” //過(guò)濾content_encoding是gzip的http包 http.transfer_encoding == “chunked” //根據transfer_encoding過(guò)濾 http.content_length == 279 http.content_length_header == “279″ //根據content_length的數值過(guò)濾 http.server //過(guò)濾所有含有http頭中含有server字段的數據包 http.request.version == “HTTP/1.1″ //過(guò)濾HTTP/1.1版本的http包,包括請求和響應 http.response.phrase == “OK” //過(guò)濾http響應中的phrase
以content-Length
長(cháng)度進(jìn)行過(guò)濾,過(guò)濾語(yǔ)法為http.content_length == 366
所有注入成功的語(yǔ)句也可以從響應包查看到。
http://localhost:81/?id=1' and ascii(substring((select keyid from flag limit 0,1),1,1))=102#
這條sql語(yǔ)句的含義:第一個(gè)字符的ASCII碼為102
>>> print(chr(102)) # 將ASCII碼轉換為字符 >>> f
我怎么可能一個(gè)一個(gè)查看注入成功時(shí)字符對應的ASCII值是多少呢。
將上面過(guò)濾后的結果導出
使用正則過(guò)濾出注入語(yǔ)句和字符對應的ASCII碼
import re number = [] with open("aa.txt","r",encoding="utf-8") as f: for i in f.readlines(): flag_number = re.findall(r"\[Request URI: .*?=(\d+)%23\]",i,re.S) # 字符對應的ASCII碼 url_list = re.findall(r"\[Request URI: (.*?)\]",i,re.S) # 注入的url if flag_number: print(url_list) number.append(flag_number[0])
這里注意注入語(yǔ)句成功的先后順序,也就是上圖圈出來(lái)的地方按順序排序(從第1個(gè)字符開(kāi)始判斷,一直到38個(gè)字符),就是注入成功的執行流程。
知道了字符對應的ASCII碼,反過(guò)來(lái)通過(guò)ASCII碼得出對應的字符即可。
最后跑出flag
import re number = [] with open("aa.txt","r",encoding="utf-8") as f: for i in f.readlines(): flag_number = re.findall(r"\[Request URI: .*?=(\d+)%23\]",i,re.S) url_list = re.findall(r"\[Request URI: (.*?)\]",i,re.S) if flag_number: print(url_list) number.append(flag_number[0]) print(number) flag = '' for i in number: flag +=chr(int(i)) print(flag)
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站