返回首页

用Python复刻Burp Suite核心功能:个人Web安全扫描器完整实现

复刻Burp Suite核心功能:个人Web安全扫描器完整实现

引言

Burp Suite是Web安全领域最知名的渗透测试工具,其企业版价格不菲,社区版功能受限。本文将介绍如何用纯Python实现一个具备Burp Suite核心功能的个人Web安全扫描器,涵盖SQL注入检测、检测、目录枚举、子域名发现、端口扫描、敏感信息泄露检测、HTTP安全头检查等完整功能模块。

项目已开源,完整代码3000+行,所有模块均可直接运行。

一、工具整体架构

1.1 模块化设计

整个扫描器采用模块化架构,由以下核心组件构成:

/
├── scanner.py          # 主程序入口(命令行解析、任务调度)
├── utils.py            # 工具函数库(HTTP客户端、日志、辅助函数)
├── report.py           # 报告生成器
├── modules/
│   ├── sqli.py         # SQL注入检测模块
│   ├── xss.py          # XSS检测模块
│   ├── dirscan.py      # 目录枚举模块
│   ├── subdomain.py    # 子域名枚举模块
│   ├── portscan.py     # 端口扫描模块
│   ├── leak_detect.py  # 敏感信息泄露检测
│   ├── header_check.py # HTTP安全头检查
│   └── crawler.py      # Web爬虫
└── wordlist/
    ├── common_paths.txt  # 目录字典(500+路径)
    └── subdomains.txt    # 子域名字典(200+条目)

1.2 核心工具类 (utils.py)

所有模块共享一个线程安全的HTTP客户端,支持代理、超时、重试和随机User-

class HttpClient:
    def __init__(self, proxy=None, timeout=10, max_retries=2):
        self.session = requests.Session()
        retry_strategy = Retry(total=max_retries, backoff_factor=0.5,
                               status_forcelist=[429, 500, 502, 503, 504])
        adapter = HTTPAdapter(max_retries=retry_strategy, pool_maxsize=20)
        self.session.mount("http://", adapter)
        self.session.mount("https://", adapter)
        if proxy:
            self.session.proxies = {"http": proxy, "https": proxy}

每次请求前随机更换User-Agent(内置12+常见浏览器UA),避免被WAF拦截。

1.3 统一的结果结构

所有发现的安全问题统一使用ScanResult类记录,包含分类、严重等级、URL、描述、证据和修复建议:

class ScanResult:
    SEVERITY_CRITICAL = ""
    SEVERITY_HIGH = "HIGH"
    SEVERITY_MEDIUM = "MEDIUM"
    SEVERITY_LOW = "LOW"
    SEVERITY_INFO = "INFO"

二、核心检测算法原理

2.1 SQL注入检测 (sqli.py)

SQL注入检测模块实现三种经典检测技术:

(1)报错注入检测

发送特殊字符(单引号、双引号等)和SQL语法payload,检测响应中是否出现数据库错误信息。内置40+种数据库错误特征正则:

ERROR_PATTERNS = [
    r"sql syntax.*?mysql",
    r" SQL Native Client error",
    r"ERROR:\s+syntax error at or near",  # PostgreSQL
    r"ORA-\d{5}",  # 
    r"sqlite3\.OperationalError",
    r"You have an error in your SQL syntax",
    # ... 40+ patterns
]

(2)时间盲注检测

发送带延时函数的payload(MySQL SLEEP、MSSQL WAITFOR、PostgreSQL pg_sleep),通过对比响应时间差判断漏洞是否存在:

# MySQL: ' OR SLEEP(5)--
# MSSQL: '; WAITFOR DELAY '0:0:5'--
# PgSQL: '; SELECT pg_sleep(5)--
# 时间阈值: 4秒
if resp and elapsed >= time_threshold:
    # 确认漏洞

(3)布尔盲注检测

发送逻辑真/假两组payload,对比响应内容的MD5哈希值差异:

true_payload = "' AND 1=1--"
false_payload = "' AND 1=2--"
# 如果true和false响应的content hash不同,则存在布尔盲注

2.2 XSS检测 (xss.py)

XSS模块检测三种类型的跨站脚本攻击:

反射型XSS:向参数注入15种payload变体,检测标记是否在响应中被原样反射:

PAYLOADS = [
    '<script>("xSsTeSt1234")</script>',           # 基础标签
    '"><img src=x onerror=alert("xSsTeSt1234")>',      # 事件处理器
    '<svg onload=alert("xSsTeSt1234")>',                # SVG标签
    '<input autofocus onfocus=alert("xSsTeSt1234")>',   # 自动聚焦
    ':alert("xSsTeSt1234")',                  # 伪协议
    # ... 15种变体,含编码绕过
]

DOM型XSS:分析页面JavaScript代码中的数据源(Source)和危险函数(Sink)配对:

DOM_SOURCES = ["document.URL", "location.href", "location.hash", "window.name"]
DOM_SINKS = ["document.write", "eval(", "innerHTML", "location="]

2.3 目录枚举 (dirscan.py)

内置500+常见路径字典,覆盖以下类别:

  • 管理后台:admin、wp-admin、phpmyadmin、
  • 特定路径:WordPress、Joomla、、Laravel等
  • 端点:api/v1、swagger、graphql等
  • 敏感配置:.env、config.php、.yml等
  • 版本控制:.git、.svn、.hg等
  • 备份文件.sql、dump.sql、www.zip等
  • 调试文件:phpinfo.php、debug.log、server-status等

多线程并发扫描,每个路径根据HTTP状态码和响应大小判断是否存在:

INTERESTING_CODES = {200, 201, 301, 302, 307, 308, 401, 403}
# .git/.env等敏感路径发现后标记为MEDIUM或HIGH严重等级

2.4 子域名枚举 (subdomain.py)

采用两阶段策略:

第一阶段:证书透明度查询

查询crt.sh和CertSpotter API,从公开的SSL证书日志中提取子域名:

CT_APIS = [
    "https://crt.sh/?q=%.{domain}&output=json",
    "https://api.certspotter.com/v1/issuances?domain={domain}&include_subdomains=true",
]

第二阶段:字典爆破

使用200+常见前缀进行DNS解析,多线程并发:

SUBDOMAINS = ["www", "mail", "api", "dev", "staging", "admin", "cdn", ...]
# socket.gethostbyname() 解析验证

2.5 端口扫描 (portscan.py)

TCP全连接扫描70+常见端口,包含服务指纹识别:

# Banner抓取
sock.send(f"HEAD / HTTP/1.0\r\nHost: {host}\r\n\r\n".encode())
banner = sock.recv(1024)

# 指纹匹配
SERVICE_SIGNATURES = {
    "": [b"SSH-", b""],
    "FTP": [b"220 ", b"vsFTPd", b"ProFTPD"],
    "MySQL": [b"\x4a\x00\x00\x00", b"mysql"],
    "Redis": [b"+PONG", b"-NOAUTH"],
}

对HTTPS端口自动进行TLS握手检测。

2.6 敏感信息泄露检测 (leak_detect.py)

检查40+敏感文件路径,包括:

  • .git/HEAD.git/config — Git仓库泄露
  • .env.env.production — 环境变量泄露
  • dump.sqlbackup.zip — 数据库/代码备份
  • phpinfo.php — 服务器信息泄露
  • actuator/env — Spring Boot Actuator暴露

同时检测目录列表(Directory Listing)和HTTP响应头中的信息泄露。

2.7 HTTP安全头检查 (header_check.py)

检查15+安全相关HTTP头:

安全头 作用 缺失风险等级
Content--Policy 防XSS/代码注入 HIGH
Strict-Transport-Security 强制HTTPS HIGH
X-Frame-Options 防点击劫持 HIGH
X-Content-Type-Options 防MIME嗅探 MEDIUM
Referrer-Policy 控制引用来源 LOW
Permissions-Policy 浏览器功能控制 LOW
Cross-Origin-* 跨域隔离策略 INFO

同时检查Cookie的Secure、HttpOnly、SameSite属性和CORS配置。

三、使用方法

3.1 安装

cd web-scanner
pip install -r requirements.txt

3.2 基本用法

# 完整扫描
python scanner.py --url http://target.com

# 指定扫描类型
python scanner.py --url http://target.com --type sqli,xss

# 使用代理(配合Burp Suite)
python scanner.py --url http://target.com --type all --proxy http://127.0.0.1:8080

# 自定义端口范围
python scanner.py --url http://target.com --type port --ports "80,443,8080-9000"

# 多线程加速
python scanner.py --url http://target.com --type all --threads 20 --timeout 15

3.3 输出报告

扫描完成后自动生成美观的HTML报告,包含:

  • 风险统计卡片(按严重等级分类)
  • 类别分布柱状图
  • 详细发现表格(含颜色标记、证据、修复建议)
  • 支持打印输出

四、设计亮点

4.1 多线程并发

使用concurrent.futures.ThreadPoolExecutor实现多线程扫描,目录枚举、端口扫描、子域名爆破等IO密集型任务大幅提速。

4.2 WAF检测

扫描前自动检测目标是否部署了WAF(Cloudflare、Akamai、Sucuri、Imperva等),通过分析响应头和特征码判断。

4.3 智能爬虫

内置Web爬虫自动提取页面链接和表单,爬取结果自动传递给SQLi和XSS模块进行深度测试。

4.4 随机化策略

内置12+浏览器User-Agent,每次请求随机选择,降低被封禁的概率。支持HTTP/HTTPS代理,可配合Burp Suite使用。

五、总结

本文实现了一个完整的Python Web安全扫描器,覆盖了Burp Suite的核心功能。代码总量3000+行,所有模块均可独立运行。工具支持命令行参数、多线程、代理、自定义字典等特性,适合安全研究人员学习和日常使用。

重要声明:本工具仅用于授权的安全测试。未经授权对他人系统进行扫描是违法行为。

项目路径:/root/tools/web-scanner/

评论