知识点

  1. 命令执行
  2. 绕过空格、敏感字符、连接符

绕过url空格编码([GXYCTF2019]Ping Ping Ping) - 图1

pingping攻防世界做过都知道会可以有命令执行漏洞

那我们在这里ls 明显执行了我们的命令。可惜我们 执行下面的命令

cat flag.php

却被检测出黑客

绕过url空格编码([GXYCTF2019]Ping Ping Ping) - 图2

经过尝试都失败。现在新知识。

会有如下的反应,显示我们有空格,我们需要绕过空格,这里提供几种方法供大家使用:

< <> %20 %09 $IFS$9 IFS IFS等等

这里我着重解释一下$IFS$9是什么意思 $IFS是bash中的内部域分隔符,可以代替空格至于后面的$9数字是可以随意的,我之前看过资料,每个数字都有特殊含义,但是和前面的搭配都可以表示空格;

ok 我们继续嵌入;发现说过滤了flag;于是我们先来cat一下index.php进行看看代码,得到代码如下

绕过url空格编码([GXYCTF2019]Ping Ping Ping) - 图3


发现确实过滤了很多,看来得到flag要费不少力气,

这里介绍 三种方法绕过flag:

先来我的第一种,是利用变量拼接,来做。看过我之前写的love_math的都因该知道php函数可以赋给一个变量,那么同理我们这里让字符串赋值给变量,给我的payload /?ip=127.0.0.1;b=f;c=g;e=la;cat$IFS$9$b$e$c

ps: 参数顺序要注意,adc换位acdflag会被检测出来:)

再来第二种方法,叫做内联执行 就是借用反引号来达到执行命令的要求, 大家可以在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

绕过url空格编码([GXYCTF2019]Ping Ping Ping) - 图4

下面有关知识点:

过滤了?/\{}()[]* 否则bash语法可以用“?”,正斜杠“/”,数字和字母来执行系统命令。

过滤空格

绕过url空格编码([GXYCTF2019]Ping Ping Ping) - 图5



**
关键字过滤**

绕过url空格编码([GXYCTF2019]Ping Ping Ping) - 图6



**
命令分隔与执行多条命令**

绕过url空格编码([GXYCTF2019]Ping Ping Ping) - 图7