天天看點

[代碼審計][HCTF 2018]WarmUp與CVE-2018-12613

文章目錄

  • ​​前言​​
  • ​​WP​​
  • ​​CVE-2018-12613​​

前言

在request請求當中就會被url解碼一次,這就是接下來為什麼會需要兩次編碼繞過

WP

打開靶機看到一個滑稽圖檔,審查元素發現有個​

​source.php​

[代碼審計][HCTF 2018]WarmUp與CVE-2018-12613

通路發現需要我們進行代碼審計,下面對代碼進行分析

highlight_file(__FILE__); 
    class emmm  
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];//聲明一個白名單數組
            if (! isset($page) || !is_string($page)) {//若$page變量不存在或page中值非字元串
                echo "you can't see it";
                return false;//傳回false
            }

            if (in_array($page, $whitelist)) {//若$page變量存在于$whitelist數組中
                return true;//傳回true(我們後面會對其進行繞過)
            }

            $_page = mb_substr(//該代碼表示要截取$page中'?'前部分,若無則截取整個$page
                $page,
                0,
                mb_strpos($page.'?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;//傳回true(我們後面會對其進行繞過)
            }

            $_page = urldecode($page);//url解碼$page
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;//傳回true(這裡必須傳回了,不然就是false)
            }
            echo "you can't see it";
            return false;
        }
    }      

若以上四個if語句均未傳回值,則傳回false

再看最下面的執行,要求一個if語句要求傳入的file變量:

  • 非空
  • 類型為字元串
  • 能夠通過checkFile()函數校驗
  • 同時滿足以上三個要求即可包含file中的檔案,否則列印滑稽表情

CVE-2018-12613