PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

04-26 1025阅读

[题目信息]:

题目名称题目难度
PHP反序列化命令执行1

[题目考点]:

反序列化命令执行,获取题目flag。

[Flag格式]:

SangFor{t5euvZ_OB8Jd_h2-}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

docker-compose up -d

[题目writeup]:

name赋值为system,$male赋值为whoami,即调用system(whoami)

 
 

5、序列化结果:

PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

6、最终结果:

PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础







[题目信息]:

题目名称题目难度
PHP反序列化POP大链2

[题目考点]:

通过多个类中不同的魔术方法,构造反序列化POP链,获取题目flag。

[Flag格式]:

SangFor{qMWi3Uhs1r2uX6FB}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

docker-compose up -d

[题目writeup]:

实验主页

PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

代码分析

1、首先通读代码,代码中存在6个类,每一个类中定义了两个变量,同时每个类中定义了不同的魔术方法。

__desctruct()
类执行完毕以后调用,其最主要的作用是拿来做垃圾回收机制。
__toString()
在对象当做字符串的时候会被调用
___call() 
当所调用的成员方法不存在(或者没有权限)该类时调用,用于对错误后做一些操作或者提示信息
__invoke()
直接调用对象名当方法使用时,就调用的是__invoke()方法

2、我们的目标是获取flag,函数getFlag()在类getFlag类中,而__destruct()魔术方法可以作为POP链的触发点

3、通过构造POP链,把__destruct()函数作为触发点,getFlag()函数作为终止点,最终获取flag

 
 

5、输出序列化内容为:

PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

6、最终结果:

PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

既然可以读取passwd文件,那么尝试读一下flag.php文件吧!







[题目信息]:

题目名称题目难度
PHP反序列化基础-21

[题目考点]:

PHP反序列化基础2

[Flag格式]:

SangFor{8wTFrFxSKMzXM3ng}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

docker-compose up -d

[题目writeup]:

实验主页

PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

代码分析

1、首先定义类Ser

2、第二行定义公有变量 $name

3、存在魔术方法wakeup

当实例化的类反序列化时会自动触发__wakeup()魔术方法

4、在__wakeup函数中存在file_get_contents()函数,并且参数为$name,可控(注意成员变量$name为私有类型)

成员变量大致可以分为三类:

  • public 共有类型
  • private 私有类型
  • protected 被保护类型

    当成员变量为私有类型时,当$name被反序列化时,前后为%00。

    PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

    如果不做处理,在cmd命令行中显示类似于空格,复制到url地址栏时会被转化为%20,也就是空格的url编码,所以需要将输出的结果进行url。

    PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

    PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

    5、最后存在unserialize()函数,并且参数可控

    利用方法

    1、实例化类Ser

    2、使用php://filter伪协议,$name赋值所需读取文件名称

    3、将实例化类Ser序列化并输出

    4、将输出结果通过GET方式输入

     
    

    PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

    将base64进行解码。









    [题目信息]:

    题目名称题目难度
    PHP反序列化基础1

    [题目考点]:

    1. PHP反序列化基础
    

    [Flag格式]:

    SangFor{k26Bj-V9ENIY7tBy}
    

    [环境部署]:

    docker-compose.yml文件或者docker tar原始文件。

    docker-compose up -d
    

    [题目writeup]:

    实验主页

    PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

    代码分析

    1、首先定义类Ser

    2、第二行定义公有变量 $name

    3、存在魔术方法 __toString

    当实例化的类被当作字符串处理时会自动触发__toString魔术方法
    

    4、在__toString函数中存在file_get_contents()函数,并且参数为$name,可控

    5、最后存在unserialize()函数,并且参数可控

    利用方法

    1、实例化类Ser

    2、使用php://filter伪协议,$name赋值所需读取文件名称

    3、将实例化类Ser序列化并输出

    4、将输出结果通过GET方式输入

     
    

    PHP反序列化命令执行+PHP反序列化POP大链 +PHP反序列化基础

    将base64进行解码。

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]