jndi注入笔记

笔记

首先要理解jndi与rmi和ldap的关系,通俗的说,jndi相当于是一个接口,rmi和ldap是访问这个接口的协议。
RMI(远程方法调用)通俗的说就像将一个class放在A机器上,然后在B机器中调用这个class的方法
在审计jndi注入时重点关注.lookup,如

1
context.lookup(servername)

如果servername可控则会存在jndi注入

1
2
3
如果通过env设置上下文的环境变量为rmi://127.0.0.1:1099/,后面lookup则不需要ULR定位,可以直接为已绑定的Name。

lookup支持动态协议转换,即便已经设置了上下文,也可以重新指定URL,比如使用ldap协议

项目实例


如笔记所说,context.lookup几个参数,我们查看这几个参数是否可控
在头部引用的MessageQueueDto类中

做了实体定义

从调用该实体的WorkConfigQuery类中的queryMessageQueue方法得知各参数对应的标签

因为URL等标签值可控,导致漏洞产生,接下来就找到调用该方法的servlet就可以进行漏洞利用

参考:
Java反序列化-RMI&JNDI初探
Jndi注入及Spring RCE漏洞分析


声明:
本文章用于学习交流,严禁用于非法操作,出现后果一切自行承担,阅读此文章表示你已同意本声明。

Disclaimer:
This article is for study and communication. It is strictly forbidden to use it for illegal operations. All consequences shall be borne by yourself. Reading this article means that you have agreed to this statement.