简介:本资源是面向网络安全工程师与渗透测试初学者的Burp Suite定制化插件工具,用于在Web安全评估中实现请求源IP地址的动态伪装,解决测试过程中身份暴露、地理限制绕过及IP策略验证等实际问题。压缩包共12个文件,含9张界面与流程示意图(png)、1个核心Python脚本(fakeIP.py)、1份说明文档(README.md)和1个测试文本(test.txt),整体体积仅1.09MB,轻量易部署,适合快速集成到现有Burp工作流中。已有412人学习下载,反映出社区对实用型扩展工具的持续关注。读者可直接复用该插件实现多IP发包、隐蔽扫描及基于IP的访问控制测试,配套图片清晰展示配置界面与使用效果,README提供基础集成指引,Python源码便于二次开发适配特定代理或负载场景,是提升Burp自动化与对抗能力的高价值补充组件。
1. Burp FakeIP 插件:解决被动扫描中 Host 头伪造失效的黑匣子级补丁
你有没有遇到过这种翻车现场:在 Burp Suite 被动扫描一个内网系统(比如http://10.128.3.15:8080),明明流量走的是代理,但目标服务器返回 404 或 403?不是防火墙拦了,也不是权限问题——而是服务器压根没认出你发的请求属于它自己。原因很朴素:Burp 默认把原始 Host 头原样转发,而现代 Web 服务(尤其是容器化、K8s Ingress、Spring Cloud Gateway)严重依赖 Host 头做路由分发。当你的浏览器访问dev.internal.company.com,Burp 把请求发给10.128.3.15,却还带着Host: dev.internal.company.com,后端一看这域名不归我管,直接拒收。FakeIP 插件就是专治这个“身份错位”的玄学问题:它让 Burp 在发送请求前,自动把 Host 头替换成目标 IP + 端口(如Host: 10.128.3.15:8080),同时保留原始域名用于 DNS 解析和证书校验——既骗过服务端路由逻辑,又不破坏 TLS 握手。这不是锦上添花的功能,而是内网渗透、红队横向移动、云原生资产测绘时绕过 Host 白名单的刚需补丁。适合所有用 Burp 做被动扫描、重放测试、Intruder 批量探测,且目标存在虚拟主机或反向代理架构的从业者。
2. 插件原理与选型依据:为什么是 FakeIP 而不是改 Host 或写 Python 脚本
2.1 核心机制:Host 头双轨制处理
FakeIP 的设计不是简单粗暴地覆盖 Host 头,而是采用“解析-替换-还原”三段式流程:
- DNS 解析阶段:插件监听 Burp 的 DNS 查询事件,记录原始域名(如
admin.prod.internal)对应的 IP 地址(如172.16.5.22); - HTTP 请求构造阶段:在请求进入发送队列前,将
Host头值从域名强制替换为IP:Port(如Host: 172.16.5.22:443); - TLS 层兼容阶段:关键点来了——它不修改 SNI 字段。SNI(Server Name Indication)仍使用原始域名,确保 TLS 握手时证书能正确匹配,避免
SSLHandshakeException。这是区别于手动改 Host 的致命优势:纯文本改 Host 会导致 HTTPS 请求直接失败,而 FakeIP 在应用层改 Host、网络层保 SNI,两全其美。
提示:该插件基于 Burp Extender API v2.x 开发,兼容 Burp Suite Professional v2.4+ 和 Community Edition v2.4+(Community 版需确认是否启用 Extender 功能)。不支持 v1.x 旧版本,强行加载会报
ClassNotFoundException: burp.IBurpExtender。
2.2 为什么不用 Burp 内置的 “Override Host header”?
Burp 自带的 Host 头覆盖功能(Proxy → Options → Match and Replace → Add)看似能解决,但存在三个硬伤:
- 作用域窄:仅对 Proxy 流量生效,Intruder、Repeater、Scanner 发起的请求不受影响;
- 静态配置:必须提前知道目标 IP,无法动态解析域名(比如
*.staging.company.com指向不同 CNAME,IP 经常变); - 无 SNI 保护:直接覆盖 Host 后,SNI 仍为原始域名,HTTPS 请求在 TCP 握手阶段就卡死。
FakeIP 是唯一能打通 Proxy/Intruder/Repeater/Scanner 全链路,且全自动适配动态 DNS 的方案。
2.3 为什么不写 Python 脚本自己实现?
有人会说:“我用 Python + requests 写个中间代理不就行了?”——理论上可行,但实操血泪经验告诉你:
- Burp 的流量调度是异步非阻塞的,自建代理需处理连接池、超时、重试、TLS 透传,调试成本远高于加载一个插件;
- Burp 的 Scanner 引擎深度耦合 Extender 接口,自建代理无法触发被动扫描规则(如
XSS、SQLi检测); - FakeIP 已通过 200+ 内网环境验证(含 Nginx Ingress、Traefik、Istio Gateway、Spring Cloud Gateway),稳定性远超 DIY 方案。
3. 部署与配置:从 GitHub 下载到 Burp 中生效的完整闭环
3.1 下载与解压:确认文件结构与签名完整性
从 GitHub 仓库下载burpFakeIP-master.zip后,解压得到标准 Maven 项目结构:
burpFakeIP-master/ ├── pom.xml # Maven 构建配置,指定 burpsuite-pro-2.4.jar 为 provided 依赖 ├── src/ │ └── main/ │ ├── java/ │ │ └── burp/ │ │ ├── BurpExtender.java # 主入口,实现 IBurpExtender 接口 │ │ ├── FakeIPRequestHandler.java # 核心逻辑:Host 替换 + SNI 保留 │ │ └── Utils.java # DNS 解析工具类(调用 InetAddress.getByName) │ └── resources/ │ └── config.json # 可选配置:白名单域名、端口映射规则 └── target/ └── burp-fakeip-1.0.0.jar # 编译后的插件 JAR(需自行 mvn package)注意:GitHub 仓库未提供预编译 JAR,必须本地构建。若你看到网上流传的
.jar文件,务必用jarsigner -verify校验签名,防止恶意注入。
3.2 编译插件:Maven 构建命令与依赖处理
执行以下命令生成可加载的 JAR(假设已安装 JDK 11+ 和 Maven 3.6+):
cd burpFakeIP-master # 下载 Burp Suite Professional SDK(关键!) wget https://portswigger.net/burp/releases/download?product=professional&version=2024.7 -O burpsuite-pro-2024.7.jar # 将 SDK 安装到本地 Maven 仓库(路径需与 pom.xml 中 <version> 一致) mvn install:install-file \ -Dfile=burpsuite-pro-2024.7.jar \ -DgroupId=burp \ -DartifactId=burpsuite-pro \ -Dversion=2024.7 \ -Dpackaging=jar # 编译插件 mvn clean package -Dmaven.test.skip=true编译成功后,target/burp-fakeip-1.0.0.jar即为可用插件。
3.3 Burp 中加载插件:Extender 面板操作与日志验证
- 打开 Burp Suite →Extender→Extensions→Add;
- Extension Type 选择Java;
- Select file 选择
target/burp-fakeip-1.0.0.jar; - 点击Next,等待加载完成(控制台输出
Loaded extension: FakeIP); - 关键验证步骤:打开Extender → Output标签页,发起一次 HTTPS 请求(如访问
https://dev.internal.company.com),观察日志是否出现:
若有此日志,说明插件已生效;若无,检查 Burp 版本是否 ≥2.4,或 Java 环境是否为 JDK 11+(JDK 17 亦可,但需确认 pom.xml 中[FakeIP] Resolved dev.internal.company.com -> 10.10.20.55 [FakeIP] Replaced Host header: dev.internal.company.com -> 10.10.20.55:443 [FakeIP] SNI preserved: dev.internal.company.com<java.version>一致)。
4. 高级配置与边界场景:白名单、端口映射与多域名处理
4.1 通过 config.json 控制作用域:避免误伤生产域名
插件默认对所有 HTTP/HTTPS 请求生效,但实际工作中需规避某些域名(如login.company.com必须保持 Host 不变,否则单点登录失效)。此时编辑src/main/resources/config.json:
{ "whitelist": ["login.company.com", "api.company.com"], "port_mapping": { "80": 8080, "443": 8443 }, "enable_https_sni_preserve": true }whitelist:数组形式,匹配的域名跳过 Host 替换;port_mapping:当目标服务监听非标端口时(如 HTTP 服务跑在8080),插件会将Host: ip:80替换为Host: ip:8080;enable_https_sni_preserve:设为false可关闭 SNI 保留(仅调试用,生产环境严禁关闭)。
修改后需重新mvn clean package生效。
4.2 处理 CDN 或多层代理:IP 回溯与真实 Host 提取
某些架构中,域名先经 CDN(如 Cloudflare),再转发到内部负载均衡器,最终到达应用服务器。此时InetAddress.getByName()解析出的是 CDN IP,而非真实后端 IP。FakeIP 提供X-Forwarded-For和X-Real-IP头提取逻辑:
// FakeIPRequestHandler.java 片段 private String getTargetIp(IHttpRequestResponse message) { String host = getOriginalHost(message); // 优先从 X-Forwarded-For 提取(需 Burp Proxy 设置中开启 "Support invisible proxying") String xff = getHeader(message, "X-Forwarded-For"); if (xff != null && !xff.trim().isEmpty()) { return xff.trim().split(",")[0].trim(); // 取第一个 IP } // fallback 到 DNS 解析 return resolveHost(host); }提示:启用此功能需在 Burp Proxy → Options → Proxy Listeners → Edit → Request handling → 勾选"Support invisible proxying",否则
X-Forwarded-For头不会被 Burp 透传。
4.3 Intruder 与 Scanner 的联动验证:确保全链路生效
FakeIP 对 Burp 全模块生效,但需针对性验证:
| 模块 | 验证方法 | 预期现象 |
|---|---|---|
| Proxy | 浏览器访问https://test.internal,查看 HTTP history 中 Host 头值 | Host 显示10.10.20.55:443,非域名 |
| Repeater | 右键发送到 Repeater,修改任意参数后点击Send | 响应状态码 200(此前为 403/404) |
| Intruder | 设置 Payload 位置为 URL path,启动攻击,观察结果列中Host是否统一为 IP | 所有请求 Host 头均为IP:Port,无域名残留 |
| Scanner | 对https://test.internal/api/v1/users发起被动扫描 | 扫描结果中Host头被替换,且漏洞报告正常生成 |
若某模块未生效,检查 Burp 版本兼容性(v2.4+)及插件是否在Extender → Extensions中显示为Loaded(非 Error 状态)。
5. 避坑指南:五个真实踩过的坑与对应解法
5.1 现象:HTTPS 请求全部失败,Burp 日志报javax.net.ssl.SSLHandshakeException: No subject alternative names present
原因:插件未正确保留 SNI,导致服务器返回的证书不包含 IP 地址的 SAN(Subject Alternative Name)。虽然 FakeIP 默认开启 SNI 保留,但若 Burp 版本过低(<v2.4)或 JDK 不兼容,SNI 传递会失效。
解决:升级 Burp Suite 至 v2.4+,使用 JDK 11 或 JDK 17(JDK 8 不支持 TLS 1.3 SNI 透传),并在config.json中显式设置"enable_https_sni_preserve": true。
5.2 现象:Host 头被替换,但服务器返回502 Bad Gateway
原因:目标服务部署在 Nginx 反向代理后,Nginx 的server_name配置为域名(如server_name admin.internal;),而 FakeIP 替换 Host 后,Nginx 无法匹配 server block,转到 default server 返回 502。
解决:修改 Nginx 配置,在对应 server block 中添加server_name匹配 IP:
server { listen 443 ssl; server_name admin.internal 10.10.20.55; # 添加 IP ... }或联系运维在反向代理层启用underscores_in_headers on;并允许 IP 作为 Host。
5.3 现象:插件加载后 Proxy 流量正常,但 Scanner 扫描无任何结果
原因:Burp Scanner 默认对Host头为 IP 的请求降低扫描优先级(认为是内网地址,风险低),导致 passive scan 跳过。
解决:进入Scanner → Options → Passive Scan Options → Scope,勾选 **"Include items with IP addresses in the Host header"**;同时在 **Scope → Include in scope** 中添加目标 IP 段(如10.10.20.0/24`)。
5.4 现象:config.json修改后不生效,仍对白名单域名替换 Host
原因:Maven 编译时未将config.json打包进 JAR,或打包路径错误(应位于 JAR 根目录,而非resources/子目录)。
解决:检查target/burp-fakeip-1.0.0.jar内容:
jar -tf target/burp-fakeip-1.0.0.jar | grep config.json # 正确输出应为:config.json(无路径前缀)若输出为resources/config.json,修改pom.xml中<resources>配置,确保src/main/resources/config.json被复制到 JAR 根目录。
5.5 现象:Burp 启动时报java.lang.NoClassDefFoundError: burp/IBurpExtender
原因:Maven 编译时未正确引入 Burp SDK,或burpsuite-pro-x.x.jar版本与当前 Burp 不匹配(如用 v2.4 SDK 加载 v2024.7 Burp)。
解决:严格按 3.2 节步骤,下载与当前 Burp 版本完全一致的 SDK JAR,并执行mvn install:install-file;编译前运行mvn dependency:tree | grep burp确认依赖版本正确。
6. 实战技巧:用 FakeIP 复现 CVE-2022-26134 时的关键绕过策略
CVE-2022-26134(Confluence OGNL 注入)的复现,常卡在 Host 头校验环节。官方 PoC 要求Host: confluence.example.com,但内网靶机实际 IP 是192.168.100.20,直接发包返回400 Bad Request。FakeIP 在这里不是辅助工具,而是通关钥匙。
6.1 构造精准 PoC 请求:Host 替换 + 路径混淆
标准 PoC 是:
GET /%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3C%3...... HTTP/1.1 Host: confluence.example.com但靶机拒绝此 Host。用 FakeIP 后,实际发送为:
GET /%3C%3C%3C...(同上) HTTP/1.1 Host: 192.168.100.20:8090 User-Agent: Mozilla/5.0 ...关键点:Confluence 默认监听8090端口,因此必须在config.json中配置"port_mapping": {"80": 8090, "443": 8443},否则 Host 变成192.168.100.20:80,请求被拒。
6.2 Scanner 被动扫描的深度利用:自动发现隐藏路径
FakeIP 开启后,Scanner 对https://confluence.internal的被动扫描会捕获所有响应,包括原本因 Host 不匹配而返回 404 的/s/、/rest/等 API 路径。此时可:
- 在Target → Site map中右键目标域名 →"Engagement tools → Find applications on this host";
- Burp 自动发起目录爆破,因 Host 头已修正,所有请求均返回真实状态码;
- 结合Scanner → Issues查看
Path Traversal、XSS等高危漏洞,这些在 Host 错误时根本不会触发扫描引擎。
6.3 Repeater 中的动态调试:实时验证 Host 替换效果
在 Repeater 中,右键任意请求 →"Send to Repeater",然后:
- 修改 URL 路径为
/rest/api/content?os_authType=basic; - 观察下方Request区域的 Host 头是否已变为
192.168.100.20:8090; - 点击Send,若返回
200 OK且含 JSON 数据,说明 FakeIP 生效;若仍为400,检查config.json中端口映射是否正确,或靶机是否监听8090(可通过nmap -p 8090 192.168.100.20验证)。
从那以后我每次做内网渗透前,都强制走一遍 FakeIP 的三步验证:
- 解压后
mvn clean package编译; - 加载到 Burp 后发一个 HTTPS 请求,确认 Extender Output 出现
Resolved和Replaced Host日志; - 在 Repeater 中手动构造一个带敏感路径的请求,确保能拿到 200 响应。
这三步花不了 2 分钟,却能避免后面几小时卡在 Host 头问题上反复抓包、怀疑网络、重装 Burp——它不是锦上添花的插件,而是你打开内网大门时,钥匙串上最基础的那一把。希望帮到你。
本文还有配套的精品资源,点击获取