-
前言
记前奏,复现分析了史诗级漏洞Log4j Rce漏洞,并且搞明白了调用链,发现后面是利用的JNDI注入漏洞,问了其他师傅,其他好多漏洞都是因为这个漏洞。为了总结完美一点,一定要补上本文,熟悉完所有的调用链,感觉又自信了!!
-
漏洞分析
建议食用完上篇的漏洞分析后再阅读,一步步跟踪后发现lookup可以调用的类还是比较多的,接下去应该是接受到解析内容后该怎么进行的,翻阅资料后后面指的是jndi注入的过程,会把解析到的内容丢进去ldapURLContext中。
随后对lookup再进行跟踪
getRootURLContext,获取RMI注册中心相关数据;getResolvedObj获取注册中心对象;接着跟随lookup
跟随后,又到了多选题的时候了,发现是会去执行RegistryContext这个类
此时的这个var 1 指的就是我们后接的路径 a,跟进decodeObject,这边肯定是不为空的,跟进就好了,这儿registry.lookup是为了获取客户端ip地址
进入到decodeObject中,发现第二个语句,有个trustURLCodebase,这儿就很关键了,jdk到某个版本之上,这个为true,否则为false,JDK 6u141、7u131、8u121之后默认为false,然后就进入执行getObjectInstance
然后会去ObjectFactory实例化一个对象工厂,ObjectFactoryBuilder 实例化一个对象工厂生成器
再往下走,实例化Reference
className:表示远程加载时所使用的类名
classFactory:加载class中需要实例类的方法
classFactoryLocation:指定远程加载类的地址
此时,类名、地址都包含在ref中,类的方法在f中
进入到getObjectFactoryFromReference中后会去通过codebase获取ip地址,loadClass执行这个类
至此,大致的JNDI注入完成了
-
微信群介绍
本公众号只用来记录一些自己在安全道路上所学所想所看,更多的是技术的互相交流,工具及部分不方便内容均放在知识星球中,知识星球加入渠道,加入微信群后发送"知识星球",互相吹水,互相学习,互相进步!!
-
总结
趁热打铁,取决于jndi中的trustURLCodebase是否为true,默认为true的版本就遭了,但是问题也不大,升级就可以解决这个问题,据说好多漏洞都有jndi的限制,与学习Java开发的师傅了解后,这是利用了Java的反射机制造成的,上度娘上搜索后,发现Java反射机制就是可通过类的名进行动态加载实例化,在运行过程中,都可以调用它的任意一个方法和属性~ 希望师傅们,互相学习,不足之处还多多指点!!
原文始发于微信公众号(Undoubted Security):导致Log4j Rce的JNDI注入
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论