[GXYCTF2019]Ping Ping Ping
不经一番寒彻骨,怎得梅花扑鼻香。
若教眼底无离恨,不信人间有白头。
这次记录一道GXYCTF的题目,这个题目个人觉得还是很好的,有一种使人着急的心态,看到flag却不知道怎么读取,经过百般骚姿势才绕过,这类题应该好好总结;
打开题目看到如下的界面;看到了ip再来结合题目,得知是要ping了。这里我们可以运用命令链接符,进行命令的执行,漏洞的起因还是没将用户的输入进行过滤就进行了拼接,所以才会有这样的情况;
我们嵌入/?ip=127.0.0.1;ls 这里解释一下 ; 的原因 ; 作为命令链接符号的一种,表示执行完前面的命令之后接着执行后面的命令,顺接的关系;
除此之外还有一些命令连接符有:& %0a %0d | || 等等,
得到如下的界面
可以看到在该目录下有index.php和flag.php 我们继续输入指令127.0.0.1;cat flag.php
会有如下的反应,显示我们有空格,我们需要绕过空格,这里提供几种方法供大家使用:
< <> %20 %09 $IFS$9 IFS IFS等等
这里我着重解释一下$IFS$9是什么意思 $IFS是bash中的内部域分隔符,可以代替空格至于后面的$9数字是可以随意的,我之前看过资料,每个数字都有特殊含义,但是和前面的搭配都可以表示空格;
ok 我们继续嵌入;发现说过滤了flag;于是我们先来cat一下index.php进行看看代码,得到代码如下
发现确实过滤了很多,看来得到flag要费不少力气,
这里介绍 三种方法:
先来我的第一种,是利用变量拼接,来做。看过我之前写的love_math的都因该知道php函数可以赋给一个变量,那么同理我们这里让字符串赋值给变量,给我的payload /?ip=127.0.0.1;b=fla;c=g;cat$IFS$9$b$c
再来第二种方法,叫做内联执行 就是借用反引号来达到执行命令的要求, 大家可以在linux环境下打开终端测试一下就ok这个很简单,也好理解。我们只需要嵌入 /?id=127.0.0.1;cat$IFS$9`ls{再来一个反引号闭合,这里我打不出来了,抱歉,理解就好}
第三种方法比较少用,就是借助bash命令或者sh命令来搞;这里因为之前看的index.php里面禁用了bash,所以我们这里使用sh来执行,具体代码如下
/?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw=$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|sh
ok~~~ flag到手了;