您好,登錄后才能下訂單哦!
這篇文章主要介紹“Wireshark分析出攻擊者sql注入時查詢了哪些數據”,在日常操作中,相信很多人在Wireshark分析出攻擊者sql注入時查詢了哪些數據問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Wireshark分析出攻擊者sql注入時查詢了哪些數據”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
將流量包導入Wireshark
看著很亂,輸入url
通過瀏覽器請求使用的協議為http/https
,該流量包中只有http
,所以我們直接過濾出http
協議的數據包。
過濾出http請求的數據包
注入語句如下:
http://localhost:81/?id=1' and ascii(substring((select keyid from flag limit 0,1),1,1))=32#
由此可見攻擊者采用布爾盲注進行sql注入。
這里我們想到注入語句成功和失敗所返回的數據包一定是不同的。
觀察sql
注入響應包。
注入失敗響應內容:
注入成功響應內容:
由此我們可以想到是不是可以先將注入成功響應包過濾出來???那么我們應該以什么規則進行過濾呢,或者說以響應包哪個特征進行過濾呢???
我想到的過濾條件:
過濾出響應內容中有文章內容的所有響應包
根據響應包的長度進行過濾
注入失敗的響應包長度:
注入成功的響應包長度:
對于Wireshark的語法不是很熟悉,沒有找到怎么以內容過濾的語法,所以我這里以響應包的長度進行過濾。
Wireshark http過濾規則:
http.host==magentonotes.com http.host contains magentonotes.com //過濾經過指定域名的http數據包,這里的host值不一定是請求中的域名 http.response.code==302 //過濾http響應狀態碼為302的數據包 http.response==1 //過濾所有的http響應包 http.request==1 //過濾所有的http請求,貌似也可以使用http.request http.request.method==POST //wireshark過濾所有請求方式為POST的http請求包,注意POST為大寫 http.cookie contains guid //過濾含有指定cookie的http數據包 http.request.uri==”/online/setpoint” //過濾請求的uri,取值是域名后的部分 http.request.full_uri==” http://task.browser.#/online/setpoint” //過濾含域名的整個url則需要使用http.request.full_uri http.server contains “nginx” //過濾http頭中server字段含有nginx字符的數據包 http.content_type == “text/html” //過濾content_type是text/html的http響應、post包,即根據文件類型過濾http數據包 http.content_encoding == “gzip” //過濾content_encoding是gzip的http包 http.transfer_encoding == “chunked” //根據transfer_encoding過濾 http.content_length == 279 http.content_length_header == “279″ //根據content_length的數值過濾 http.server //過濾所有含有http頭中含有server字段的數據包 http.request.version == “HTTP/1.1″ //過濾HTTP/1.1版本的http包,包括請求和響應 http.response.phrase == “OK” //過濾http響應中的phrase
以content-Length
長度進行過濾,過濾語法為http.content_length == 366
所有注入成功的語句也可以從響應包查看到。
http://localhost:81/?id=1' and ascii(substring((select keyid from flag limit 0,1),1,1))=102#
這條sql語句的含義:第一個字符的ASCII碼為102
>>> print(chr(102)) # 將ASCII碼轉換為字符 >>> f
我怎么可能一個一個查看注入成功時字符對應的ASCII值是多少呢。
將上面過濾后的結果導出
使用正則過濾出注入語句和字符對應的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])
這里注意注入語句成功的先后順序,也就是上圖圈出來的地方按順序排序(從第1個字符開始判斷,一直到38個字符),就是注入成功的執行流程。
知道了字符對應的ASCII碼,反過來通過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)
到此,關于“Wireshark分析出攻擊者sql注入時查詢了哪些數據”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。