WMCTF2020 web之web_checkin


這道題是自己沒有做出來,當時也沒有認真做,最后看看來NU1L的wp才知道思路。
NU1L真的太強了,向他們看齊!!!

題目:web_checkin

<?php
//PHP 7.0.33 Apache/2.4.25
error_reporting(0);
$sandbox = '/var/www/html/' . md5($_SERVER['REMOTE_ADDR']);//remote_addr代表客戶端的IP
@mkdir($sandbox);//創建一個文件
@chdir($sandbox);//進入這個文件
highlight_file(__FILE__);
if(isset($_GET['content'])) 
{
    $content = $_GET['content'];

    if(preg_match('/iconv|UCS|UTF|rot|quoted|base64/i',$content))//沒有弄明白這里是為什么?
         die('hacker');

    if(file_exists($content))//file_exists() 函數檢查文件或目錄是否存在。
        require_once($content);
        
    file_put_contents($content,'<?php exit();'.$content);
    //file_put_contents() 函數把一個字符串寫入文件中。
}

他們是wp就一句話:?content=/flag
難道flag在根目錄下面?
於是自己搭建環境測試確實可以獲得flag,(使用絕對路徑獲得,這樣可以避免進行修改,但是也應該是沒有權限寫入吧?)
先放着這里,過幾天官方出wp在想一想吧!

想法
結合這個題,我想到了file_exists()函數可能存在繞過,這個例子來源於網絡。

<?php
highlight_file(__FILE__);
$file=$_GET['file'];
//file_exists這個函數允許傳入的路徑中含有特殊符號
if(file_exists($file)){
echo "hacker!!!";
}else{
include($file);
}
?>
//flag.php
<?php
flag{nice_to_meet_u0}

正常輸入如果文件存在就會輸出hack!!!
使用我們可以構造一個系統沒有的文件夾然后../繞過來繞過。
payload:

?file=./nice/../flag.php

這個思想來自DASCTF7月的比賽
題目鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM