从Rickdiculously Easy靶机拆解渗透测试核心流程:信息搜集到权限提升
1. 项目概述:从“Rickdiculously Easy”靶机说起
最近在渗透测试的圈子里,一个名为“Rickdiculously Easy”的虚拟机靶机热度不低。这个名字本身就很有意思,它戏谑地暗示了其难度之低,仿佛在说“这简直简单得离谱”。对于很多刚入门网络安全、想上手实战渗透的朋友来说,这种靶机是绝佳的“新手村”体验。它不像那些配置复杂、路径刁钻的“地狱级”靶场,而是提供了一个结构相对清晰、漏洞点比较典型的模拟环境,让你能够快速建立起“发现漏洞-利用漏洞-获取权限”的完整闭环信心。我花了点时间把这个靶机从头到尾走了一遍,过程确实如名字所言,非常顺畅,但其中涉及到的思路和工具使用,恰恰是构建渗透测试基础能力的核心。所以,这篇内容不只是复现步骤,更想拆解每一步背后的“为什么”,以及在实际操作中那些容易忽略的细节和“坑点”。无论你是想验证自己所学,还是准备踏入这个领域,这篇基于实战的拆解应该都能给你带来一些直接的参考。
2. 环境准备与信息搜集:一切攻击的起点
渗透测试的第一步永远不是直接上工具狂轰滥炸,而是耐心且细致的信息搜集。这就像侦探破案前要勘察现场、收集线索一样。对于“Rickdiculously Easy”这类在本地虚拟机(如VMware或VirtualBox)中运行的靶机,我们的“现场”就是它的网络服务和可能暴露的信息。
2.1 靶机网络配置与发现
首先,确保你的攻击机(通常是Kali Linux或Parrot OS)和靶机处于同一网络段。最常见的方式是将两者都设置为NAT模式或桥接模式。我个人的习惯是使用VMware的NAT网络,因为它能提供一个相对隔离的虚拟网络环境,避免干扰到物理网络。
启动靶机后,第一件事就是找出它的IP地址。由于靶机通常不会主动告诉我们,我们需要进行网络扫描。
sudo netdiscover -r 192.168.1.0/24或者使用更强大的nmap进行存活主机扫描:
sudo nmap -sn 192.168.1.0/24这里的-sn参数代表 Ping 扫描,用于发现存活主机。执行后,你会看到一个不属于你已知设备的IP地址,那很可能就是靶机。假设我们发现的靶机IP是192.168.1.105。
注意:网络扫描是信息搜集的常规操作,但务必仅在你自己搭建的实验室环境或获得明确授权的范围内进行。未经授权的扫描行为是违法的。
2.2 端口与服务深度探测
找到IP后,下一步就是“敲门”,看看靶机上开了哪些“门”(端口),以及每扇门后提供什么“服务”(服务类型和版本)。这是发现潜在攻击面的关键。
sudo nmap -sV -sC -O -p- 192.168.1.105这个命令组合非常强大:
-sV: 探测服务版本。知道运行的是Apache 2.4.49还是Nginx 1.18,对于寻找已知漏洞至关重要。-sC: 使用默认的Nmap脚本进行扫描。这些脚本能进行更深入的探测,比如检查HTTP服务的robots.txt,或者尝试识别一些简单的漏洞。-O: 尝试识别操作系统。虽然虚拟机靶机通常是Linux,但确认一下没坏处。-p-: 扫描所有65535个端口。默认nmap只扫描前1000个常用端口,但有些服务可能开在非常用端口上,这个参数确保全覆盖。
扫描完成后,你可能会得到类似这样的结果:
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 (protocol 2.0) 80/tcp open http Apache httpd 2.4.41 111/tcp open rpcbind 2049/tcp open nfs NFS (Network File System)这个结果已经非常丰富了。我们看到了SSH(22端口)、HTTP网页服务(80端口)、RPC(111端口)和NFS(2049端口)。一个简单的Web服务器同时开放了NFS服务,这本身就是一个需要重点关注的组合。
2.3 Web目录枚举与初步探查
既然有HTTP服务(80端口),浏览器访问http://192.168.1.105是必然的。打开后,你可能会看到一个默认的Apache页面,或者一些简单的提示。但这只是冰山一角,我们需要找出隐藏的目录或文件。
这里使用gobuster或dirb进行目录爆破:
gobuster dir -u http://192.168.1.105 -w /usr/share/wordlists/dirb/common.txt -x php,txt,htmldir: 指定进行目录扫描模式。-u: 指定目标URL。-w: 指定字典文件。common.txt是一个常用的目录和文件字典。-x: 指定尝试的文件扩展名。这里我们寻找.php,.txt,.html结尾的文件。
扫描结果可能会发现一些有趣的路径,比如/robots.txt、/admin、/backup等。访问/robots.txt文件有时能发现开发者不想被搜索引擎抓取的目录,这些地方往往存放着测试页面、备份文件或管理界面,是重要的信息来源。
3. 漏洞分析与利用路径拆解
信息搜集完毕后,我们手头有了一份“资产清单”:开放的服务、可能的隐藏目录。接下来就是分析这些资产中哪些可能存在弱点。针对“Rickdiculously Easy”靶机的典型配置,我们往往会发现一条清晰的利用链。
3.1 NFS服务信息泄露与权限滥用
从nmap扫描结果我们看到2049端口开放了NFS服务。NFS(网络文件系统)允许将远程目录挂载到本地,像访问本地文件夹一样访问远程文件。如果配置不当,可能导致未授权访问。
首先,查看靶机共享了哪些目录:
showmount -e 192.168.1.105如果返回类似/home/user/share *(rw,sync,no_root_squash)的信息,那就意味着任何人都可以挂载这个共享目录,并且具有读写权限。参数no_root_squash尤其危险,它允许客户端的root用户保留root权限访问共享文件,这为权限提升埋下了伏笔。
我们可以创建一个本地目录,并将靶机的共享挂载上来:
mkdir /tmp/target_nfs sudo mount -t nfs 192.168.1.105:/home/user/share /tmp/target_nfs挂载成功后,/tmp/target_nfs目录下的内容就是靶机/home/user/share目录下的内容。仔细检查这些文件,你可能会发现:
- 备份文件:如
.bak文件、数据库转储文件(.sql)。 - 配置文件:可能包含数据库密码、API密钥等敏感信息。
- 用户文件:如
.bash_history(命令历史),可能泄露用户执行过的敏感命令。 - SSH密钥:如果存在
.ssh/id_rsa私钥文件,那将是我们获取SSH访问权限的“金钥匙”。
实操心得:检查文件时,别只看文件名,要用
cat、strings、file命令查看文件内容。一个看似普通的文本文件,里面可能就藏着密码。另外,注意文件的权限(ls -la),如果发现了属于特定用户的私钥,但权限是600(仅所有者可读),在挂载的NFS上你可能可以直接读取,这正是no_root_squash配置不当的后果。
3.2 SSH私钥获取与登录
假设我们在挂载的NFS共享目录中,幸运地找到了/home/rick/.ssh/id_rsa文件。这就是用户rick的SSH私钥。我们需要做以下几件事:
- 将私钥复制到攻击机:
cp /tmp/target_nfs/.ssh/id_rsa ~/.ssh/target_id_rsa - 修改私钥文件权限:SSH客户端对私钥文件的权限有严格限制,过于开放的权限会被拒绝使用。
chmod 600 ~/.ssh/target_id_rsa - 尝试使用私钥登录:
ssh -i ~/.ssh/target_id_rsa rick@192.168.1.105-i参数指定使用的私钥文件。
如果靶机上用户rick的.ssh/authorized_keys文件中包含了对应公钥,并且私钥未被加密(没有设置密码短语),那么你将直接获得一个SSH shell。
常见问题:如果登录失败,可能有几个原因。一是私钥被加密(有密码短语),这时需要破解密码,可以使用
ssh2john和john工具。二是靶机上的authorized_keys文件里没有对应的公钥。三是防火墙或SSH配置(如PermitRootLogin、PasswordAuthentication)限制。这时需要回到信息搜集阶段,看看是否有其他线索(比如从备份文件中找到的密码可能用于SSH密码登录)。
3.3 Web应用漏洞的辅助利用
在通过SSH获得初步立足点之前或之后,对80端口的Web服务进行深入测试也是重要一环。除了目录枚举,还可以:
- 手动测试参数:对发现的任何表单或URL参数(如
?id=1)进行SQL注入或命令注入测试。一个简单的测试是在参数后加一个单引号‘,观察页面返回是否有数据库错误信息。 - 检查源代码:浏览器查看网页源代码,注释里有时会藏着开发者的笔记、测试凭证或隐藏路径。
- 分析技术栈:通过浏览器的开发者工具(F12)查看网络请求响应头,获取Web框架(如Flask、Express)、服务器软件具体版本等信息,便于搜索公开漏洞。
对于“Rickdiculously Easy”这类靶机,Web端可能设置了一个简单的登录页面,并存在SQL注入漏洞。你可以使用sqlmap进行自动化检测:
sqlmap -u "http://192.168.1.105/login.php" --data="username=admin&password=pass" --level=3 --risk=2但作为学习,我更推荐先手动尝试经典的单引号、‘ or ‘1’=’1等Payload,理解漏洞原理,再使用工具辅助。
4. 权限提升与最终立足
通过SSH私钥,我们很可能以普通用户身份(如rick)登录进了系统。在渗透测试中,获得一个shell只是开始,我们最终的目标通常是获取最高权限(root)。这个过程称为权限提升(Privilege Escalation)。
4.1 系统内部信息搜集
登录后的第一件事,是在靶机内部再次进行信息搜集,寻找提权线索。以下是一些关键命令:
# 查看当前用户权限 id sudo -l # 查看当前用户可以以root身份执行哪些命令,这是最直接的提权路径 # 查看系统信息 uname -a # 内核版本 cat /etc/os-release # 发行版信息 # 查找具有SUID权限的特殊文件 find / -perm -u=s -type f 2>/dev/null # 查找当前用户可写的文件 find / -writable -type f 2>/dev/null | grep -v "/proc/" # 查看计划任务 crontab -l ls -la /etc/cron* /var/spool/cron/ # 查看网络连接和监听端口 netstat -tulnp ss -tulnp # 查看进程列表 ps aux这些命令的输出蕴含着大量提权机会。例如,sudo -l可能显示用户rick可以无需密码以root身份运行/usr/bin/vim,那么通过sudo vim进入vim后,就可以用:!bash命令轻松获得一个root shell。
4.2 利用SUID二进制文件提权
find / -perm -u=s -type f 2>/dev/null这个命令会找出所有设置了SUID位的文件。SUID位意味着当任何用户执行这个文件时,它将以文件所有者的权限运行。如果这个文件的所有者是root,并且程序本身存在漏洞(或者可以被滥用),就可能用来提权。
一些经典的、易被滥用的SUID程序包括:
find(如果版本较老):find . -exec /bin/bash \;vim/vi:vim -c ‘:!bash’bash(特定版本):bash -pnmap(交互模式旧版本):nmap --interactive然后!shcp/mv: 如果可以对敏感文件(如/etc/passwd)进行写操作。
在“Rickdiculously Easy”靶机中,可能会故意放置一个这样的易滥用SUID程序。你需要根据找到的程序名称,去搜索对应的利用方法(例如,搜索“SUID privilege escalation [程序名]”)。
4.3 利用Cron Jobs计划任务提权
Cron是Linux系统的计划任务工具。如果有一个以root权限定期运行的脚本,并且这个脚本当前用户有写入权限,那么我们就可以修改这个脚本,让它执行我们的恶意命令,从而在计划任务执行时获得root权限。
检查方法:
crontab -l查看当前用户的计划任务。ls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/等目录查看系统级任务。- 使用
cat查看发现的cron文件内容,找到它具体执行什么命令或脚本。
假设发现一个任务* * * * * root /opt/scripts/backup.sh,而经过检查,你发现/opt/scripts/backup.sh这个文件,用户rick有写入权限。那么,你可以用以下命令替换其内容:
echo ‘cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash’ > /opt/scripts/backup.sh然后等待最多一分钟,cron任务以root身份执行这个脚本,就会在/tmp目录下创建一个具有SUID位的bash副本。之后,你执行/tmp/rootbash -p就能获得一个root shell。
注意事项:在修改系统文件前,最好先备份原文件(
cp backup.sh backup.sh.bak),并且在获得权限后,尽量恢复原状,这是渗透测试职业道德的一部分。同时,要注意脚本的格式,确保你写入的命令是有效的Shell命令。
4.4 内核漏洞提权
如果以上方法都行不通,最后的手段是寻找内核漏洞。使用uname -a获取内核版本,然后在攻击机上搜索该版本的公开漏洞利用代码(Exploit)。你可以使用searchsploit工具(Kali自带):
searchsploit “Linux Kernel 3.10” Privilege Escalation找到合适的 exploit 后,将其上传到靶机(例如用python3 -m http.server在攻击机开启临时web服务,在靶机用wget下载),编译并执行。但必须极其谨慎:内核 exploit 不稳定,可能导致系统崩溃(在靶机环境中无所谓,在生产环境绝对禁止未经授权的测试)。而且,现代系统通常有安全机制(如SELinux, AppArmor)缓解此类攻击。
5. 总结与防御思考
走完“Rickdiculously Easy”靶机的全程,你会发现其渗透路径设计得非常经典:信息泄露(NFS共享)→ 凭证获取(SSH私钥)→ 权限提升(SUID/Cron滥用)。这几乎涵盖了初级渗透测试的核心知识点。
从防御者的角度来看,这个靶机暴露出的每一个问题,都是现实世界中需要加固的点:
- 最小化服务暴露:如非必要,关闭NFS、RPCbind等非关键服务。如果必须使用,应严格配置访问控制列表(ACL),禁止匿名访问,并避免使用
no_root_squash这样危险的选项。 - 妥善管理密钥与凭证:SSH私钥应加密存储(设置强密码短语),并严格限制其文件权限(600)。绝对不要将私钥放在可被网络访问的共享目录中。定期轮换密钥。
- 遵循最小权限原则:
- 对SUID二进制文件进行严格审计,只给绝对必要的程序设置SUID位。
- 配置
sudo时,精确授权,避免使用NOPASSWD和过于宽泛的命令路径(如允许ALL)。 - 确保计划任务(Cron Jobs)执行的脚本和其所在目录的权限设置正确,避免低权限用户可写。
- 保持系统与软件更新:及时安装安全补丁,修复已知的软件漏洞和内核漏洞。
- 加强日志与监控:记录并监控SSH登录尝试、文件访问(尤其是敏感文件)、特权命令执行等行为,以便在发生入侵时能快速发现和响应。
这个靶机之所以“简单”,是因为它将这些常见的安全配置错误集中展示了出来。对于学习者而言,成功渗透它能带来成就感,但更重要的是要理解每一步成功的原理,并反过来思考如何防御。真正的安全能力,正是在这种“攻”与“防”的思维切换中逐渐构建起来的。我自己的习惯是,每次打完一个靶机,都会以管理员视角重新审视一遍,假设我要守护这台服务器,我会如何配置和监控,这份思考往往比利用漏洞本身更有价值。
