固然不排除国外英文文章有很好的解释,但是我更盼望有中文版本。JNDI 注入简单明白
定眼一看RMI、LDAP、DNS,肾上腺素拉满,这仨都可以共同JNDI注入举行(lookup)漏洞利用攻击。 所以这也就是为啥有很多攻击方式为:JNDI+RMI、JNDI+LDAP、JNDI+DNS,最具杀伤力的自然是rmi和ldap协议,能够长途绑定对象执行代码。(这里别蒙圈,知道这俩协议共同JNDI能够长途执行代码即可)透过Weblogic漏洞深入明白
通常测试是否存在JNDI注入漏洞的话可以先用DNS探测一下是否有回显,有的话才好举行下一步的攻击。
另有一个公共对象请求代理体系结构(CORBA)
JNDI+RMI
- RMI
在RMI服务中引用长途对象将受本地Java环境限制,本地的java.rmi.server.useCodebaseOnly配置假如为true(禁止引用长途对象),为false则答应加载长途类文件。
除此之外被引用的ObjectFactory对象还将受到com.sun.jndi.rmi.object.trustURLCodebase配置限制,假如该值为false(不信任长途引用对象),一样无法调用长途的引用对象。
- JDK5u45、JDK6u45、JDK7u21、JDK8u121开始,java.rmi.server.useCodebaseOnly默认值改为了true。
- JDK6u132、JDK7u122、JDK8u113开始com.sun.jndi.rmi.object.trustURLCodebase默认值改为了 false。
本地测试长途对象引用可以使用如下方式答应加载长途的引用对象
System.setProperty("java.rmi.server.useCodebaseOnly", "false");
System.setProperty("com.sun.jndi.rmi.object.trustURLCodebase", "true");
- LDAP
LDAP也在JDK6u211、7u201、8u191、11.0.1后将com.sun.jndi.ldap.object.trustURLCodebase的默认设置为了false。(但不受java.rmi.server.useCodebaseOnly影响)
利用步骤大抵分为三步:通过lookup查询该恶意对象:这句话意思是你绑定服务器端后能够在poc中自己决定是否拿着这个类去lookup触发,这也就是为啥我选weblogic这个漏洞来解释的原因,他的poc就是你自己来决定绑定后是否举行lookup攻击的,很直接了当告诉你就是lookup触发的,别不信,你自己决定是否lookup攻击。
- 创建一个恶意ForeignOpaqueReference对象,并将remoteJNDIName设置为长途恶意JNDI服务。
- 通过T3 \ IIOP协议在WLS上绑定该恶意对象。
- 通过lookup查询该恶意对象,触发ForeignOpaqueReference.getReferent的调用,从而造成恶意JNDI注入。
身为散修就这么生硬的解释,道友莫怪。
感谢看到这里的道友~
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |