hxp CTF 2017 - cloud18 (web 150)

by CTF.Ninja

We also did an online text editor! We also made it, like, super secure! We are so confident that we even give you the source code.
Download:

65e868ae9518a3fd226e71d4041be9d4cd8350d7552b46832f3e7f0b5d6e03af.tar.xz
Connection:

http://35.198.105.111:5475/

Diberikan sebuah website beserta source code nya. Tampilan awal web tersebut hanya terdapat form login dan register. fungsi web tersebut adalah online editor, fungsi editor sendiri akan muncul setelah user login. Berikut daftar file source code yang diberikan

$ ls
editor.php  index.php  logout.php  register.php  stylesheet.css  User.php

Snippet editor.php

if (preg_match("/exec|system|passthru|`|proc_open|popen/", strtolower($_POST["method"].$_POST["text"])) != 0) {
    exit("Do you really think you could pass something to the command line? Functions like this are often disabled! Maybe have a look at the source?");
}
...............
    $editedText = preg_replace_callback("/" . $_POST["regex"] . "/", function ($matches) {
        return call_user_func($_POST["method"], $matches[0]);
    }, $_POST["text"]);
    if($editedText) {
        echo("<div class='alert success'>" . $editedText . "</div>");
    }

Snippet index.php

    if($_SESSION["user"]){
        echo "<div class='alert success'>login sucessful</div>";
        if($_SESSION["user"]->getName() === "admin"){
            echo "<div class='alert success'>" . shell_exec("/usr/bin/get_flag") . "</div>";
        }
    }

Dari source code editor.php, diketahui text inputan akan di edit akan dicocokan dengan regex lalu me return hasil dari fungsi call_user_func. fungsi dari call_user_func adalah untuk memanggil suatu fungsi, yang dimana parameter pertama nya adalah nama fungsi itu sendiri dan paramter kedua adalah parameter untuk fungsi yang ingin dipanggil.

call_user_func(“system”,”id”) akan memanggil fungsi system(“id”). Tapi karena terdapat filter nama fungsi, fungsi untuk eksekusi external program tidak bisa di digunakan. Karena parameter untuk nama fungsi di ambil dari $_POST[“method”] dalam hal ini kita bisa memanipulasi nama fungsi yang dipanggil call_user_func dengan memodifikasi value dari method itu sendiri via inspect element.

        <select name="method">
            <option value="" disabled selected>select a method</option>
            <option value="strtoupper">to upper case</option>
            <option value="strtolower">to lower case</option>
            <option value="ucfirst">first letter to upper case</option>
        </select>

Berdasarkan source code index.php, lokasi flag berada di “/usr/bin/get_flag”. Oleh karena itu bisa digunakan fungsi readfile untuk membaca isi dari /usr/bin/get_flag.

Gunanya regex : ^[ -~]+$ adalah agar match dengan semua dengan karakter yang di input pada bagian text.

Setelah disubmit, akan muncul isi dari /usr/bin/get_flag. tinggal CTR + F “hxp” untuk mendapatkan string Flag.

Flag : hxp{Th1s_w2sn’t_so_h4rd_now_do_web_of_ages!!!Sorry_f0r_f1rst_sh1tty_upload}

Tags: hxpCTF2017CTF

Subscribe via RSS