php_bugs学习 01 extract变量覆盖

php_bugs学习 01 extract变量覆盖

来源: https://github.com/bowu678/php_bugs
参考:https://www.cnblogs.com/-mo-/p/11652926.html

ps:由于一些我不太清楚的原因,导致感觉GitHub项目里面少了一些东西?比如数据库。。。还有题目感觉不太一样?

<?php

$flag='xxx'; 
extract($_GET);
 if(isset($shiyan))
 { 
    $content=trim(file_get_contents($flag));
    if($shiyan==$content)
    { 
        echo'ctf{xxx}'; 
    }
   else
   { 
    echo'Oh.no';
   } 
   }

?>

目的:达成$shiyan==$content

考点:extract的变量覆盖

想法:

?shiyan=1&content=1
但是失败了

查看官方文档

php_bugs学习 01 extract变量覆盖

在看一个例子

php_bugs学习 01 extract变量覆盖

默认情况下extract_rules为EXTR_OVERWRITE

也就是说会直接覆盖原本的变量

php_bugs学习 01 extract变量覆盖

同时注意一下代码中的trim

php_bugs学习 01 extract变量覆盖

由于flag的数值未知,所以我们需要extrat它使得flag的值(也就是content)与我们可控的shiyan数值相等

so,flag只能上传空值,那么$shiyan也上传为空值即可

payload:

?shiyan=
?shiyan=&flag
?shiyan=&content

这些都可以保证flag的数值为空

这道题可以这么改一下更贴近ctf
源码:

<?php

$flag='wdl8jH0kbr4'; 
extract($_GET);
 if(isset($shiyan))
 { 
    $content=trim(file_get_contents($flag));
    if($shiyan==$content)
    { 
        echo 'ctf{you_win_it}'; 
    }
   else
   { 
    echo 'Oh.no';
   } 
 }

?>

extract($_GET);
 if(isset($shiyan))
 { 
    $content=trim(file_get_contents($flag));
    if($shiyan==$content)
    { 
        echo 'ctf{xxx}'; 
    }
   else
   { 
    echo ‘Oh.no';
   } 
 }
上一篇:如何处理新站不收录的情况


下一篇:如何做好移动端的优化