首页 > 解决方案 > 是否可以通过仅使用内置类来利用 PHP 的反序列化?

问题描述

我正在使用 PHP 7.3。是否可以仅使用PHP 内置类来利用 PHP 反序列化

似乎内置类本身已经magic functions实现了一些(很可能用于序列化/反序列化)。可以使用以下代码进行验证:

<?php

$classes = get_declared_classes();
sort($classes);

// __autoload is deprecated
$magic_methods = ["__construct", "__destruct", "__call",
  "__callStatic", "__get", "__set", "__isset", "__unset",
  "__sleep", "__wakeup", "__toString", "__invoke",
  "__set_state", "__clone", "__debugInfo"
];

$classes_test_magic = [];
$classes_test_magic["className"] = $magic_methods;

foreach ($classes as $className) {
    foreach ($magic_methods as $magicMethod) {
        if (method_exists($className, $magicMethod)) {
            $classes_test_magic[$className][] = 1;
        } else {
            $classes_test_magic[$className][] = 0;
        }
    }
}

header("Content-Type: text/csv");
header("Content-Disposition: attachment;filename=builtinClassesMagicMethods.csv");
$fp = fopen("php://output", "w");
foreach ($classes_test_magic as $className => $methodsStatus) {
    fputcsv($fp, array_merge([$className], $methodsStatus));
}
fclose($fp);

PHP 内置类中可用的魔术方法概述

标签: phpclassserializationbuilt-inexploit

解决方案


推荐阅读