纸上得来终觉浅,绝知此事要躬行。
ezezez_php
题目
1 |
|
通过get函数来访问本地的rides去写weebshell然后rce,function应该是辅助完成反序列化,但是看不到源码。
题解
2023年春秋杯网络安全联赛冬季赛 Writeup-CSDN博客
2024春秋杯冬季赛ezezez_php复现_哔哩哔哩_bilibili
别人写好的链子,当时不会写,就来分析一下吧。
1 |
|
在代码行 $Ha -> start = ['POC'=>'0.o'];
中,正在设置对象 $Ha
的一个名为 $start
的属性。分配给 $start
的值是一个带有单个键值对的关联数组。
分解一下:
$Ha
:这是先前使用$Ha = new Ha();
创建的Ha
类的实例。->
:箭头运算符用于在 PHP 中访问对象的属性和方法。start
:这是$Ha
对象的一个属性。['POC'=>'0.o']
:这是一个带有键值对的关联数组。键是'POC'
,相应的值是'0.o'
。
因此,这一行本质上是将 $Ha->start
属性设置为一个带有键 'POC'
和值 '0.o'
的关联数组。这个属性及其值的目的由 Ha
类的代码中的 __destruct
方法确定。在 __destruct
方法中,它检查 $start2
属性的值是否等于 "o.0"
。如果这个条件为真,它会在由 $start1
属性引用的对象上调用 Love
方法,并将 $start
属性的值作为参数传递。__call()
在对象上下文中调用不可访问的方法时触发。没有定义Love这个方法故可以由此触发rd::__call
方法。__set
方法是在给对象的不可访问属性赋值时触发的魔术方法。
通过给对象的 Flag
属性赋值,var1是一个不存在的变量来触发 Er::__set
方法。这是因为在类中并没有直接定义 Flag
属性,所以当试图给不存在的属性赋值时,__set
方法会被调用。进而给Er::$vauel
触发get
方法实现SSRF
后面就是打redis,
看视频学习到了直接用php脚本来发请求接受响应。
1 |
|
总结
通过对于这道题目的复现,对于php反序列化有了更深层的理解——先看魔术方法,再通过不同魔术方法的触发条件来构造pop链子
ssrf利用主从复制打redis(之前只是看书,没有实践过)