大風起兮雲飛揚!安得猛士兮走四方!麻匪,任何時候都要剿,不剿不行,你們想想,你帶著老婆,出了城,吃著火鍋還唱著歌,突然就被麻匪劫了!- 讓子彈飛 (2010)
第三天終於要開始進行第一個漏洞環境的建立,這次我們就針對2021年底被稱為「過去十年來最大、最關鍵的漏洞」的 Log4Shell 環境進行建立,那在每個漏洞建立之前,我都會先統整這個漏洞的相關資訊讓大家先初步認識這個漏洞。
漏洞相關資訊
紀錄 Log 是一般程式設計常見的動作,主要的目的有時候為了偵錯,或是為了呈現系統、服務資訊。以往開始學習寫程式的時候,多半會透過 printf(C語言)、System.out.println(Java)、print(Python)去進行資訊紀錄,但這樣陽春的紀錄方式在某些情況下未必能夠適用。
本著設計程式不要重複製造輪子的概念,通常都會使用該程式語言提供的第三方函式庫來進行記錄Log,也因此Apache Log4j也因應而生。Log4j 本身可以透過設定檔案彈性的切換Log儲存的裝置位置、儲存格式等等,所以是一個Java很常被使用的第三方函式庫。這也就是為什麼當Log4j套件發生問題的時候,會影響到數以億計的系統與設備。
但是想想如果只是單純紀錄Log資訊,就好像看到一段文字,然後就把文字抄到一本筆記本上面,那這樣怎麼會觸發所謂的RCE呢?邏輯上來說,肯定是看到了甚麼特殊的格式導致紀錄Log的程式發生了化學反應,進而去執行其他命令。也因此針對這個弱點,關注的點在於觸發弱點的payload是甚麼,以及後續執行的流程為何。這邊參考了國外部落格文章的流程圖。
參考來源 : Digging deeper into Log4Shell - 0Day RCE exploit found in Log4j
從流程圖大概可以觀察出一開攻擊者送出具有jndi的樣式的字串,裡面待有ldap的位址字串,接著有弱點的伺服器就被觸發請求透過ldap協定連向惡意伺服器索取資料,之後該伺服器回傳Java物件定義位址後,該伺服器再次發出請求去下載惡意的物件資料,並觸發後續的RCE效果。
大致了解漏洞流程後,就可以參考網路上現有的資料進行環境架設,這邊則是參考了github專案log4shell-vulnerable-app以及LDAP/HTTP伺服器JNDI-Injection-Exploit,本次建立的環境架構圖如下所示。
建立環境的流程參考如下 :
參考資料