返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP原生类
  • 801
分享到

PHP原生类

php开发语言 2023-09-05 08:09:12 801人浏览 独家记忆
摘要

什么是PHP原生类 原生类就是php内置类,不用定义php自带的类,即不需要在当前脚本写出,但也可以实例化的类 我们可以通过脚本找一下php原生类 这个反序列化没有任何可以直接利用的魔法函数,只有一个wakeup可以进入 ech

什么是PHP原生类

原生类就是php内置类,不用定义php自带的类,即不需要在当前脚本写出,但也可以实例化的类

我们可以通过脚本找一下php原生类

几个ctf常用的php原生类 

遍历文件目录的类

DirectoryIterator 类

类介绍

 DirectoryIterator extends SplFileInfo implements SeekableIterator {
    
    public __construct ( string $path )
    public current ( ) : DirectoryIterator
    public getATime ( ) : int
    public getBasename ( string $suffix = ? ) : string
    public getCTime ( ) : int
    public getExtension ( ) : string
    public getFilename ( ) : string
    public getGroup ( ) : int
    public getInode ( ) : int
    public getMTime ( ) : int
    public getOwner ( ) : int
    public getPath ( ) : string
    public getPathname ( ) : string
    public getPerms ( ) : int
    public getSize ( ) : int
    public getType ( ) : string
    public isDir ( ) : bool
    public isDot ( ) : bool
    public isExecutable ( ) : bool
    public isFile ( ) : bool
    public isLink ( ) : bool
    public isReadable ( ) : bool
    public isWritable ( ) : bool
    public key ( ) : string
    public next ( ) : void
    public rewind ( ) : void
    public seek ( int $position ) : void
    public __toString ( ) : string    // 以字符串形式获取文件名
    public valid ( ) : bool
}

可以看到这里有我门常见的__construct和__toString这里我们可以反序列化利用 

这里会创建一个指定目录的迭代器。当执行到echo函数时,会触发DirectoryIterator类中的 __toString() 方法,输出指定目录里面经过排序之后的第一个文件名

测试代码

echo以字符串的形式输入,会触发 __toString()以字符串的形式输入根目录的第一个文件名

 也可以结合glob协议进行多目录遍历

 如果想显示所有的文件可以用foreach函数来遍历,比如

');}

 

 FilesystemIterator

 基本和DirectoryIterator一样

GlobIterato

名字可以看出这个类是自带glob协议的,所以不用再使用glob协议了例如

文件读取类 

SplFileObject

当用文件目录遍历到了敏感文件时,可以用SplFileObject类,同样通过echo触发SplFileObject中的__toString()方法。(该类不支持通配符,所以必须先获取到完整文件名称才行),而且这个方法只能读一行

test1

key($this->value);    }}  unserialize($_GET['a']); ?>

这个反序列化没有任何可以直接利用的魔法函数,只有一个wakeup可以进入

echo new $this->key($this->value);

构造exp很简单,只需要让key值赋为我们想得的原生函数,value赋为路径,查就完了但是这个方法的局限性就是只能查一个路径上的第一个文件。

key($this->value);    }}  $a = new xxh();$a->key="SplFileObject";$a->value="./";echo serialize($a);?>

PHP 原生Error&Exception类(XSS实现与hash绕过)

Error内置类

适用于php7

开启报错的情况下

 Error类是php 的一个内置类,用于自动自定义一个Error ,在php7的情况下可能会造成一个xss漏洞,因为他内置有一个 __toString()方法,在ctf反序列化中,如果flag在cookie中可以尝试利用Error去触发__toString()

alert('1')");echo serialize($a);

 

 

 Excepthin 内置类 

适用于 php5,7

开启报错的情况下:

 exp

alert('1')");$b = serialize($a);echo urlencode($b);

也可以成功弹窗

命令执行

如果有eval的话就可以rce

  这就不限于Error函数了、

其他类

ReflectionMethod类

他本身具有的方法

class ReflectionMethod extends ReflectionFunctionAbstract implements Reflector {    ReflectionMethod::__construct — ReflectionMethod 的构造函数    ReflectionMethod::export — 输出一个回调方法    ReflectionMethod::getClosure — 返回一个动态建立的方法调用接口,译者注:可以使用这个返回值直接调用非公开方法。    ReflectionMethod::getDeclarinGClass — 获取被反射的方法所在类的反射实例    ReflectionMethod::getModifiers — 获取方法的修饰符    ReflectionMethod::getPrototype — 返回方法原型 (如果存在)    ReflectionMethod::invoke — Invoke    ReflectionMethod::invokeArgs — 带参数执行    ReflectionMethod::isAbstract — 判断方法是否是抽象方法    ReflectionMethod::isConstructor — 判断方法是否是构造方法    ReflectionMethod::isDestructor — 判断方法是否是析构方法    ReflectionMethod::isFinal — 判断方法是否定义 final    ReflectionMethod::isPrivate — 判断方法是否是私有方法    ReflectionMethod::isProtected — 判断方法是否是保护方法 (protected)    ReflectionMethod::isPublic — 判断方法是否是公开方法    ReflectionMethod::isStatic — 判断方法是否是静态方法    ReflectionMethod::setAccessible — 设置方法是否访问    ReflectionMethod::__toString — 返回反射方法对象的字符串表达            final private ReflectionFunctionAbstract::__clone(): void    public ReflectionFunctionAbstract::getAttributes(?string $name = null, int $flags = 0): array    public ReflectionFunctionAbstract::getClosureScopeClass(): ?ReflectionClass    public ReflectionFunctionAbstract::getClosureThis(): object    public ReflectionFunctionAbstract::getDocComment(): string    public ReflectionFunctionAbstract::getEndLine(): int    public ReflectionFunctionAbstract::getExtension(): ReflectionExtension    public ReflectionFunctionAbstract::getExtensionName(): string    public ReflectionFunctionAbstract::getFileName(): string    public ReflectionFunctionAbstract::getName(): string    public ReflectionFunctionAbstract::getNamespaceName(): string    public ReflectionFunctionAbstract::getNumberOfParameters(): int    public ReflectionFunctionAbstract::getNumberOfRequiredParameters(): int    public ReflectionFunctionAbstract::getParameters(): array    public ReflectionFunctionAbstract::getReturnType(): ?ReflectionType    public ReflectionFunctionAbstract::getShortName(): string    public ReflectionFunctionAbstract::getStartLine(): int    public ReflectionFunctionAbstract::getStaticVariables(): array    public ReflectionFunctionAbstract::hasReturnType(): bool    public ReflectionFunctionAbstract::inNamespace(): bool    public ReflectionFunctionAbstract::isClosure(): bool    public ReflectionFunctionAbstract::isDeprecated(): bool    public ReflectionFunctionAbstract::isGenerator(): bool    public ReflectionFunctionAbstract::isInternal(): bool    public ReflectionFunctionAbstract::isUserDefined(): bool    public ReflectionFunctionAbstract::isVariadic(): bool    public ReflectionFunctionAbstract::returnsReference(): bool    abstract public ReflectionFunctionAbstract::__toString(): void

可以看到这里也有一个__toString函数,也可以触发反序列化漏洞 

ReflectionMethod 类中有很多继承方法可以使用,比如这个 getDocComment() 方法,我们可以用它来获取类中各个函数注释内容

getDocComment());?>

?a=ReflectionMethod&b=a&c=b

利用原生类ReflectionMethod中的getDocComment()函数类读取注释

ZipArcHive

可以通过本类执行一些文件操作,在CTF可以用来删除waf

open(打开一个压缩包文件)

$zip = new \ZipArchive; $zip->open('test_new.zip', \ZipArchive::CREATE)

常用方法 

ZipArchive::addEmptyDir:添加一个新的文件目录ZipArchive::addFile:将文件添加到指定zip压缩包中ZipArchive::addFromString:添加新的文件同时将内容添加进去ZipArchive::close:关闭ziparchiveZipArchive::extractTo:将压缩包解压ZipArchive::open:打开一个zip压缩包ZipArchive::deleteIndex:删除压缩包中的某一个文件,如:deleteIndex(0)代表删除第一个文件ZipArchive::deleteName:删除压缩包中的某一个文件名称,同时也将文件删除

来源地址:https://blog.csdn.net/kuzemax/article/details/132144440

--结束END--

本文标题: PHP原生类

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

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

猜你喜欢
  • PHP原生类
    什么是php原生类 原生类就是php内置类,不用定义php自带的类,即不需要在当前脚本写出,但也可以实例化的类 我们可以通过脚本找一下php原生类 这个反序列化没有任何可以直接利用的魔法函数,只有一个wakeup可以进入 ech...
    99+
    2023-09-05
    php 开发语言
  • PHP原生类怎么遍历
    本篇内容主要讲解“PHP原生类怎么遍历”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP原生类怎么遍历”吧!首先贴一个遍历php内置类的脚本 <php$classes ...
    99+
    2023-07-05
  • PHP原生类的总结分享
    本篇文章给大家带来了关于PHP的相关知识,其中主要介绍了关于原生类的相关内容,下面一起来看一下,希望对大家有帮助。这次HEctf就是一个原生类的题,只有短短三行代码。果然越短小的代码在ctf里越难。首先贴一个遍历php内置类的脚本 <...
    99+
    2023-05-14
    php
  • PHP反序列化原生类实例分析
    这篇文章主要介绍“PHP反序列化原生类实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP反序列化原生类实例分析”文章能帮助大家解决问题。浅析php反序列化原生类的利用如果在代码审计或者ct...
    99+
    2023-06-30
  • 浅谈php原生类的利用 2(Error&SoapClient&SimpleXMLElement)
    除了上篇文章浅谈 php原生类的利用 1(文件操作类)_php spl原生类_葫芦娃42的博客-CSDN博客 里提到的原生利用文件操作类读文件的功能,在CTF题目中,还可以利用php原生类来进行XSS,反序列化,SSRF,XXE。 常用...
    99+
    2023-09-11
    php web安全
  • 简单实用的原生PHP分页类是怎样的
    本篇文章为大家展示了简单实用的原生PHP分页类是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一款简单实用的原生PHP分页类,分页按钮样式简洁美观,页码多的时候显示“...”,也是挺多网站用的...
    99+
    2023-06-04
  • php 原生 数组查询
    PHP作为一种流行的服务器端语言,在Web开发中广泛使用。在PHP中, 数组是一种非常常见的数据类型,可以轻松地存储和操作数据。数组查询是在数组中查找特定值、键或元素的过程。在PHP中,我们可以使用原生数组函数来执行这些操作。接下来,让我们...
    99+
    2023-05-24
  • 原生php pdo几个处理
    闲来无事,便记录几个最近遇到的Pdo细节问题,平常都是用orm的。 长连接 在历史的Mysql驱动中,都是使用connect和pconnect来区分长短连接,到了pdo之后,改成了参数。 PDO::ATTR_PERSISTENT $dbh...
    99+
    2019-09-01
    原生php pdo几个处理
  • php原生函数有哪些
    php中常用的原生函数有以下几种array_unique函数array_unique函数作用:php中array_unique函数的作用是用于移除数组中的重复的值,并返回结果数组。array_unique函数语法:array_unique(...
    99+
    2024-04-02
  • Ajax原生如何实现MIME类型
    小编给大家分享一下Ajax原生如何实现MIME类型,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题描述下面的例子是一个Ajax的post请求的代码,这段代码在测...
    99+
    2023-06-08
  • JavaScript的原生错误类型有哪些
    这篇文章给大家介绍JavaScript的原生错误类型有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。从浏览器控制台到运行 Node.js 的终端,我们...
    99+
    2024-04-02
  • JavaScript中有哪些原生错误类型
    JavaScript中有哪些原生错误类型?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JavaScript的作用是什么1、能够嵌入动态文本于HTML页面。2、对...
    99+
    2023-06-14
  • WEB攻防-通用漏洞&PHP反序列化&魔术方法&原生类
    #知识点: 1、什么是反序列化操作?-格式转换 2、为什么会出现安全漏洞?-魔术方法 3、反序列化漏洞如何发现? -对象逻辑 4、反序列化漏洞如何利用?-POP链构造 补充:反序列化利用大概分类三类 -魔...
    99+
    2023-09-09
    php 安全 开发语言
  • 原生JavaScript+PHP多图上传实现
    摘要 很多场景下需要选择多张图片上传,或者是批量上传以提高效率,多图上传的需求自然就比较多了,本文使用最简单的XMLHttpRequest异步上传图片。 界面 上传示例 代码 index.html...
    99+
    2023-10-06
    javascript php
  • 原生php开发留言板源码
    原生php mysql 留言板源码(含后台管理员管理)   php留言板是经典的PHP入门学习项目。本留言板代码,基于php和mysql实现,经过小黄鸡调试,可以无错运行。这个留言板适用于PHP课程设计适用,采用原生PHP编写。   实现功...
    99+
    2023-10-21
    php mysql 毕业设计 期末大作业 程序设计
  • PHP云原生应用开发指南
    云原生 php 开发指南介绍了使用 php 在云原生环境中开发应用程序的步骤:容器化:使用 docker 创建隔离的执行环境,打包应用程序及其依赖项。编排:使用 kubernetes 管...
    99+
    2024-05-16
    云原生 php git docker apache 容器化应用
  • PHP 云原生技术应用详解
    云原生技术是一系列适用于云计算环境的实践和技术,旨在提高应用程序的可移植性、可扩展性和弹性。php中的云原生技术包括:docker:创建和运行容器。kubernetes:管理和编排容器。...
    99+
    2024-05-03
    云原生 php docker composer
  • 安卓Android类原生系统官网集合
    由于Miui的平板系统一言难尽,所以一直在使用类原生系统,最近在找网络上有人汇总了原生系统的链接,根据自己的理解和网络介绍,整理成以下方便自己和他人使用。 google套件 https://open...
    99+
    2023-08-31
    android
  • 怎么正确生成PHP类文件
    这篇文章主要介绍“怎么正确生成PHP类文件”,在日常操作中,相信很多人在怎么正确生成PHP类文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么正确生成PHP类文件”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-17
  • PHP数据库扩展之原生MySQL API
    在写新的代码时,不推荐使用本扩展。您应该使用 mysqli 或者 PDO_MySQL 扩展代替。 安装 编译时,只要使用 --with-mysql[=DIR] 配置选项即可,其中可选的 [DIR] 指向 MySQL ...
    99+
    2022-05-21
    MySQL PHP 数据库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作