PHP原生类的利用

PHP原生类的利用

利用背景

当我们发现源码中有可以反序列化的点,但是却找不到POP链的时候,就可以考虑用到php里的原生类可构造POP链,从而实现触发反序列化漏洞。

查找原生类

我们利用原生类,其实就是利用它们自带的一些魔术方法。所以换句话说,具有对我们有用的魔术方法的原生类,才是我们需要的原生类。

所以可以通过下面的代码先查看一下有哪些原生类是对我们有用的:

<?php
$classes = get_declared_classes();
foreach ($classes as $class) {
    $methods = get_class_methods($class);
    foreach ($methods as $method) {
        if (in_array($method, array(
            '__destruct',
            '__toString',
            '__wakeup',
            '__call',
            '__callStatic',
            '__get',
            '__set',
            '__isset',
            '__unset',
            '__invoke',
            '__set_state'
        ))) {
            print $class . '::' . $method . "\n";
        }
    }
}

部分结果:
在这里插入图片描述

常用的原生类

有些类不一定能够进行反序列化。
php中使用了zend_class_unserialize_deny来禁止一些类的反序列化。

例如序列化DirectoryIterator的时候:

CTF中原生类多数被用于,XSS、SSRF、反序列化、XXE等。

常用的原生类有:

  • Error
  • Exception
  • SoapClient
  • DirectoryIterator
  • SimpleXMLElement
  • SplFileObject
Error原生类

适用于php7
需要开启报错

开启报错:

php.ini中设置display_errors = On

没权限修改php.ini的话可以在代码中加入:
ini_set("display_errors", "On");error_reporting(E_ALL | E_STRICT);
SoapClient原生类
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值