0x001 背景
JavaMelody是一款运行在Java Web容器中,用来监控Java内存和服务器CPU使用情况的工具,可以通过图表给出监控数据,方便研发运维等找出响应瓶颈、优化响应等。
该组件低版本存在一个XXE漏洞——CVE-2018-15531,由于该组件的启动特性,攻击者无需特定的权限即可发起攻击。
0x002 实验环境
首先需要安装JavaMelody组件,
Github地址:https://github.com/javamelody/javamelody/releases
这里我们选择使用的JavaMelody 1.73.1版本进行漏洞复现。
移动javamelody-cre-1.73.1.ar文件到 WebContent-META-INF-lib目录下
0x003 调试分析
单击index.html文件,右键->运行方式->Run on Server
访问本地端口,可以看到页面说明开启成功,然后停止运行。
寻找下断位置, 首先看看官方补丁。
漏洞修复的commit地址如下:
https://github.com/javamelody/javamelody/commit/ef111822562d0b9365bd3e671a75b65bd0613353#diff-c059097bc33b06c0b5da2d9b7787e806
增加了两行代码,作用分别是禁用DTD和禁用外部实体,如图所示:
在未修复补丁处双击下断点。
debug模式运行。
使用burpsuite构建payload触发漏洞进行调试分析。
右键打开调用层次结构。
我们可以看到调用链。
MonitoringFilter拦截器 –> doFilter() -> createRequestWrapper() -> PayloadNameRequestWrapper -> initialize() -> parseSoapMethodName()
通过堆栈回溯分析,可以看到触发需求。
contentType类型符合:application/soap+xml 或者 text.xml
就调用xml解析函数,触发xxe攻击。
nc -lvp 80 监控本地80端口数据包。
据此,编写自动验证poc。
0x004 修复方案
禁用DTD和外部实体引用。
参考官方补丁:
0x005 参考文档
https://anquan.baidu.com/article/421 JavaMelody XXE漏洞(CVE-2018-15531)分析