HackMyVM - Momentum 靶机渗透记录

HackMyVM - Momentum 靶机渗透记录

环境与目标

  • 靶机 IP:192.168.56.104
  • 暴露服务:22/tcp80/tcp
  • 目标:从 Web 入口获取初始 shell,进一步提权到 root

一、信息收集

1. 主机发现

先用二层和三层两种方式确认目标主机:

sudo arp-scan -I vboxnet0 192.168.56.0/24
Interface: vboxnet0, type: EN10MB, MAC: 0a:00:27:00:00:00, IPv4: 192.168.56.1
WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied
WARNING: Cannot open MAC/Vendor file mac-vendor.txt: Permission denied
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.56.100 08:00:27:00:b6:79 (Unknown)
192.168.56.104 08:00:27:53:ba:51 (Unknown)

2 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.10.0: 256 hosts scanned in 1.894 seconds (135.16 hosts/sec). 2 responded

# 另一种主机发现方式
fping -ag 192.168.56.0/24 2>/dev/null
192.168.56.1
192.168.56.100
192.168.56.104

可以确认靶机地址为 192.168.56.104

2. 端口扫描

先做基础探测,再补服务识别与系统识别:

sudo nmap -sT 192.168.56.104
Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-16 19:47 +0800
Nmap scan report for 192.168.56.104
Host is up (0.0033s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 08:00:27:53:BA:51 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.72 seconds
sudo nmap -sT -p22,80 -sV -O 192.168.56.104
Starting Nmap 7.98 ( https://nmap.org ) at 2026-03-16 19:48 +0800
Nmap scan report for 192.168.56.104
Host is up (0.00051s latency).

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
80/tcp open http Apache httpd 2.4.38 ((Debian))
MAC Address: 08:00:27:53:BA:51 (Oracle VirtualBox virtual NIC)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|router
Running: Linux 4.X|5.X, MikroTik RouterOS 7.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3
OS details: Linux 4.15 - 5.19, OpenWrt 21.02 (Linux 5.4), MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 13.02 seconds

结论很直接:对外只开放了 SSHHTTP,而 HTTP 更适合作为首个突破口。

二、Web 枚举与加密信息恢复

访问首页后,可以看到是一个自定义登录页,不像常见 CMS:

继续用 dirsearch 做目录枚举:

扫描结果里比较值得关注的是 manualjs 两个路径:

  • manual 暴露了 Apache 2.4 默认文档;
  • js 暴露了前端脚本,可能包含业务逻辑或调试信息。

脚本里的内容如下:

function viewDetails(str) {
window.location.href = "opus-details.php?id=" + str;
}

/*
var CryptoJS = require("crypto-js");
var decrypted = CryptoJS.AES.decrypt(encrypted, "SecretPassphraseMomentum");
console.log(decrypted.toString(CryptoJS.enc.Utf8));
*/

这里至少可以确认两点:

  • 存在一个可访问的详情页 opus-details.php?id=...
  • 注释中直接泄露了 AES 解密口令 SecretPassphraseMomentum

继续访问 opus-details.php,页面返回了一段加密后的 Cookie 值:

U2FsdGVkX193yTOKOucUbHeDp1Wxd5r7YkoM8daRtj0rjABqGuQ6Mx28N1VbBSZt

接下来直接按注释中给出的思路,在浏览器控制台加载 CryptoJS 后进行解密验证:

var script = document.createElement('script');
script.src = "https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js";
document.head.appendChild(script);

script.onload = function() {
var encryptedCookie = "U2FsdGVkX193yTOKOucUbHeDp1Wxd5r7YkoM8daRtj0rjABqGuQ6Mx28N1VbBSZt";
var decrypted = CryptoJS.AES.decrypt(encryptedCookie, "SecretPassphraseMomentum");
console.log("解密结果: ", decrypted.toString(CryptoJS.enc.Utf8));
};

解密结果为:

auxerre-alienum##

这说明前端泄露并不是“无害注释”,而是直接给出了可利用的解密方式和密钥。

三、获取初始 shell

拿到 auxerre-alienum## 后,一开始我把它误判成“用户名 + 密码”的组合,因此先尝试 SSH 登录,结果失败:

随后又回到 Web 登录页继续验证:

继续排查后,重新调整思路,不再把它拆成两段,而是把整串 auxerre-alienum## 作为单一口令使用,最终成功进入 Web 提供的 shell 后台:

进入初始 shell 后,顺利读取到用户 flag:

这一段的关键不在“解密本身”,而在于避免把结果过度脑补成固定格式的账号密码组合。

四、权限提升

拿到普通用户权限后,先走常规提权枚举。SUID 方向没有明显突破点,而且系统里也没有可直接利用的 sudo

于是把重点转向本地服务枚举。查看监听服务后,可以发现有一个仅绑定在回环地址上的 Redis

连接该 Redis 后,枚举键值内容,拿到了 root 的口令:

m0mentum-al1enum##

随后即可直接切换到 root,拿到最终 flag:

这里暴露的问题非常直接:

  • 敏感服务仅监听本地,并不等于安全;
  • Redis 中保存了高价值明文凭据;
  • root 密码被低权限用户间接读取后,整个主机就被完全接管。

总结

  • 利用链条比较短:Web 枚举 → 前端注释泄露 AES 口令 → 解密拿到登录口令 → 进入 shell 后台 → 枚举本地服务发现 Redis → 获取 root 密码。
  • 靶机的核心考点主要有两个:一是前端泄露敏感信息后的利用思路,二是拿到低权限 shell 后对本地服务的持续枚举。
  • 这个靶机本身不难,真正容易卡住的地方是误把 auxerre-alienum## 想成“账号-密码”结构;一旦把它当成单一凭据重新验证,后续路径就比较顺。