Xray社区版和专业版漏洞导出结构区别分析
前言
水文
不管是使用--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
都能实现最大化的覆盖扫描