首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
安全
›
网络安全
›
Log4j2 CVE-2021-44288 代码审计(底层调用链分析) ...
返回列表
发新帖
Log4j2 CVE-2021-44288 代码审计(底层调用链分析)
[复制链接]
发表于 2023-3-20 23:42:04
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
1、搭建本地环境
2、编写Demo
3、开启debug跟踪方法
3.1 跟进 error 方法
3.2 跟进 logIfEnabled 方法
3.3 跟进 logMessage 方法
3.4 跟进 logMessageSafely 方法
3.5 跟进 logMessageTrackRecursion 方法
3.6 跟进 tryLogMessage 方法
3.7 跟进 log 方法
3.8 跟进 log 方法
3.9 跟进 log 方法
3.9 跟进 processLogEvent 方法
3.10 跟进 callAppenders 方法
3.11 跟进
3.12 跟进 callAppenderPreventRecursion 方法
3.13 跟进 callAppender0 方法
3.14 跟进 tryCallAppender 方法
3.15 跟进 append 方法
3.16 跟进 tryAppend 方法
3.17 跟进 directEncodeEvent 方法
3.18 跟进 encode 方法
3.19 跟进 toText 方法
3.20 跟进 toSerializable 序列化 方法
3.21 跟进 format 方法
3.22 跟进 format 方法
3.23 跟进 replace 方法(进入 if 判断前,做了格式判断,需要满足 "${" 开头才进入 )
3.24 跟进 substitute 方法
3.25 跟进 resolveVariable 方法
3.26 跟进 lookup 方法
3.27 跟进 lookup 方法
(将传入的参数 jndi 和 rmi://192.168.3.175:8085/goqzKRmu 分离出来赋值给 name 和 prefix )
(StrLookupMap 中储存的 String,object 键值对,取出 JndiLookup 对象,并调用 jndiLookup 的 look 方法)
3.28 跟进 lookup 方法
3.29 跟进 lookup 方法
3.30 先跟进 getURLOrDefaultInitCtx 方法(重要调用)
3.30.1 跟进 getURLContext 方法
(此处将 rmi 协议抽取出来)
3.30.2 跟进 getURLObject 方法
3.30.3 跟进 getObjectInstance 方法
(先根据 scheme 属性的 rmi 参数 获取 rmiURLContextFactory 类,然后调用 rmiURLContextFactory 的 getObjectInstance 方法 )
3.30.4 getObjectInstance 返回值为 rmiURLcontext 对象
3.31 依次返回到 lookup 方法,因返回值为 rmiURLContext 对象,调用该对象的 lookup 方法
3.32 先跟进 getRootURLContext 方法
3.32.1 getRootURLContext 方法 返回一个 解析结果 ResolveResult 对象
3.33 getResolvedObj 方法返回解析对象,强转接口类,再调用 RegistryContext 类的 lookup 方法,继续跟进
3.34 继续跟进 decodeObject 方法(var2 这里应该是发起了连接,工具收到 RMI 请求)
执行 this.registry.lookup(var1.get(0)) 语句时收到 RMI 请求
3.35 关键方法 getObjectInstance 获取对象的实例,跟进该方法
( NamingManager 类是 java 原生类,只与 JDK
版本
有关,当前 JDK
版本
8u112)
3.36 继续跟进 get Object Factory From Reference 方法(该方法 从引用获取对象工厂)
3.37 第一个 try catch 应该是本地加载,如果有内容则不进入if判断(未加载到 class,clas 属性还是等于 null)
执行到 clas = helper.loadClass(factoryName, codebase) 加载远程类成功,工具收到请求
计算器 弹出成功(工具写的恶意类 应该是放在 static
代码
块中,类加载的时候就会执行 static
代码
块,无需使用new创建对象)
(clas.newInstance() 此方法会通过构造方法创建对象)
(恶意
代码
可以写在 static 代码块中,也可以写在 构造方法 中)
4、log4j2 底层调用链
总结:会根据传入的值去解析成对应的对象
比如 java:os ,对应的是系统属性
回复
使用道具
举报
返回列表
浏览过的版块
开源技术
Java
DevOps与敏捷开发
Oracle
物联网
.Net
图数据库
SQL-Server
公有云
分布式数据库
冬雨财经
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表