声明:该公众号大部分文章来自作者日常学习笔记,未经授权,严禁转载,如需转载,联系洪椒攻防实验室公众号。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。
前言
-
目前各种存在各种各样的工具,其中有一类大家比较喜欢用的工具为带POC漏洞验证的工具。 -
下面介绍一些比较有名的工具,例如有Goby、Xray、Fscan、ARL以及有一个新出的Xpoc。 -
提一句绿盟内部工具EZ(http://docs.ezreal.cool),不过好像不对外开放。
工具介绍
ARL
-
先介绍这个吧,名称为资产侦察灯塔系统(https://tophanttechnology.github.io/ARL-doc/)。主要功能为资产收集+监控,附带有一些POC漏洞验证的扫描功能。
-
但据我使用体验来说,可能因为没有Fofa会员没添加fofa搜索的功能。收集的资产信息差点意思。
-
类似于资产测绘工具,能收集一些组件信息、网页截图、子域名、IP端口开放情况。并且定时执行,起到监控收集和监控的效果。但是并没有新增资产提示的功能,不过运行时间久了能发现资产数量会增加。
-
工具自带有一些POC,不过因为服务器IP固定,在开启漏洞验证的情况下,扫几次IP可能就被标记为恶意IP了,所以我仅开启了资产监控的功能,做资产收集。
Xray
-
由长亭开源的一款工具,通常用的是免费版(https://github.com/chaitin/xray)
-
这个是我觉得比较好用的工具,亮点是被动扫描功能,可以将Burp流量转发到Xray扫描。还有一点是POC更新的比较勤快,可以去看看它的更新记录,会发现有一些近期的新漏洞也会及时更新POC。
-
运行方式有多种,可以主动或被动扫描,如果是验证通用系统应用或者组件漏洞的话,可以对链接进行主动扫描。
.xray_windows_amd64.exe webscan --basic-crawler http://testphp.vulnweb.com/ --html-output xray-crawler-testphp.html
-
发现可能存在的漏洞可以尝试被动扫描,本地运行程序,然后在Burp中设置上级代理。这时Xray会对Burp流量中的一些参数进行扫描。
.xray_windows_amd64.exe webscan --listen 127.0.0.1:7777 --html-output xray-testphp.html
-
有一个缺点是,可能会对访问速度等造成影响,因为毕竟访问流量多了一层处理。
Xpoc
-
是长亭新出的一款工具(https://github.com/chaitin/xpoc)。目前使用的效果并不是很好,不如Xray。
-
使用作为一款主动扫描器,输入IP/域名/Url。但是不知道为什么,经常访问出错,明明浏览器是可以正常访问的。不过目前版本仅到
0.0.7
,可以等待一手。
-
优点是每次运行时会自动同步云端POC进行更新。可以及时更新POC。而且我看那些POC也比较新。
Goby
-
不必多说,一款集成度比较高的工具,可以通过各种插件来强化功能。是大家比较喜欢用的工具(https://gobysec.net/)
-
可以收集组件信息、Web指纹等比较有用的信息。
-
不过缺点也很明显,速度非常慢,经常会卡进度。
-
提一句,因为Goby免费版POC很少,可以在GitHub上找一找别人写的POC导入,例如佩奇文库。
Fscan
-
最常见的内网扫描工具,但实际上扫描外网也可以用,同样带有一些POC。(https://github.com/shadow1ng/fscan) -
主打的就是一个速度快。使用时,加上 -np
禁ping参数可能会发现更多的资产,因为有一些服务器访问策略不允许ICMP协议访问。 -
其中有一个对SSH、Mysql等爆破的功能,可以自定义密码本。如果你发现这个单位密码命名喜欢用单位名称@年份这种,那就可以自己定义一个密码本,例如abc@2019、abc@2020、abc@123这些可能性更高的密码,说不定就会发现更多的弱口令漏洞。
工具联动思路
1、ARL+AWVS+XRay
-
思路为ARL收集资产,然后拿到AWVS扫通用漏洞,再用XRay进行一些事件漏洞的验证。
-
ARL收集的资产可以导出资产链接,然后AWVS也可以批量导入,
-
然后设置代理为Xray的监听端口,这时AWVS的扫描流量全部经过Xray进行被动扫描。
2、Burp+Xray
-
最简单的联动,只需要如上面写的配置Burp上级代理。
3、Goby+AWVS
-
直接有现成的插件,但是只支持AWVS13,目前应该是到了15.2的版本了。经过我的测试新版应该是不行。
-
不过我测试发现,网上能找到14.x版本api利用的文章,也适用于15.2版本。
-
参考源码,修改
tarurl
和apikey
就可以使用。import json
import time
from datetime import datetime
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
tarurl = "https://localhost:3443"
apikey = "1986ad8c0a5b3df4d7028d5f3c06e936c1fc7e549ff144a089c34a12b23d572fa"
headers = {"X-Auth": apikey, "Content-type": "application/json;charset=utf8"}
# 查看所有目标结果
def targets():
api_url = tarurl + '/api/v1/targets'
r = requests.get(url=api_url, headers=headers, verify=False)
print(r.json())
# 添加targets目标,获取target_id
def post_targets(url):
api_url = tarurl + '/api/v1/targets'
data = {
"address": url,
"description": "wyt_target",
"criticality": "10"
}
data_json = json.dumps(data)
r = requests.post(url=api_url, headers=headers, data=data_json, verify=False)
target_id = r.json().get("target_id")
print('target_id:', target_id)
return target_id
# 添加scans
def scans(url):
api_url = tarurl + '/api/v1/scans'
data = {
"target_id": url,
"profile_id": "11111111-1111-1111-1111-111111111112",
"schedule":
{"disable": False,
"start_date": None,
"time_sensitive": False
}
}
data_json = json.dumps(data)
r = requests.post(url=api_url, headers=headers, data=data_json, verify=False)
# target_id = r.json().get("target_id")
# print(r.json)
# 获取scan_id,通过start_date可知,最新生成的为第一个
def scan_id():
api_url = tarurl + '/api/v1/scans'
# print(api_url)
r = requests.get(url=api_url, headers=headers, verify=False)
scan_id = r.json().get("scans")[0].get("scan_id")
print('scan_id:', scan_id)
return scan_id
# 添加generate,并获取generate_id
def generate(url):
api_url = tarurl + '/api/v1/reports'
data = {
"template_id": "11111111-1111-1111-1111-111111111115",
"source": {
"list_type": "scans",
"id_list":
}
}
data_json = json.dumps(data)
r = requests.post(url=api_url, headers=headers, data=data_json, verify=False)
# print(r.json)
# 生成扫描报告,每次新生成的都在第一个
def html():
api_url = tarurl + '/api/v1/reports'
# print(api_url)
r = requests.get(url=api_url, headers=headers, verify=False)
html = r.json().get("reports")[0].get("download")[0]
url_html = tarurl + html
print('报告地址:', url_html)
r_html = requests.get(url=url_html, headers=headers, verify=False)
time_now = datetime.now().strftime('%Y-%m-%d %H%M%S')
with open("report-" + time_now + ".html", "wb") as code:
code.write(r_html.content)
code.close()
def pdf():
api_url = tarurl + '/api/v1/reports'
# print(api_url)
r = requests.get(url=api_url, headers=headers, verify=False)
pdf = r.json().get("reports")[0].get("download")[1]
url_pdf = tarurl + pdf
print('报告地址:', url_pdf)
r_html = requests.get(url=url_pdf, headers=headers, verify=False)
time_now = datetime.now().strftime('%Y-%m-%d %H%M%S')
with open("report-" + time_now + ".pdf", "wb") as code:
code.write(r_html.content)
code.close()
if __name__ == '__main__':
# targets()
# 添加到targets队列
target_id = post_targets("http://8.8.8.8/")
time.sleep(5)
# 添加到scans队列
scans(target_id)
time.sleep(5)
# 获取scan_id,并生成generate
scan_id = scan_id()
generate(scan_id)
time.sleep(5)
# 生成扫描报告
# pdf()
html()
原文始发于微信公众号(洪椒攻防实验室):盘点自带POC的漏洞扫描工具
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论