漏洞自动化分析工具(一)
字数 1864 2025-08-18 11:37:19
内网自动漏洞工具分析与开发教学文档
一、工具概述
1.1 工具背景
红日安全团队开发的自动化漏洞扫描工具,旨在提升内网渗透测试效率,减少手工测试工作量。工具整合了多种信息收集和漏洞扫描技术,形成一套完整的自动化流程。
1.2 主要功能
- 域名信息收集(WHOIS查询)
- 子域名枚举与收集
- Web应用指纹识别
- 漏洞扫描(包含常见Web漏洞)
- 端口与服务扫描
- 自动化报告生成
二、系统架构
2.1 目录结构
|-- dict/ # 字典文件存放目录
| |-- dns_server.txt
| |-- subnames.txt
| |-- next_sub.txt
|-- lib/ # BBScan漏洞扫描脚本库
|-- listen/ # AWVS扫描器监听模块
|-- report/ # 最终报告输出目录
|-- result/ # 临时结果存放目录
|-- rules/ # 规则文件
| |-- wahtweb.json # 应用指纹规则
| |-- commom.txt # 漏洞扫描规则
|-- subbrute/ # 子域名爆破库
|-- thirdlib/ # 第三方库(线程池等)
|-- utils/ # 子域名收集方法库
|-- *.py # 主程序文件
|-- *.bat # 批处理文件
三、信息收集模块详解
3.1 域名信息收集
3.1.1 WHOIS查询实现
def sub_domain_whois(url_domain):
"""通过第三方网站查询WHOIS信息"""
a1 = requests.get("http://whois.chinaz.com/%s" %(url_domain))
if 'Registration' not in a1.text:
print 'whois error'
else:
# 使用正则提取WHOIS信息
out_result = re.findall(r'<pre class="whois-detail">([\s\S]*)</pre>', a1.text.encode("GBK",'ignore'))
out_result_register = re.findall(r'http:a1.text.encode("GBK",'ignore'))
# 处理并存储结果
with open('report/whois_email_user.html','w') as fwrite:
fwrite.write('register_user:')
fwrite.write('<a href="http://' + um[0] + '">注册者反查询</a>')
fwrite.write('<pre>' + out_result[0] + '</pre>')
注意事项:
- 该方法依赖第三方网站结构,易因网站改版失效
- 建议使用标准WHOIS协议或API接口替代
3.2 子域名收集
3.2.1 主要子域名收集方法
| 脚本名称 | 技术原理 | 优点 | 缺点 |
|---|---|---|---|
| gxfr.py | 使用Bing/Google API搜索子域名 | 覆盖面广 | API可能失效 |
| subDomainsBrute.py | 字典爆破+DNS验证 | 可靠性高 | 速度较慢 |
| wydomain.py | 调用多个第三方接口查询 | 数据源丰富 | 依赖外部服务 |
| sublist3r.py | 搜索引擎爬取+字典枚举 | 功能全面 | 可能触发反爬 |
3.2.2 子域名爆破核心代码
# subDomainsBrute.py中的核心逻辑
def __init__(self, target, names_file, ignore_intranet, threads_num, output):
self.target = target.strip()
self.names_file = names_file
self.thread_count = threads_num
self.resolvers = [dns.resolver.Resolver() for _ in range(threads_num)]
self._load_dns_servers()
self._load_sub_names()
def run(self):
while not self.STOP_ME:
try:
sub = self.sub_queue.get(timeout=1.0)
cur_sub_domain = sub + '.' + self.target
# DNS解析验证
answers = self.resolvers[thread_id].query(cur_sub_domain)
if answers:
self._save_result(cur_sub_domain)
优化建议:
- 使用更智能的字典生成策略
- 实现分布式爆破提高速度
- 添加智能DNS服务器选择机制
四、Web应用指纹识别
4.1 指纹规则设计
wahtweb.json示例:
{
"discuz": [
{
"url": "/static/image/admincp/bg_repno.gif",
"md5": "403889213f03534a0651d7cfd6878b2c"
},
{
"url": "/",
"text": "<meta name=\"generator\" content=\"Discuz!",
"regexp": "<script src=\".*?logging\\.js"
}
],
"wordpress": [
{
"url": "/wp-login.php",
"text": ["wp-core-ui", "click-backtoblog"]
}
]
}
4.2 指纹识别核心逻辑
def identify_cms(self, rule):
url1 = rule["url"]
cms = rule["cms"]
try:
r = requests.get(url1 + rule["url"], timeout=5)
# MD5匹配
if "md5" in rule and hashlib.md5(r.content).hexdigest() == rule["md5"]:
return cms
# 文本匹配
elif "text" in rule:
if type(rule["text"]) is list:
for itext in rule["text"]:
if itext in r.text:
return cms
elif rule["text"] in r.text:
return cms
# 正则匹配
elif "regexp" in rule:
if re.search(rule["regexp"], r.text):
return cms
except:
pass
return None
优化方向:
- 增加动态权重评分机制
- 实现被动指纹识别
- 添加机器学习辅助识别
五、漏洞扫描模块
5.1 漏洞规则设计
commom.txt示例:
# Admin Panel
/admin/ {severity=2}
/config/ {severity=2}
# Database泄露
/db/ {severity=2}
/data/ {severity=2}
# 目录遍历
/.etc/passwd {tag="root:x:"}
# 配置文件泄露
/config.inc {status=200} {type_no="html"}
5.2 BBScan核心架构
class BBScan:
def __init__(self, url, lock, timeout=600, depth=2):
self.TIME_OUT = timeout
self.LINKS_LIMIT = 20
self.schema, self.host, self.path = self._parse_url(url)
self._init_rules()
self.url_queue = Queue.Queue()
def _scan_worker(self):
while True:
item = self.url_queue.get()
url_description, severity, tag, code, content_type, content_type_no = item
url = url_description['full_url']
# 发送请求并验证响应
status, headers, html_doc = self._http_request(url)
if status in [200,301,302,303]:
if not tag or html_doc.find(tag) >= 0:
self._save_vulnerability(url, severity)
def scan(self, threads=10):
for i in range(threads):
t = threading.Thread(target=self._scan_worker)
t.start()
# ...结果收集逻辑
扫描流程:
- 初始化规则和URL队列
- 启动多线程扫描器
- 每个线程从队列获取URL进行测试
- 根据响应匹配规则判断漏洞存在性
- 汇总结果并计算风险等级
六、高级扫描功能
6.1 Nmap集成
nmap -v --script=banner,http-headers,http-title -T4 -iL 'result.txt' -oX nmap_port_services.xml
扫描策略:
- 快速扫描(-T4)
- 获取banner信息
- 识别HTTP服务信息
- 结果输出为XML格式
6.2 AWVS自动化扫描
wvs.bat脚本内容:
"%wvs_path%\wvs_console.exe" /scan %%i /Profile default /SaveFolder d:\wwwscanresult\%pp%\
/Verbose --EnablePortScanning=true --UseCSA=true --RobotsTxt=true
关键参数:
/Profile default: 使用默认扫描配置--EnablePortScanning: 启用端口扫描--UseCSA: 使用客户端脚本分析--RobotsTxt: 检查robots.txt文件
七、报告生成模块
7.1 报告整合逻辑
def report_all():
# 整合Nmap结果
with open("nmap_port_services.xml") as f:
# 解析XML并生成HTML报告
# 整合漏洞扫描结果
with open("report/result_sentivesweb.html") as f:
# 格式化漏洞数据
# 生成最终报告索引
html_doc = left_html.substitute({
'domain_whois_email': 'whois_email_user.html',
'domain_result': 'result.txt',
'domain_port': 'result_sentives.html',
'domain_webscan': 'result_sentivesweb.html'
})
with open('report/left.htm', 'w') as outFile:
outFile.write(html_doc)
报告内容:
- 目标基本信息
- 子域名列表
- 开放端口和服务
- 识别的Web应用
- 发现的漏洞详情
- 风险等级评估
八、工具开发最佳实践
8.1 架构设计建议
- 模块化设计:将不同功能拆分为独立模块
- 标准化接口:定义清晰的模块间通信协议
- 配置分离:将规则、字典等与代码分离
- 日志系统:实现完善的日志记录
8.2 性能优化策略
- 智能任务调度:根据目标响应动态调整扫描速度
- 连接池管理:复用HTTP连接减少握手开销
- 结果缓存:避免重复扫描相同目标
- 分布式架构:支持多节点协同扫描
8.3 可维护性提升
- 代码注释规范:关键函数添加详细注释
- 文档自动化:使用工具自动生成API文档
- 单元测试:为关键模块编写测试用例
- 版本控制:使用Git等工具管理代码变更
九、扩展开发方向
9.1 功能扩展
- 漏洞利用自动化:对发现的漏洞实现自动化验证
- 内网横向移动:添加内网渗透辅助功能
- 0day检测:集成基于行为的异常检测
- 云环境支持:适配AWS、Azure等云环境
9.2 技术深化
- 机器学习应用:用于指纹识别和漏洞预测
- 图数据库存储:使用Neo4j等存储关联关系
- 动态分析:集成Headless浏览器进行深度检测
- API安全:添加专门的API接口测试功能
十、安全与合规
10.1 法律注意事项
- 确保扫描前获得合法授权
- 遵守目标网站的robots.txt限制
- 控制扫描强度避免造成服务中断
- 妥善保管扫描结果防止数据泄露
10.2 防护绕过策略
- 速率限制:自动检测并适应目标防护策略
- IP轮换:支持通过代理池分散请求
- 指纹伪装:模拟常见浏览器行为
- 时间随机化:避免规律性请求模式
本教学文档详细解析了自动化漏洞扫描工具的核心技术和实现方法,可作为安全工具开发的参考指南。开发者可根据实际需求调整和扩展各模块功能,构建更加强大和智能的安全测试工具。