Fastjson回显

💡 原文中文,约18200字,阅读约需44分钟。
📝

内容提要

本文介绍了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,然后执行命令并将结果写入响应,实现回显。它对多种中间件兼容性较好。

🏷️

标签

➡️

继续阅读