论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
安全
›
网络安全
›
Log4j2 CVE-2021-44288 代码审计(底层调用链分析) ...
Log4j2 CVE-2021-44288 代码审计(底层调用链分析)
冬雨财经
金牌会员
|
2023-3-20 23:42:04
|
显示全部楼层
|
阅读模式
楼主
主题
637
|
帖子
637
|
积分
1911
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 ,对应的是系统属性
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
冬雨财经
金牌会员
这个人很懒什么都没写!
楼主热帖
Elasticsearch学习系列五(零停机索引 ...
ts保姆级教程,别再说你不会ts了 ...
Linux安装PHP8 新版笔记
信息与网络安全期末复习(完整版) ...
Pod概述
如何通过JDBC访问MySQL数据库?手把手 ...
《ABP Framework 极速开发》教程首发 ...
visual studio智能提示出现慢的问题解 ...
SignalR 2 与mvc 5实现实时聊天功能 ...
有趣的特性:CHECK约束
标签云
挺好的
服务器
快速回复
返回顶部
返回列表