打开连接,获得代码:
This is flag:" ." $flag";
}
else
{
echo "sorry!
";
}
}
?>
分析代码:
- extract($_GET):函数extract()有通过数组进行赋值的功能:
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
- file_get_contents($fn):file_get_contents功能是从文件名为“$fn”的文件中读取数据,但是当$fn的值为“php://input”,它会接受并返回post的值
根据提示txt,猜测存在flag.txt
其内容为flags,因此可以使$ac值为flags,$fn值为flag.txt,使$ac和$f相等
还有一种解法,利用file_get_contents在$fn的值为“php://input”时会返回post值 的特点,使$ac值为123,$fn值为“php://input”,并post值123,同样可使$ac和$f相等
payload构建完毕,下一步是通过函数extract进行赋值,但是其参数为数组,而且$_GET后并没有参数,因此怎么通过get传值是个问题
extract($_GET) 一般不是这样吗?? $_GET[id]
查看writeup,发现直接通过get传值即可
http://123.206.87.240:8002/web8/index.php?ac=flags&fn=flag.txt
为什么可以这么用?我并没有查到资料,那只能猜测如果$_GET后不加具体参数名的情况下,其返回值为一个数组,其中包含参数名和值的对应关系
第二种解法如下,
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)