Fastjson回显
内容提要
本文介绍了Fastjson反序列化漏洞的两种回显利用方法:一是通过LDAP服务加载恶意类实现命令执行;二是基于Tomcat DBCP的BCEL编码回显,适用于特定版本。文中提供了详细攻击代码和Payload示例,并指出需修改Content-Type为application/json。
延伸解读
两种回显方式的适用场景
文章介绍了两种Fastjson反序列化回显方法:LDAP加载恶意类适用于较新版本,但需要搭建外部服务;基于Tomcat DBCP的BCEL编码回显则适用于特定版本和中间件环境。选择时需根据目标环境判断,若目标使用Tomcat且版本符合,可优先考虑DBCP方案,否则可尝试LDAP方式。
版本与依赖限制
DBCP回显方案明确要求fastjson版本在1.2.33至1.2.47之间(或1.2.24及以下),且JDK版本需低于8u251,同时目标环境必须存在tomcat-dbcp依赖。这些条件缺一不可,实际利用前需先确认目标版本和依赖情况,否则可能无法成功。
利用细节与注意事项
两种利用方式都需将Content-Type修改为application/json,否则请求可能不被解析。LDAP方式需先启动LDAP和HTTP服务,并编译恶意类;DBCP方式则需将恶意类编译后通过BCEL编码嵌入Payload。此外,命令执行结果通过响应体回显,需确保请求头中携带cmd参数。
Q&A
Fastjson反序列化漏洞有哪些回显利用方式?
主要有两种:一是通过LDAP服务加载恶意类实现命令执行并回显;二是基于Tomcat DBCP的BCEL编码回显,适用于特定版本。
如何利用LDAP服务进行Fastjson回显?
先启动LDAP服务(如使用marshalsec),再启动HTTP服务存放恶意类,编译恶意类后发送包含JdbcRowSetImpl的payload,指定dataSourceName为LDAP地址,即可触发命令执行并回显。
基于Tomcat DBCP的BCEL编码回显适用于哪些Fastjson版本?
适用于fastjson <= 1.2.24 以及 1.2.33 <= fastjson <= 1.2.47,且JDK版本需小于等于8u251,并存在tomcat-dbcp依赖。
使用DBCP回显时,如何构造payload?
需要将恶意类(如AllEcho)编译后使用BCEL编码,然后构造包含BasicDataSource和BCEL ClassLoader的JSON payload,并设置driverClassName为BCEL编码字符串。注意修改Content-Type为application/json。
Fastjson回显时为什么需要修改Content-Type为application/json?
因为Fastjson默认只处理application/json类型的请求,如果不修改,服务器可能不会解析JSON数据,导致payload无法生效。
AllEcho.java在Fastjson回显中有什么作用?
AllEcho是一个通用的回显类,通过反射遍历线程对象,寻找HttpServletRequest和HttpServletResponse,然后执行命令并将结果写入响应,实现回显。它对多种中间件兼容性较好。