|
1 | 1 |  |
2 | 2 |
|
3 | 3 | 郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担。 |
4 | | -# 介绍 |
| 4 | +### 介绍 |
5 | 5 | 作者:[p0desta](https://github.com/p0desta/),[Y0!0](https://github.com/hooray195),[0cat ](https://github.com/0cat-r) |
6 | 6 |
|
7 | 7 | 团队:[0x727](https://github.com/0x727),未来一段时间将陆续开源工具,地址:[https://github.com/0x727](https://github.com/0x727) |
8 | 8 |
|
9 | 9 | 定位:在攻防和渗透测试中,可以更加方便的找到一些绕过的点,比如403bypass,比如shiro的权限绕过 |
10 | 10 |
|
11 | | -语言:Java11 |
| 11 | +语言:Java 8(`pom.xml` 中 `source/target=8`,产物可在 Java 8 环境运行;构建可使用 JDK 8+) |
12 | 12 |
|
13 | 13 | 功能:权限绕过的自动化bypass的burpsuite插件。 |
14 | 14 |
|
15 | 15 | 此项目是基于p0desta师傅的项目[https://github.com/p0desta/AutoBypass403-BurpSuite](https://github.com/p0desta/AutoBypass403-BurpSuite)进行二开的。用于权限绕过,403bypass等的自动化bypass的Burpsuite插件。感谢p0desta师傅的开源,本二开项目已经过p0desta师傅本人允许开源。 |
16 | 16 |
|
17 | | -# 新增加的功能 |
18 | | - |
19 | | -1. 新增被动扫描功能 |
20 | | - |
21 | | - |
22 | | - |
23 | | -2. 对被动扫描和主动扫描的逻辑做重新判断 |
24 | | -3. 增加字段tool 和id 可以判断哪些是被动流量 哪些是主动流量 |
25 | | -4. 添加了/public/..;的fuzz |
26 | | -5. 被动扫描下,对如下静态文件后缀进行过滤,不进行绕过 |
27 | | - |
28 | | -`js,css,png,gif,jpg,mp4,mp3,tif,swf,wmv,map,zip,exe,so,rar,gz,iso,avi,pdf,doc` |
29 | | - |
30 | | -6. 增加了request/response 双窗格显示 |
31 | | - |
32 | | - |
33 | | - |
34 | | -# 用法 |
35 | | -被动扫描:勾选上之后,proxy 流量中出现403 301 404 302 的时候去自动bypass |
36 | | -主动扫描:取消勾选之后,可以在proxy 流量中选择一些右键发送到BypassPro 去自动fuzz |
37 | | -当状态码是200,415,405则会进行回显,页面相似度80%以下进行回显 |
38 | | - |
39 | | -主动扫描:右键发送 |
40 | | - |
41 | | - |
42 | | - |
43 | | -**注意事项**,该工具会一定程度上触发waf,所以当目标站点有waf 请关闭被动扫描。 |
44 | | - |
45 | | -# 案例 |
| 17 | +### 当前版本更新 |
| 18 | + |
| 19 | +#### 新增功能 |
| 20 | + |
| 21 | +**1. 新增 Mode 2: Auto WAF Bypass(自动 WAF 绕过)** |
| 22 | + |
| 23 | +右键 `Send to BypassPro (WAF)` 触发,自动对请求 Body 进行多种编码变形绕过 WAF: |
| 24 | + |
| 25 | +- Body 字符集编码:UTF-16 / UTF-16BE / UTF-16LE / UTF-32 / UTF-32LE / IBM037 / cp290 |
| 26 | +- Body 压缩:Gzip 压缩请求体,同时设置 `Content-Encoding: gzip` |
| 27 | +- Content-Type 欺骗: |
| 28 | + - `multipart/form-data`:表单参数自动拆解为标准 multipart 格式;非表单类型做 Header 欺骗 |
| 29 | + - `text/plain`:伪装 Content-Type 绕过 WAF 对 JSON/XML 的检测 |
| 30 | +- 每种变形生成独立变体请求,结果经相似度过滤后入表 |
| 31 | + |
| 32 | +**2. 新增 Mode 3: Manual WAF Bypass(手动 WAF 工作台)** |
| 33 | + |
| 34 | +右键 `Send to BypassPro (Manual WAF)` 将请求送入工作台,类似 Repeater 但专为 WAF 绕过设计: |
| 35 | + |
| 36 | +- 编辑器:使用 Burp 原生 IMessageEditor,支持 Raw/Hex 视图,可处理二进制/Gzip 数据 |
| 37 | +- 目标可编辑:Host/Port/HTTPS 输入框,支持测试 Host 头欺骗或切换目标 |
| 38 | +- Transform Tools(变换工具): |
| 39 | + - Encoding:URL Encode/Decode、Double URL、Base64、Hex、Unicode Escape |
| 40 | + - Case:UPPER、lower、RaNdOm 随机大小写 |
| 41 | + - Unicode:全角字符、同形字 (Homoglyph) |
| 42 | + - SQL Bypass:`/**/` 包裹、`/*!50000*/` 版本注释、空白转 `/**/` |
| 43 | + - Path:`../` 插入、`..;/` Tomcat 绕过 |
| 44 | + - Dirty Data:`{{dirty(N)}}` 随机数字、`{{dirtynull(N)}}` NUL 字节(发送时展开) |
| 45 | + - Request:Gzip 压缩、To Multipart 转换、HTTP/1.0 降级、字符集编码(UTF-16/32/IBM037 等) |
| 46 | +- 发送控制: |
| 47 | + - Send / Cancel 按钮,支持中断请求 |
| 48 | + - Follow Redirect 开关,控制是否跟随 301/302/303/307/308(最多 10 跳) |
| 49 | + - Ctrl+Enter / Cmd+Enter 快捷发送 |
| 50 | +- 状态栏:显示 Status Code / Time(ms) / Request Size / Response Size / Redirect 次数 |
| 51 | +- History: |
| 52 | + - 显示 Method / Path / Status / Length / Time(ms) / 时间戳 |
| 53 | + - 双击或右键可将历史请求加载回编辑器继续修改 |
| 54 | + - 最多保留 50 条,Undo/Redo 最多 20 步 |
| 55 | +- 结果记录:不做相似度过滤,所有发送都写入 History 和 Dashboard |
| 56 | + |
| 57 | +**3. UI 重构** |
| 58 | + |
| 59 | +- 页签拆分:Dashboard(结果表格 + Request/Response 双窗格)/ Config(配置管理)/ Manual WAF(手动工作台) |
| 60 | +- 进度显示:Dashboard 顶部增加动画进度条 + 完成数/总数 |
| 61 | +- Auto Scan:勾选后监听 Proxy 响应,命中 401/403 时自动触发扫描 |
| 62 | +- 右键菜单拆分: |
| 63 | + - `Send to BypassPro (Access Control)`:访问控制绕过 |
| 64 | + - `Send to BypassPro (WAF)`:WAF 绕过(Body 编码变形) |
| 65 | + - `Send to BypassPro (Manual WAF)`:送入手动工作台 |
| 66 | + |
| 67 | +**4. 配置文件升级(参考 HaE)** |
| 68 | + |
| 69 | +- 外置配置:`~/.config/BypassPro/BypassPro-config.yaml` |
| 70 | +- 首次启动:若外置文件不存在,从 jar 内置模板自动生成 |
| 71 | +- 更新插件不覆盖:只有点击 Config 页的 Reinit 并确认才会重置 |
| 72 | +- Config 页面:支持 Reload(重新加载)/ Reinit(恢复默认)/ 当前规则展示 |
| 73 | + |
| 74 | +#### 优化与修复 |
| 75 | + |
| 76 | +**Mode 1 (Access Control)** |
| 77 | +- HTTP-Version 处理:修改版本号时不再清空原有 Headers |
| 78 | + |
| 79 | +**Mode 2 (WAF)** |
| 80 | +- Body 二进制安全:使用 ISO_8859_1 处理,不破坏二进制数据 |
| 81 | +- Content-Type charset:正则替换已有 charset,不会出现 `charset=utf-8; charset=utf-16` |
| 82 | +- CL-TE 冲突:修改 Body 后自动移除 `Transfer-Encoding` 头 |
| 83 | +- Multipart 智能转换:表单参数拆解还原,非表单做 Header 欺骗 |
| 84 | +- 重定向保留 Payload:跟随重定向时传入已编码的 Body |
| 85 | + |
| 86 | +**Mode 3 (Manual)** |
| 87 | +- 脏数据与 CL:检测用户是否手动修改了 Content-Length(用于 CL-TE 测试),若已修改则不自动覆盖 |
| 88 | +- HTTP/1.0 降级:完整清洗 Keep-Alive / Transfer-Encoding / Connection 头 |
| 89 | +- Gzip 防双重压缩:检查 Header 和 Magic Bytes (1F 8B),已压缩时提示 |
| 90 | + |
| 91 | +**全局** |
| 92 | +- 线程池:全局单例 ExecutorService,避免线程爆炸 |
| 93 | +- 内存保护:History 最多 50 条,Undo/Redo 最多 20 步 |
| 94 | +- 并发安全:Dashboard 表格写入加锁,避免多线程竞争 |
| 95 | + |
| 96 | +### 用法 |
| 97 | + |
| 98 | +#### 工作模式(Modes) |
| 99 | + |
| 100 | +本插件围绕“**把同一个目标请求快速变形并重放**”来提高发现绕过点的效率。不同模式的区别主要是:**触发方式**、**使用的规则集(profile)**、**是否做相似度过滤**、**结果如何落表**。 |
| 101 | + |
| 102 | +##### 1)Auto Scan(自动触发 / 访问控制) |
| 103 | +- **入口**:`Dashboard` 页勾选 **Auto Scan** |
| 104 | +- **触发方式**:监听 Proxy 响应;当响应状态码命中 `401/403` 时自动触发 |
| 105 | +- **规则集**:固定使用 `profiles.access_control`(不会跑 WAF profile) |
| 106 | +- **静态资源过滤**:对常见静态后缀不触发(避免噪声与额外请求) |
| 107 | +- **用途定位**:批量找 401/403 访问控制绕过点(如 403 bypass、权限绕过) |
| 108 | + |
| 109 | +##### 2)主动 Auth Bypass(自动 / 访问控制) |
| 110 | +- **入口**:在 Proxy/Target 等视图选中请求右键 **Send to BypassPro (Access Control)** |
| 111 | +- **规则集**:`profiles.access_control` |
| 112 | +- **用途定位**:对“你指定的某一个请求”做访问控制绕过变形与重放(比 Auto Scan 更可控) |
| 113 | + |
| 114 | +##### 3)主动 WAF Bypass(自动 / 规则集) |
| 115 | +- **入口**:右键 **Send to BypassPro (WAF)** |
| 116 | +- **规则集**:优先使用 `profiles.waf`;当配置未提供 `waf` profile 时会回退到 `profiles.access_control` |
| 117 | +- **用途定位**:对“你指定的某一个请求”按 WAF 规则集做路径/头部等自动变形(适合验证被拦截页/风控页的差异) |
| 118 | + |
| 119 | +##### 4)主动 WAF Bypass(手动 / 工作台) |
| 120 | +- **入口**:右键 **Send to BypassPro (Manual WAF)**(把选中的请求送入 `Manual WAF` 页签) |
| 121 | +- **交互方式**:在工作台里直接编辑请求;选中文本后点击右侧/下方的变换工具进行变形;点击 **Send** 发送 |
| 122 | +- **结果记录**:手动模式不做相似度过滤;每次 Send 都会记录到 **History**,同时写入 Dashboard(`Tool` 列会标记为 `WAF Bypass (Manual)`) |
| 123 | +- **用途定位**:面向“研究型绕过”,适合逐步试探、组合变形、观察差异 |
| 124 | + |
| 125 | +#### 模式背后的核心逻辑(How it works) |
| 126 | + |
| 127 | +##### A. 变形规则如何生成 |
| 128 | +- 自动模式的变形主要来自配置文件 `profiles.<profile>`(`access_control`/`waf`): |
| 129 | + - **suffix**:对路径尾部追加变体(如 `/.`、`;/.css`、`%09` 等) |
| 130 | + - **prefix**:对路径的每一层目录做前缀变体(如 `;/`、`%2e/`、`images/..;/` 等) |
| 131 | + - **boundary_insert**:在目录边界插入标记(一次只改一个边界,避免组合爆炸) |
| 132 | + - **headers**:伪造/注入 Header 变体(如 `X-Forwarded-For`、`X-Client-IP` 等) |
| 133 | + |
| 134 | +##### B. 自动模式如何回显/落表(减少噪声) |
| 135 | +- **落表候选状态码**:变体请求(如遇 30x 会跟随重定向,最多 2 跳)最终响应状态码命中以下集合时,才进入“可能入表”的判断: |
| 136 | + `200/206/304/301/302/303/307/308/405/415` |
| 137 | +- **入表判定**:同时满足: |
| 138 | + - **候选状态码命中**(见上) |
| 139 | + - 且满足以下任意一条: |
| 140 | + - **相似度低于阈值**:变体响应 body 与原始响应 body 的相似度 \(ratio\) 满足 `ratio < threshold` |
| 141 | + - **状态码类别变化**:原始与变体的状态码“百位段”不同(例如 `403 -> 302`、`401 -> 200`) |
| 142 | +- **相似度阈值来源**:统一由 `general.similarity_threshold` 管理(在 `Config -> General` 设置) |
| 143 | + - **0-1 含义**:表示“变体响应与原始响应的相似程度”(越接近 1 越相似) |
| 144 | + - **值越大**:更容易满足 `ratio < threshold`,因此更容易入表(更宽松,噪声可能更多) |
| 145 | + - **值越小**:更不容易入表(更严格,只保留差异更大的响应) |
| 146 | + |
| 147 | +##### C. 手动模式为什么不做相似度过滤 |
| 148 | +- 手动模式的价值在于“人”在迭代选择变形与观察差异,所以工作台会保留所有尝试,方便回溯与对比。 |
| 149 | + |
| 150 | +##### D. 手动模式的变换工具(Transform Tools) |
| 151 | +- Transform Tools 会对“你选中的文本”做编码/变形(如 URL/Base64/Unicode、大小写、全角/同形字、SQL 注释变形、路径变形等)。 |
| 152 | +- 为避免插入超大脏数据导致 Burp 卡顿,工作台支持用占位符插入脏数据: |
| 153 | + - `{{dirty(N)}}`:发送时生成 N 位随机数字 |
| 154 | + - `{{dirtynull(N)}}`:发送时生成 N 个 NUL 字节 |
| 155 | + - 发送前会展开占位符并重算 `Content-Length`,保证实际发包字节与长度一致 |
| 156 | + |
| 157 | +#### 内置规则(不可配置) |
| 158 | + |
| 159 | +以下规则硬编码在插件中,用户无法修改: |
| 160 | + |
| 161 | +| 规则 | 值 | 说明 | |
| 162 | +|------|-----|------| |
| 163 | +| Auto Scan 触发状态码 | 401, 403 | Proxy 响应命中这些状态码时触发扫描 | |
| 164 | +| 落表候选状态码 | 200, 206, 304, 301, 302, 303, 307, 308, 405, 415 | 变体响应状态码必须在此范围才可能入表 | |
| 165 | +| 自动模式重定向跳数 | 最多 2 跳 | 跟随 30x 重定向的最大次数 | |
| 166 | +| Manual 模式重定向跳数 | 最多 10 跳 | Follow Redirect 开启时的最大次数 | |
| 167 | +| History 最大条数 | 50 条 | 超出后自动删除最旧记录 | |
| 168 | +| Undo/Redo 最大步数 | 20 步 | 超出后自动丢弃最旧状态 | |
| 169 | +| 静态资源过滤后缀 | .js, .css, .png, .jpg, .gif, .ico, .svg, .woff 等 | Auto Scan 不扫描这些后缀 | |
| 170 | + |
| 171 | +#### 快速开始(推荐流程) |
| 172 | +- **先用 Auto Scan**:快速覆盖站点常见的 401/403 场景,找“可能绕过点” |
| 173 | +- **对可疑请求用主动模式复测**:右键发起 `Access Control` 或 `WAF` |
| 174 | +- **需要精细化研究时用 Manual WAF**:把请求送入工作台,多轮变形与对比 |
| 175 | + |
| 176 | +### 构建 |
| 177 | + |
| 178 | +- Maven 打包: |
| 179 | + - `mvn -DskipTests package` |
| 180 | + - 产物位于 `target/` |
| 181 | + |
| 182 | +### 注意事项 |
| 183 | +- Auto Scan 会对命中条件的 Proxy 响应自动发起一批变体请求,目标站点存在 WAF/频率限制时建议关闭 Auto Scan,仅使用手动扫描。 |
| 184 | + |
| 185 | +### 案例 |
46 | 186 | 之前很多案例没有记录。这次bypasspro又发现了一个 |
47 | 187 |
|
48 | 188 | 最近的JumpServer未授权访问漏洞(CVE-2023-42442):未经身份验证的远程攻击者利用该漏洞可以访问录像文件,远程获取到敏感信息。 |
|
0 commit comments