技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
Log4j WAF Bypass 技巧详细分析+总结
1341025112991831
WEB安全
365浏览 · 2025-03-21 10:12
返回文档
Log4j WAF Bypass 技巧详细分析+总结
前言
log4j 这个漏洞虽然是之前的了,但是对于一些 waf 的绕过还是非常值得去探索和分析的,这个漏洞可以说是核弹级别的漏洞了,如果没有完善的 waf 或者防护,还是有一些手法可以尝试去 bypass 的
环境搭建
只需要加入依赖
PHP
复制代码
然后可以加载远程 class 的 jdk 都可以
PHP
复制代码
log4j 漏洞简单分析
首先看到我们的调用栈
漏洞就两个关键点
MessagePatternConverter
这个类是转换器
可以看到对我们输入的数据处理部分会有很多的转换器
然后就开始调用我们的转换器处理我们的输入
这个转换器会识别我们的一些特殊的标识符,比如 jndi,{}
如何提取的逻辑具体在 substitute 方法
然后去除我们的特殊标识符后就调用对应的处理方法
resolveVariable
在这里已经初见端倪了,已经有 lookup 了
处理标签的部分有如下
这里我使用的 env,当然还有 jndi 的,就是直接去加载远程类了
JndiLookup
这个就是我们 jndi 的实现类
可以看到它的 lookup 就是我们常规的加载远程类的那个 lookup 的逻辑了,如果跟踪下去的话
参数如下
log4j 防护绕过
防护方法
当然 log4j 有自己的修复方法,那就是给了选择项是否解析我们的特殊的符号,但是如果功能确实需要,那就是对我们的输入进行 waf 了
当然是 waf 掉我们的关键字符 jndi,ladp 等这些字符
比如随便写了一个 waf 的例子
如果 waf 的逻辑是这样我们应该如何绕过呢?
我们使用普通的 payload
会被 waf 拦截
环境变量绕过
就是我们一开始使用的 payload
参考
https://logging.apache.org/log4j/2.12.x/manual/configuration.html
在 Log4j 中,日志格式支持变量替换(Lookup),其中环境变量(Environment Lookup) 允许动态获取系统环境变量,语法如下:
如果环境变量不存在,还可以提供默认值:
而我们利用的就是这个默认值返回我们想要的字符
我们测试一下
我们看看返回默认值,这样的话我们就能够构造我们任意需要的 payload
成功
我们就可以这样绕过
对应的实现类为
lookup:36, EnvironmentLookup (org.apache.logging.log4j.core.lookup)
大小写标签绕过
lower
运行弹出计算器
转到对应的实现非常简单
就是直接小写
upper
但是这里大写是不能成功的,猜测可能不能识别 Jndi 这种标签或者 JNDI,当然我们可以尝试一下
是有 DNS记录的,我们更换payload
发现已经没有了,尝试全大写
发现全大写是可以的,但是如果大小写混着就不可以
但是发现这样又不行
估计是没有识别到 LDAP 协议
验证了之后确实是这样的
可以看到是匹配到了 jndi 的
最后抛出了异常
识别不了协议,只好放弃
之后发现了项目中的 payload
这样就能够绕过,很奇怪
项目的原理是大写的 Unicode 字符无效
尝试把这个转换出来发现就是大写的 I,那其实应该就是大写的 I 还是能够匹配的
事实确实如此
现在尝试各个部分大写
但是在 ldap 那里是没有办法的,所以只能这样了
前置符绕过
在匹配的时候因为匹配不到 aasdaa 这种标签就会忽略返回 j,以此类推
具体逻辑是在 substitute:1033, StrSubstitutor (org.apache.logging.log4j.core.lookup)
当然同样的还有:-
这个直接弹了一堆计算器,估计还解析了多次
System properties
这个和我们的 env 非常的类似
首先识别出我们的 sys
然后调用对应的 lookup开始处理
然后构造出完整 payload 后开始 jndi 注入
date 标签
只不过这个 payload 类型需要比较特殊一点
和处理有关系
处理 data
调用对应的 lookup
然后返回我们获得的值
最后就都是一样的了
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
发布投稿
热门文章
1
契约锁电子签章系统 pdfverifier 远程代码执行漏洞分析(补丁包逆向分析)
2
COFF文件解析 | CoffLdr
3
Java内存马篇——WebSocket内存马及GodZilla二开
4
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
5
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
近期热点
一周
月份
季度
1
契约锁电子签章系统 pdfverifier 远程代码执行漏洞分析(补丁包逆向分析)
2
COFF文件解析 | CoffLdr
3
Java内存马篇——WebSocket内存马及GodZilla二开
4
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
5
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:41700
2
一天
贡献值:24800
3
Yale
贡献值:24000
4
1674701160110592
贡献值:21800
5
1174735059082055
贡献值:16000
6
手术刀
贡献值:14000
7
Loora1N
贡献值:13000
8
bkbqwq
贡献值:12800
9
lufei
贡献值:11000
10
xsran
贡献值:10600
目录
Log4j WAF Bypass 技巧详细分析+总结
前言
环境搭建
log4j 漏洞简单分析
MessagePatternConverter
JndiLookup
log4j 防护绕过
防护方法
环境变量绕过
大小写标签绕过
lower
upper
前置符绕过
System properties
date 标签
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板