渗透测试实战:HackMyVM Hundred 靶场攻防演练
前言
本教程基于 HackMyVM 平台上的"Hundred"靶机进行实战演练。该靶机专为渗透测试新手设计,涵盖了从信息收集、漏洞发现、漏洞利用到权限提升的完整攻击链条。通过复现此过程,学习者可以深入理解 Linux 系统安全机制、常见服务漏洞以及横向移动的基本思路。
环境搭建与准备
在进行渗透测试前,需要确保攻击机(Kali Linux)与被测目标机处于同一局域网段。本次实验的网络配置如下:
本文详细记录了在 HackMyVM Hundred 靶场中的渗透测试全过程。从信息收集阶段的 Nmap 扫描开始,到利用 FTP 服务获取密钥文件,再通过 Web 目录扫描与 RSA 解密技术突破防线,最后使用隐写术工具破解 SSH 私钥密码并修改 shadow 文件提权至 root。内容涵盖网络侦察、漏洞利用及权限提升的核心技术与操作细节,适合网络安全初学者理解完整的攻击链。

本教程基于 HackMyVM 平台上的"Hundred"靶机进行实战演练。该靶机专为渗透测试新手设计,涵盖了从信息收集、漏洞发现、漏洞利用到权限提升的完整攻击链条。通过复现此过程,学习者可以深入理解 Linux 系统安全机制、常见服务漏洞以及横向移动的基本思路。
在进行渗透测试前,需要确保攻击机(Kali Linux)与被测目标机处于同一局域网段。本次实验的网络配置如下:
请确保已安装必要的工具,包括 nmap、openssh-client、gobuster、openssl 以及 stegseek 等。
信息收集是渗透测试的第一步,目的是摸清目标的网络拓扑和开放端口。
首先使用 ARP 扫描确认网段内的活跃主机:
nmap -sn 192.168.1.0/24
输出结果将显示哪些 IP 地址正在响应请求。
接下来对目标 IP 进行全面的端口扫描,识别开放的服务及其版本信息:
sudo nmap -v -T4 -p- -A -oN nmap.log 192.168.1.146
参数说明:
-v: 增加输出详细程度。-T4: 设置模板速度为激进模式。-p-: 扫描所有 65535 个端口。-A: 开启 OS 检测、版本检测、脚本扫描和 traceroute。-oN: 将结果保存为文本格式。扫描结果显示目标开放了以下关键端口:
![图:Nmap 扫描结果展示开放的 21, 22, 80 端口]
连接 21 端口 FTP 服务。根据经验,部分老旧 FTP 服务器允许匿名登录或使用弱口令。
尝试使用用户名 ftp 和密码 ftp 登录:
ftp 192.168.1.146
# 输入用户名:ftp
# 输入密码:ftp
登录成功后,查看当前目录文件列表。可以发现存在 id_rsa 密钥文件和 users.txt 文件。值得注意的是,某些配置不当的 FTP 服务器允许任意用户名密码组合登录,但为了规范操作,我们记录实际凭证。
下载所有文件至本地进行分析:
mget *
分析私钥文件:
下载的 id_rsa 文件看似是一个标准的 OpenSSH 私钥,但经过检查发现其内容异常,可能包含加密信息或伪装数据。同时存在一个 id_rsa.pem 文件,这通常是 PEM 格式的私钥。
分析公钥文件: 公钥文件通常用于验证身份,此处看起来较为正常,但需结合私钥一起分析。
尝试 SSH 登录:
直接使用下载的私钥尝试 SSH 登录 hmv 用户:
ssh -i id_rsa [email protected]
连接失败,提示权限问题或认证失败。这表明直接使用该密钥无法进入系统,需要寻找其他突破口。
转向 80 端口的 Web 服务。访问目标 IP 后,页面显示为一个简单的方块或空白页。右键查看网页源代码,发现其中隐藏了一些线索。
源代码中包含一个加密的文件链接和一个目录提示。我们需要下载这个加密文件:
wget http://192.168.1.146/h4ckb1tu5.enc
该文件实际上是一个经过 RSA 加密的密文。结合之前发现的 Logo 图片,可能存在隐写术线索。我们可以利用 RSA 私钥配合 OpenSSL 工具对密文进行解码。
生成解密后的目录结构:
openssl rsautl -decrypt -inkey id_rsa.pem -in h4ckb1tu5.enc -out decrypted_content
访问解密后生成的路径,例如 http://192.168.1.146/softyhackb4el7dshelldredd/。
在新发现的目录下,再次查看源码或尝试目录扫描。由于目录名称较长且复杂,手动猜测困难,使用 Gobuster 进行字典爆破:
gobuster dir -w /usr/share/wordlists/dirb/common.txt -u http://192.168.1.146/
或者使用更强大的 SecLists 字典:
gobuster dir -w /root/SecLists/Discovery/Web-Content/common.txt -u http://192.168.1.146/
扫描发现了一个新的子目录,其中包含另一个 id_rsa 文件。下载该文件:
wget http://192.168.1.146/softyhackb4el7dshelldredd/id_rsa
再次尝试 SSH 登录,遇到两个阻碍:
Permissions 0644 for 'id_rsa' are too open. 需要将私钥权限设置为 600。
chmod 600 id_rsa
Enter passphrase for key 'id_rsa':。私钥本身设置了密码短语。为了获取私钥密码,我们需要回到之前的 Logo 图片。这是一个典型的隐写术场景,密码可能被隐藏在图片的二进制数据中。
下载图片:
wget http://192.168.1.146/logo.jpg
安装并使用 stegseek 工具进行破解。StegSeek 是一个快速、高效的隐写术破解工具,专门用于从图像中提取隐藏信息。
dpkg -i stegseek_0.6-1.deb
apt --fix-broken install
使用之前找到的 users.txt 作为字典,对图片进行解密:
stegseek logo.jpg users.txt -xf output
成功提取出私钥密码:d4t4s3c#1。
现在可以使用正确的密码登录 SSH:
ssh -i id_rsa [email protected]
# 输入密码:d4t4s3c#1
成功获得普通用户权限,完成第一阶段目标。
获得普通用户权限后,下一步是获取最高权限(Root)。
在该靶机环境中,/etc/shadow 文件的权限配置存在严重漏洞。通常情况下,只有 root 用户可以读取该文件,但在此靶机上,该文件对所有用户可写。
/etc/shadow 文件存储了用户的加密密码哈希值。如果我们能修改该文件,就可以将自己的密码哈希替换为已知密码的哈希值,从而以 root 身份登录。
首先,生成一个已知密码(例如 "root")的加密哈希值:
openssl passwd -6 root
(注:不同系统可能支持不同的哈希算法,如 -1, -5, -6 等)
假设生成的哈希值为 qdbEWfKM1ov2g。
接下来,备份原文件并写入新的 shadow 内容:
cp /etc/shadow /etc/shadow.bak
echo "root:qdbEWfKM1ov2g:18844:0:99999:7:::" > /etc/shadow
注意:shadow 文件格式为 username:password:lastchange:min:max:warn:inactive:expire:reserved。这里我们将 root 的密码字段替换为我们生成的哈希值。
修改完成后,尝试切换到 root 用户:
su -l
输入密码 root。
如果成功,你将获得 root shell,此时可以读取根目录下的 flag 文件,完成整个渗透测试流程。
本次渗透测试展示了从外网探测到内网提权的完整链路。关键点在于:
/etc/shadow 的可写权限是极其危险的配置失误,生产环境中必须严格限制此类文件权限。对于网络安全从业者而言,理解这些漏洞原理有助于更好地加固系统防御。请务必在合法授权的范围内进行此类测试。
注:本文档仅用于教学与研究目的,请勿用于非法用途。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online