[ctfshow web入门]web98 学习PHP的引用

Source

信息收集

先来卤一卤这串代码

($_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