前言
水文
不管是使用--html-output
參數還是--json-output
參數,其核心都是json
形式傳遞的漏洞詳情,html
格式只是更方便我們看而已,所以這里對json
格式的數據進行分析
目的
方便想要在掃描器中合並xray
的朋友整合漏洞報告
掃描目標
testphp.vulnweb.com
專業版版本 1.3.3
社區版版本 1.7
社區版
掃描之后導出為json
的結果
可以看到是使用list
+dict
的格式,因為每條都比較長,選取其中一條,並且把長的快照部分省略掉了
{
"create_time":1615809845916,
"detail":{
"addr":"http://testphp.vulnweb.com/index.zip",
"payload":"/index.zip",
"snapshot":[
[
"GET /index.zip 省略請求頭",
"HTTP/1.1 206 Partial Content\r\n省略響應頭"
]
],
"extra":{
"param":{}
}
},
"plugin":"dirscan/backup/default",
"target":{
"url":"http://testphp.vulnweb.com/index.zip"
}
}
整理后其結構為:
其實整理后的結構我們已經很明顯可以看出是怎么保存漏洞信息的了,但這里還是簡單講解一下
create_time
:掃描開始的時間
detail
:漏洞詳情,這肯定是需要的
addr
:最開始的掃描地址
payload
:這個不解釋
snapshot
:快照,一方面保存我們打過去的請求頭,一方面保存響應頭和響應體,方便我們漏洞復現
extra
:這個里面的參數是param
,即參數,因為這里的漏洞是敏感文件中的備份文件,不存在extra
,我們參考另外一個社區版掃描出來的xss
漏洞
"extra":{
"param":{
"key":"cat",
"position":"query",
"value":"extractvalue(1,concat(char(126),md5(1577916059)))"
}
}
可以看出來這里的param
更多的是存儲一些特殊的payload
,漏洞參數以及說明
plugin
:掃描所使用到的插件,可以使用--plugin
進行指定
target
:也是目標,不過這里應該指的是存在漏洞的URL
專業版
接着使用專業版進行掃描,依舊是list
+dict
很明顯漏洞報告內容豐富多了,而且專業版的掃描插件更多,所以爆漏洞的可能性更大
簡單取一個分析
取一個比較有代表性的
{
"create_time": 1615814211000,
"detail": {
"filename": "/index.zip",
"host": "testphp.vulnweb.com",
"param": {},
"payload": "",
"port": 80,
"request": "GET /index.zip HTTP/1.1\r\n請求頭省略",
"response": "HTTP/1.1 206 響應包省略",
"url": "http://testphp.vulnweb.com/index.zip"
},
"identifier": "/index.zip",
"plugin": "dirscan",
"target": {
"url": "http://testphp.vulnweb.com/listproducts.php"
},
"vuln_class": "backup"
}
和社區版結構略有不同,並且存在port
參數,不再做過多解釋
合並整理
可以將目標動態爬取后的URL列表依次使用xray
掃描,將結果保存在內存或數據庫中,和自己編寫的漏洞掃描產出的報告進行合並
至於報告文件夾清理,可以使用:
import shutil
def cleanTempXrayReport():
shutil.rmtree("{}".format(config.Xray_temp_report_path))
os.mkdir("{}".format(config.Xray_temp_report_path))
return
最后對於每一個url
都能實現最大化的覆蓋掃描