0x01 源码
<?phpinclude("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传参,则把post传参地址给get,可以简单理解为post覆盖了get,否则get没有传参,直接跳过,因为’flag’只是一个字符串,没有赋值操作。
第四行,如果get参数HTTP_FLAG的值为flag,就读取文件,也就是输出flag
第三、四行无效。
0x02 Payload
?1=2post:HTTP_FLAG=flag
三目运算符
三目运算符的执行需要是语句
$a = 1;$a == 2 ? $a = 3 : '4';var_dump($a);
此例题返回的是1,因为$a !=2 时,’4’不是语句,不能改变$a的值,因此为无效语句
