用Python复刻Burp Suite核心功能:个人Web安全扫描器完整实现
引言
Burp Suite是Web安全领域最知名的渗透测试工具,其企业版价格不菲,社区版功能受限。本文将介绍如何用纯Python实现一个具备Burp Suite核心功能的个人Web安全扫描器,涵盖SQL注入检测、XSS检测、目录枚举、子域名发现、端口扫描、敏感信息泄露检测、HTTP安全头检查等完整功能模块。
项目已开源,完整代码3000+行,所有模块均可直接运行。
一、工具整体架构
1.1 模块化设计
整个扫描器采用模块化架构,由以下核心组件构成:
web-scanner/
├── scanner.py # 主程序入口(命令行解析、任务调度)
├── utils.py # 工具函数库(HTTP客户端、日志、辅助函数)
├── report.py # HTML报告生成器
├── 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-Agent:
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 = "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"Microsoft SQL Native Client error",
r"ERROR:\s+syntax error at or near", # PostgreSQL
r"ORA-\d{5}", # Oracle
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>alert("xSsTeSt1234")</script>', # 基础标签
'"><img src=x onerror=alert("xSsTeSt1234")>', # 事件处理器
'<svg onload=alert("xSsTeSt1234")>', # SVG标签
'<input autofocus onfocus=alert("xSsTeSt1234")>', # 自动聚焦
'javascript: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、cpanel等
- CMS特定路径:WordPress、Joomla、Drupal、Laravel等
- API端点:api/v1、swagger、graphql等
- 敏感配置:.env、config.php、database.yml等
- 版本控制:.git、.svn、.hg等
- 备份文件:backup.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",
]
第二阶段:DNS字典爆破
使用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 = {
"SSH": [b"SSH-", b"OpenSSH"],
"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.sql、backup.zip— 数据库/代码备份phpinfo.php— 服务器信息泄露actuator/env— Spring Boot Actuator暴露
同时检测目录列表(Directory Listing)和HTTP响应头中的信息泄露。
2.7 HTTP安全头检查 (header_check.py)
检查15+安全相关HTTP头:
| 安全头 | 作用 | 缺失风险等级 |
|---|---|---|
| Content-Security-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/
评论