ISCC2017 Web write up
一
打开连接:
注意You give me f1ag and I will give you flag too~~~
这段话有猫腻,没错就是f1ag和flag。
提交f1ag。
出现:哼,就给我一个flag我才不和你换呢。
右建查看元素。
发现有个输入框被隐藏了,把type=”hidden”改为type=””.
出现了输入框,并两个输入框输入f1ag.
出现:哼,就给我一个flag我才不和你换呢
还不够诚意,不和你换FLAG。
这句话暗示了FLAG.说明还要提交一个参数给FLAG(到这里就是考验脑洞了,最后一个话很灵性!)
接下来,给将参数f1ag赋给FLAG。
提交。
Flag: {N0w_go1Odo!otherw3b}
二
访问地址,是个上传框。
Php,Apache环境,简单的一步步围绕xx.php.xx格式尝试有什么没有过滤掉。Apache解析漏洞对它不起作用。
最后确定,xx.php5(大于5)可以上传并解析。
上传一句话(这里是1.php5)
菜刀连接成功。
获得信息,flag在数据库里边。
同样的方式上传我们的大马。
Sql搜索语句:SELECT*FROM flag
三
访问连接,在连接后面加flag.php
试了下,是宽字节注入,访问:
flag:{441b7fa1617307be9632263a4497871e}
四打开连接。
用御剑扫描目录发现有robots.txt
发现路径,访问它。
尝试加个admin.php(也可用御剑扫)成功访问后台。
是后台管理登入界面,进去无非就暴力**,万能密码,社工等。
使用万能密码逐个试。1’or’1’=’1
五
查看源码
$v1=0;$v2=0;$v3=0;
$a=(array)json_decode(@$_GET['iscc']);
if(is_array($a)){
is_numeric(@$a["bar1"])?die("nope"):NULL;
if(@$a["bar1"]){
($a["bar1"]>2016)?$v1=1:NULL;
}
if(is_array(@$a["bar2"])){
if(count($a["bar2"])!==5 OR !is_array($a["bar2"][0])) die("nope");
$pos = array_search("nudt", $a["bar2"]);
$pos===false?die("nope"):NULL;
foreach($a["bar2"] as $key=>$val){
$val==="nudt"?die("nope"):NULL;
}
$v2=1;
}
}
[email protected]$_GET['cat'];
[email protected]$_GET['dog'];
if(@$c[1]){
if(!strcmp($c[1],$d) && $c[1]!==$d){
eregi("3|1|c",$d.$c[0])?die("nope"):NULL;
strpos(($c[0].$d), "isccctf2017")?$v3=1:NULL;
}
}
if($v1 && $v2 && $v3){
echo $flag;
}
可以看出iscc是一个jason对象。
这里用到了PHP弱类型的一个特性,当一个整形和一个其他类型行比较的时候,会先把其他类型intval再比。 bar1为2017a即可
bar2是一个数组,长度是5,里边第一个元素是数组。bar2为[[0],0,1,2,3]即可
而array和string进行strcmp比较的时候会返回一个null,%00可以截断eregi。cat[0]=00isccctf2017&cat[1][]=1234&dog=%00
最后提交
?iscc={%22bar1%22:%222017e%22,%22bar2%22:[[1],1,2,3,0]}&cat[0]=00isccctf2017&cat[1][]=1234&dog=%00
flag{sfklljljdstuaft}