0x01 简易自动挖掘漏洞环境搭建
1.服务器准备
这里准备了两台服务器,一台用于搭建AWVS扫描引擎,另一台作为控制端运行自动化脚本。
AWVS服务器搭建(Docker环境):
- 在Docker中拉取AWVS13的镜像。
docker pull secfa/docker-awvs
- 将Docker容器的3443端口映射到宿主机的任意端口(示例中使用14434)。
docker run -it -d -p 14434:3443 secfa/docker-awvs
- 访问AWVS管理界面。
https://服务器IP:映射端口(如14434)
脚本准备:
在控制端服务器上,通过联动脚本实现AWVS扫描任务的自动添加与调度。本文选取了一个支持并发任务数量控制的Python脚本,其核心代码如下:
import json
import time
import requests
requests.packages.urllib3.disable_warnings() # 忽略SSL警告
class AwvsApi(object):
# ... (类初始化代码,定义API地址、密钥、最大任务数等参数)
def __init__(self):
self.api_host = "https://localhost:3443"
self.api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 替换为你的API Key
self.max_task = 6 # 最大并发扫描任务数
self.headers = {
'X-Auth': self.api_key,
'content-type': 'application/json'
}
# ... (包含目标添加、扫描启动、状态检查等方法)
def addTarget(self):
# 批量添加目标到AWVS
pass
def scanTarget(self):
# 监控并启动扫描任务,控制并发数
pass
if __name__ == "__main__":
try:
AwvsApi.Usage()
scan = AwvsApi()
except Exception as e:
print(AwvsApi.error_color + "Done!")
配置脚本的关键在于获取AWVS的API Key。登录AWVS管理界面,点击右上角用户头像进入Profile,在下拉菜单中找到并复制API Key,将其填入上述脚本的api_key字段。
2.资产搜集
在渗透测试或漏洞挖掘中,高效地搜集目标资产是第一步。Fofa、Shodan等网络空间搜索引擎是强大的资产发现工具。例如,可以使用Fofa的语法进行精准检索:
title="集团" && after="2021-06-10" && before="2021-10-01" && country="CN"
为自动化批量获取资产,可以使用工具自动调用Fofa API进行查询和导出。在工具的配置界面填入Fofa邮箱和API Key(在个人中心获取),并输入查询语法和所需数量即可。
将导出的资产列表(URL)提供给上述Python脚本,即可启动自动化扫描流程。
0x02 配合公开漏洞进行批量化验证
在自动化扫描运行的同时,可以针对近期公开的通用型漏洞进行批量验证,提升漏洞挖掘效率。
1.漏洞选择
选择影响范围广、验证步骤简单的公开漏洞。例如,用友NC BeanShell远程代码执行漏洞(CNVD-2021-30167)就是一个典型的例子。
2.资产收集
使用Fofa搜索引擎搜集可能存在该漏洞的资产,搜索语法为:
icon_hash="1085941792" && country="CN"
利用工具将搜索结果导出,提取URL列表保存为文本文件。
3.编写验证脚本
该漏洞的访问路径相对固定。可以编写一个简单的Python脚本,批量请求该路径以验证漏洞是否存在。
# author:soufaker
import requests
import sys
py_str = "/servlet/~ic/bsh.servlet.BshServlet"
head = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0'
}
success_code = []
with open('NC.txt', 'r', encoding="utf-8") as f:
for i in f:
if i[0:4] != 'http':
py_url = 'http://' + (i.strip('\n')) + py_str
else:
py_url = (i.strip('\n')) + py_str
print(py_url)
try:
x = requests.get(py_url, allow_redirects=False, headers=head, timeout=2)
if x.status_code == 200:
success_code.append(py_url)
print("存在漏洞")
except:
print('无法连接')
continue
print(success_code)
with open('success.txt', 'w+', encoding="utf-8") as f:
for s in success_code:
f.writelines(s + '\n')
运行脚本后,success.txt文件中将记录所有存在漏洞的URL地址。
4.资产归属查询
在提交漏洞报告时,通常需要确认目标资产的归属单位。
- ICP备案查询:通过工信部备案平台
https://beian.miit.gov.cn进行查询。
- 系统界面信息查询:对于无法直接通过IP查到备案的系统,可以尝试访问其登录页或相关界面,系统名称、公司LOGO或版权信息常会暴露所属单位。再结合
天眼查等工具进行核实。