本人最近玩玩DCNCTF,如图。(Design By J.wade)
点进去,……我丢……考我PHP代码
首先丢一个链接,总结的一些php特性
http://blog.csdn.net/qq_35078631/article/details/75200157
<?php
include "flag.php";
show_source(__FILE__);
$v1=0;$v2=0;
$a=(array)json_decode(@$_GET['dcn']);
if(is_array($a)){
is_numeric(@$a["d1"])?die("错误"):NULL;
if(@$a["d1"]){
($a["d1"]>2019)?$v1=1:NULL;
}
if(is_array(@$a["d2"])){
if(count($a["d2"])!==5 OR !is_array($a["d2"][0])) die("错误");
$pos = array_search("dcnctf", $a["a2"]);
$pos===false?die("错误"):NULL;
foreach($a["d2"] as $key=>$val){
$val==="dcnctf"?die("错误"):NULL;
}
$v2=1;
}
}
if($v1 && $v2){
echo $flag;
}
?>
第一步,is_numeric()函数,即数字+字母可以绕过和2019比较且不是纯数字 ,所以我随便填d1是2020abc,
第二步,count($a["d2"])!==5 OR !is_array($a["d2"][0]) 构造d2,要求d2的第一项是数组,且总共数组有五项
第三步,构造数组中a2项数值为dcnctf
那么输入地址获取flag值