T-Reqs:一款基于語法的HTTP漏洞挖掘工具
關于T-Reqs
T-Reqs全稱為Two Requests,T-Reqs是一款基于語法的HTTP模糊測試漏洞挖掘工具,該工具可以通過發送版本為1.1或更早版本的變異HTTP請求來對目標HTTP服務器進行模糊測試以及漏洞挖掘。該工具主要通過下列三大步驟實現其功能:(1)生成輸入;(2)對生成的輸入進行變異處理;(3)將變異后的數據發送至目標服務器;
生成輸入
工具會使用輸入的CFG(上下文無關文法)語法來生成HTTP請求。由于下面所示的示例語法是為請求行模糊處理而定制的,因此每個請求行組件及其可能的值都已經明確指定了。此時,我們將能夠使用各種形式的請求行生成有效的請求,并從變異的角度將每個請求行組件視為一個單獨的單元。
'<start>':
['<request>'],
'<request>':
['<request-line><base><the-rest>'],
'<request-line>':
['<method-name><space><uri><space><protocol><separator><version><newline>'],
'<method-name>':
['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH'],
'<space>':
[' '],
'<uri>':
['/_URI_'],
'<protocol>':
['HTTP'],
'<separator>':
['/'],
'<version>':
['0.9', '1.0', '1.1'],
'<newline>':
['\r\n'],
'<base>':
['Host: _HOST_\r\nConnection:close\r\nX-Request-ID: _REQUEST_ID_\r\n'],
'<the-rest>':
['Content-Length: 5\r\n\r\nBBBBBBBBBB'],
復制代碼
輸入變異
每個組件都可以用兩種方式進行標記:字符串變異和樹變異(具體參見示例配置)。如果組件為字符串變異,那么我們就可以刪除、替換或在隨機位置插入隨機字符。
在下面的示例(左側)中,刪除了協議版本(1)中的最后一個字符,用R替換方法名稱中的第三個字母(S),并在URI的開頭插入正斜杠。然而,如果一個組件是樹變異,那么我們就可以隨機、替換或插入到該組件下的一個隨機位置。
下面的示例(右側)顯示了應用于請求行組件的三個樹變異:(1)方法被協議替換;(2)在當前URI之后插入一個額外的URI;(3)刪除現有的proto。
工具下載&安裝&配置
該工具基于Python開發,因此我們首先需要在本地設備上安裝并配置好Python環境。
源碼獲取
廣大研究人員可以使用下列命令將該項目源碼克隆至本地:
git clone https://github.com/bahruzjabiyev/T-Reqs-HTTP-Fuzzer.git
復制代碼
工具使用
工具配置
測試工具應該了解用戶對輸入的生成和變異的偏好。更具體地說,應該在配置文件中指定輸入語法、突變組件和突變首選項等(具體參見示例配置)。
運行模式
為了能夠復現在每次迭代中生成和變異的輸入,工具使用了一個種子編號。實際上,在輸入的生成和變異的過程中,這個種子編號會作為一個隨機的變異種子來使用。根據這些種子提供給工具的方式,它將以下列兩種模式中的其中一種運行:單獨模式和集體模式。
在單獨模式下,工具將根據用戶指定的種子來生成和變異輸入。在下面的命令中,指定了一個種子(即505)?;蛘?,也可以使用-f選項指定種子列表。
python3 main.py -i -c config -s 505
復制代碼
在集體模式(默認)下,工具將從零開始作為種子值,并在每次迭代中遞增,直到結束,其中種子的開始和結束編號是可以自定義配置的。
python3 main.py -c config
復制代碼
許可證協議
本項目的開發與發布遵循MIT開源許可證協議。
浙公網安備 33010602011771號