ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Burp Suite FakeIP插件:解决Host头伪造与SNI兼容问题

Burp Suite FakeIP插件:解决Host头伪造与SNI兼容问题 简介本资源是面向网络安全工程师与渗透测试初学者的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.comBurp 把请求发给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.22HTTP 请求构造阶段在请求进入发送队列前将Host头值从域名强制替换为IP:Port如Host: 172.16.5.22:443TLS 层兼容阶段关键点来了——它不修改 SNI 字段。SNIServer Name Indication仍使用原始域名确保 TLS 握手时证书能正确匹配避免SSLHandshakeException。这是区别于手动改 Host 的致命优势纯文本改 Host 会导致 HTTPS 请求直接失败而 FakeIP 在应用层改 Host、网络层保 SNI两全其美。提示该插件基于 Burp Extender API v2.x 开发兼容 Burp Suite Professional v2.4 和 Community Edition v2.4Community 版需确认是否启用 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指向不同 CNAMEIP 经常变无 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.6cd burpFakeIP-master # 下载 Burp Suite Professional SDK关键 wget https://portswigger.net/burp/releases/download?productprofessionalversion2024.7 -O burpsuite-pro-2024.7.jar # 将 SDK 安装到本地 Maven 仓库路径需与 pom.xml 中 version 一致 mvn install:install-file \ -Dfileburpsuite-pro-2024.7.jar \ -DgroupIdburp \ -DartifactIdburpsuite-pro \ -Dversion2024.7 \ -Dpackagingjar # 编译插件 mvn clean package -Dmaven.test.skiptrue编译成功后target/burp-fakeip-1.0.0.jar即为可用插件。3.3 Burp 中加载插件Extender 面板操作与日志验证打开 Burp Suite →Extender→Extensions→AddExtension Type 选择JavaSelect file 选择target/burp-fakeip-1.0.0.jar点击Next等待加载完成控制台输出Loaded extension: FakeIP关键验证步骤打开Extender → Output标签页发起一次 HTTPS 请求如访问https://dev.internal.company.com观察日志是否出现[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若有此日志说明插件已生效若无检查 Burp 版本是否 ≥2.4或 Java 环境是否为 JDK 11JDK 17 亦可但需确认 pom.xml 中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:8080enable_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/404Intruder设置 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 地址的 SANSubject Alternative Name。虽然 FakeIP 默认开启 SNI 保留但若 Burp 版本过低v2.4或 JDK 不兼容SNI 传递会失效。解决升级 Burp Suite 至 v2.4使用 JDK 11 或 JDK 17JDK 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匹配 IPserver { 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-26134Confluence 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 hostBurp 自动发起目录爆破因 Host 头已修正所有请求均返回真实状态码结合Scanner → Issues查看Path Traversal、XSS等高危漏洞这些在 Host 错误时根本不会触发扫描引擎。6.3 Repeater 中的动态调试实时验证 Host 替换效果在 Repeater 中右键任意请求 →Send to Repeater然后修改 URL 路径为/rest/api/content?os_authTypebasic观察下方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——它不是锦上添花的插件而是你打开内网大门时钥匙串上最基础的那一把。希望帮到你。本文还有配套的精品资源点击获取
返回列表