第九届御网杯
第九届御网杯
历经12个小时高强度ctf,也是打完了御网杯线下赛。真的累,半决赛和决赛在同一天进行。
先是半决赛,我们GWWAFZ排名13还是多少成功进入决赛,当时以为半决赛一等奖就是nisp证书了,没想到是决赛才决出一等奖。
不过第一次线下赛就进决赛,还拿了二等奖,也不错了。
这次我们ak了misc
我负责的web方向是解出了三题,还有一题全场暴零。
由于比赛限制联网,还不准带手机,题目没有源码,只能根据回忆
故只提供我的web模糊向wp。
二次编码
根据题目提示,在前端里找到三个相关参数,要让两个参数有值,不记得是不是只能有两个参数,好像三个都穿不行记不清了,当时参数乱填,然后排列组合出来了。
sql
sqlmap直接跑出来
命令执行
这题做的最久有两个多小时,恕我太菜了。
白盒rce,源码复制下来了:
1 |
|
必须要有
(“/?|*/i”,$cmd)
才会进入eval的if
然后把一些能直接输出flag的命令ban了
随便试了一下,进入hack的if时会有提示:
1 |
|
这个trim还好,有echo用,主要是如何把flag的目录传到变量里
1 |
|
当时是想过直接用路径搭配通配符来给filename赋值的,但是尝试后发现这时的filename变为字符串变量,然后file_get_contents是不能在字符串变量里匹配通配符的
所以要找一个把正确的文件名赋值给filename的办法
最后尝试了很多次后,是使用了glob函数搭配通配符*来读取路径,然后用var_dump来输出文件名:
cmd=$filename=glob(“/tmp/“);echo(““);var_dump($filename);
回显:
*array(2) { [0]=> string(13) “/tmp/flag.php” [1]=> string(16) “/tmp/tmpw_m0ic1v” }
又花了点时间,发现能直接用filename[0]来指定这个数组里的某一个值
然后
cmd=$filename=glob(“/tmp/“);$a=trim(file_get_contents($filename[0]));echo(““);var_dump($filename);echo($a);
回显:
*array(2) { [0]=> string(13) “/tmp/flag.php” [1]=> string(16) “/tmp/tmpw_m0ic1v” } flag{GarnHSTCUTh6}
大概流程是
用glob来获取目录下的全部文件路径赋值给filename数组->用file_get_contents来filename[0],即读取到正确的flag路径,然后成功包含flag.php->trim来提取flag.php里的内容赋值给a->echo 变量a,得到flag内容