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)这个结果已经非常丰富了。我们看到了SSH22端口、HTTP网页服务80端口、RPC111端口和NFS2049端口。一个简单的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 rick192.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参数如?id1进行SQL注入或命令注入测试。一个简单的测试是在参数后加一个单引号‘观察页面返回是否有数据库错误信息。检查源代码浏览器查看网页源代码注释里有时会藏着开发者的笔记、测试凭证或隐藏路径。分析技术栈通过浏览器的开发者工具F12查看网络请求响应头获取Web框架如Flask、Express、服务器软件具体版本等信息便于搜索公开漏洞。对于“Rickdiculously Easy”这类靶机Web端可能设置了一个简单的登录页面并存在SQL注入漏洞。你可以使用sqlmap进行自动化检测sqlmap -u http://192.168.1.105/login.php --datausernameadminpasswordpass --level3 --risk2但作为学习我更推荐先手动尝试经典的单引号、‘ 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 -us -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 -us -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登录尝试、文件访问尤其是敏感文件、特权命令执行等行为以便在发生入侵时能快速发现和响应。这个靶机之所以“简单”是因为它将这些常见的安全配置错误集中展示了出来。对于学习者而言成功渗透它能带来成就感但更重要的是要理解每一步成功的原理并反过来思考如何防御。真正的安全能力正是在这种“攻”与“防”的思维切换中逐渐构建起来的。我自己的习惯是每次打完一个靶机都会以管理员视角重新审视一遍假设我要守护这台服务器我会如何配置和监控这份思考往往比利用漏洞本身更有价值。