漏洞自动化分析工具(一)
字数 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)

优化建议

  1. 使用更智能的字典生成策略
  2. 实现分布式爆破提高速度
  3. 添加智能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

优化方向

  1. 增加动态权重评分机制
  2. 实现被动指纹识别
  3. 添加机器学习辅助识别

五、漏洞扫描模块

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()
        # ...结果收集逻辑

扫描流程

  1. 初始化规则和URL队列
  2. 启动多线程扫描器
  3. 每个线程从队列获取URL进行测试
  4. 根据响应匹配规则判断漏洞存在性
  5. 汇总结果并计算风险等级

六、高级扫描功能

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)

报告内容

  1. 目标基本信息
  2. 子域名列表
  3. 开放端口和服务
  4. 识别的Web应用
  5. 发现的漏洞详情
  6. 风险等级评估

八、工具开发最佳实践

8.1 架构设计建议

  1. 模块化设计:将不同功能拆分为独立模块
  2. 标准化接口:定义清晰的模块间通信协议
  3. 配置分离:将规则、字典等与代码分离
  4. 日志系统:实现完善的日志记录

8.2 性能优化策略

  1. 智能任务调度:根据目标响应动态调整扫描速度
  2. 连接池管理:复用HTTP连接减少握手开销
  3. 结果缓存:避免重复扫描相同目标
  4. 分布式架构:支持多节点协同扫描

8.3 可维护性提升

  1. 代码注释规范:关键函数添加详细注释
  2. 文档自动化:使用工具自动生成API文档
  3. 单元测试:为关键模块编写测试用例
  4. 版本控制:使用Git等工具管理代码变更

九、扩展开发方向

9.1 功能扩展

  1. 漏洞利用自动化:对发现的漏洞实现自动化验证
  2. 内网横向移动:添加内网渗透辅助功能
  3. 0day检测:集成基于行为的异常检测
  4. 云环境支持:适配AWS、Azure等云环境

9.2 技术深化

  1. 机器学习应用:用于指纹识别和漏洞预测
  2. 图数据库存储:使用Neo4j等存储关联关系
  3. 动态分析:集成Headless浏览器进行深度检测
  4. API安全:添加专门的API接口测试功能

十、安全与合规

10.1 法律注意事项

  1. 确保扫描前获得合法授权
  2. 遵守目标网站的robots.txt限制
  3. 控制扫描强度避免造成服务中断
  4. 妥善保管扫描结果防止数据泄露

10.2 防护绕过策略

  1. 速率限制:自动检测并适应目标防护策略
  2. IP轮换:支持通过代理池分散请求
  3. 指纹伪装:模拟常见浏览器行为
  4. 时间随机化:避免规律性请求模式

本教学文档详细解析了自动化漏洞扫描工具的核心技术和实现方法,可作为安全工具开发的参考指南。开发者可根据实际需求调整和扩展各模块功能,构建更加强大和智能的安全测试工具。

内网自动漏洞工具分析与开发教学文档 一、工具概述 1.1 工具背景 红日安全团队开发的自动化漏洞扫描工具,旨在提升内网渗透测试效率,减少手工测试工作量。工具整合了多种信息收集和漏洞扫描技术,形成一套完整的自动化流程。 1.2 主要功能 域名信息收集(WHOIS查询) 子域名枚举与收集 Web应用指纹识别 漏洞扫描(包含常见Web漏洞) 端口与服务扫描 自动化报告生成 二、系统架构 2.1 目录结构 三、信息收集模块详解 3.1 域名信息收集 3.1.1 WHOIS查询实现 注意事项 : 该方法依赖第三方网站结构,易因网站改版失效 建议使用标准WHOIS协议或API接口替代 3.2 子域名收集 3.2.1 主要子域名收集方法 | 脚本名称 | 技术原理 | 优点 | 缺点 | |---------|---------|------|------| | gxfr.py | 使用Bing/Google API搜索子域名 | 覆盖面广 | API可能失效 | | subDomainsBrute.py | 字典爆破+DNS验证 | 可靠性高 | 速度较慢 | | wydomain.py | 调用多个第三方接口查询 | 数据源丰富 | 依赖外部服务 | | sublist3r.py | 搜索引擎爬取+字典枚举 | 功能全面 | 可能触发反爬 | 3.2.2 子域名爆破核心代码 优化建议 : 使用更智能的字典生成策略 实现分布式爆破提高速度 添加智能DNS服务器选择机制 四、Web应用指纹识别 4.1 指纹规则设计 wahtweb.json示例: 4.2 指纹识别核心逻辑 优化方向 : 增加动态权重评分机制 实现被动指纹识别 添加机器学习辅助识别 五、漏洞扫描模块 5.1 漏洞规则设计 commom.txt示例: 5.2 BBScan核心架构 扫描流程 : 初始化规则和URL队列 启动多线程扫描器 每个线程从队列获取URL进行测试 根据响应匹配规则判断漏洞存在性 汇总结果并计算风险等级 六、高级扫描功能 6.1 Nmap集成 扫描策略 : 快速扫描(-T4) 获取banner信息 识别HTTP服务信息 结果输出为XML格式 6.2 AWVS自动化扫描 wvs.bat脚本内容: 关键参数 : /Profile default : 使用默认扫描配置 --EnablePortScanning : 启用端口扫描 --UseCSA : 使用客户端脚本分析 --RobotsTxt : 检查robots.txt文件 七、报告生成模块 7.1 报告整合逻辑 报告内容 : 目标基本信息 子域名列表 开放端口和服务 识别的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轮换 :支持通过代理池分散请求 指纹伪装 :模拟常见浏览器行为 时间随机化 :避免规律性请求模式 本教学文档详细解析了自动化漏洞扫描工具的核心技术和实现方法,可作为安全工具开发的参考指南。开发者可根据实际需求调整和扩展各模块功能,构建更加强大和智能的安全测试工具。