技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
YII 2 反序列化挖掘与分析
1174735059082055
漏洞分析
262浏览 · 2025-03-25 16:56
返回文档
YII 2 反序列化挖掘与分析
环境部署
选择 basic 包,
定位到 config/web.php 中将
cookieValidationKey
的值改为
demo
,然后访问/web/index.php。
在文件
controllers\SiteController.php
中的
actionIndex
方法添加反序列化入口,
反序列化一、
版本限制:<=2.0.39
漏洞分析
反序列化起点在
SebastianBergmann\RecursionContext\Context
类的
__destruct()
方法,这里做了个循环的调用。属性
arrays
可控,如果给
arrays
赋值一个继承了
IteratorAggregate
类的类,在遍历该类时会调用该类的
getIterator()
方法获取迭代器,然后再遍历它。
简单找了一下,发现
PHPUnit\Framework\TestSuite
类中的
getIterator()
方法有点可疑,看到如果属性
$iteratorFilter
赋值为类可以调用任意类的
__call()
魔术方法,所愿发现
$iteratorFilter
确实是可控的,
至于
__call()
魔术方法就可以参考下以前的链子了,来到
Faker\Generator
类的
__call()
,跟进 format()
看到这里存在回调,
$arguments
没法控制,但是
getFormatter()
返回值可以控制,所以这里打算通过回调调用任意类方法,
这里有两个参数回调的方法无参有参都行,有很多可以选择,这里随便选一个。定位到
PHPUnit\Framework\MockObject\MockClass#generate()
,看到直接调用了 eval 方法,并且
$classCode
可控,到此链子就算是通了,
exp 编写
exp 验证
漏洞修复
2.0.39 后的版本中在
Faker\Generator()
中添加了
__wakeup()
方法把
$formatters
属性进行了置空,
这样
getFormatter()
返回值就变得不可控了,
其实这里的 wakeup()可以通过引用来进行绕过,也就是把
$formatters
和另一个类的属性进行绑定,然后后续操作这个类的属性赋值也就会给
$formatters
赋上值,不过需要在
Generator()::__wakeup()
后进行赋值,而反序列化时是先从属性进行反序列化。
给个简单的例子:
poc,最后得到的
$wakeup
就是 false,
然后我又找了一下一些存在赋值的操作的
__wakeup
和
__destruct
,其中发现一个,对
$safeMap
属性进行了赋值,
但是这里
$safeMapShare
是静态属性,不能被序列化和反序列化自然也就没法赋值了,不过还是想验证一下上面的操作是否可以绕过 wakeup 的置空,把静态属性改为正常属性试试
exp
传入 poc,会先调用到 Generator 的 wakeup 魔术方法进行属性置空,
接着来到 Swift_Encoder_QpEncoder 类的 wakeup 魔术方法对
$safeMap
赋值,
由于绑定了
$safeMap
和
$formatters
,赋值后
$formatters
也有值了,
最后也能成功命令执行,
当然实际上我还并没有找到直接可以赋值的
__wakeup
或者
__destruct
方法,再或者在
Generator#__wakeup()
进行的类属性赋值操作。
分序列化二、
版本限制:<=2.0.45
漏洞分析
就是换了个
__call
方法,来到
vendor/fakerphp/faker/src/Faker/ValidGenerator.php
的
__call()
方法,
两个回调函数,最终利用点在第二个,
$this->validator
可控,需要控制
$res
,
可以利用
vendor/fakerphp/faker/src/Faker/DefaultGenerator.php
中的
__call()
方法返回自定义值
参考:
https://xz.aliyun.com/news/8919
exp 编写
exp 验证,
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
目录
YII 2 反序列化挖掘与分析
环境部署
反序列化一、
漏洞分析
exp 编写
漏洞修复
分序列化二、
漏洞分析
exp 编写
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板
没有评论