前提条件
- 用户需要有通过
sudo 执行 git 命令的权限。
- 通过
sudo -l 查看权限时,发现 git 命令在允许列表中(无需密码或可提权)。
Git提权方法
方法一:利用 git help 命令
- 检查
sudo 权限
输出中应包含类似以下内容:
1 2
| User tom may run the following commands on DC-2 as root: (root) NOPASSWD: /usr/bin/git
|
- 触发提权
执行以下命令,进入 git 的帮助文档界面:
- 进入交互模式执行命令
- 按
Shift + : 进入 命令模式(类似 vi 的命令行)。
- 输入以下命令之一,即可获得
root 权限的 shell:
1 2
| !/bin/bash # 直接启动 root shell !'sh' # 启动 root 的 sh shell
|
- 退出帮助界面
如果命令未立即生效,按 q 退出帮助界面,再执行以下命令:
再次进入命令模式并输入:
方法二:利用 git -p 参数
- 直接执行命令
按 Shift + : 进入命令模式后,输入:
原理说明
Git 的 help 命令特性:
Git 的 help 子命令会调用 less 或 vi 等文本查看器显示帮助文档。通过在这些编辑器中触发 shell 执行命令(如 !command),可以绕过权限限制,直接以 root 身份执行命令。
SUID 权限漏洞:
如果 git 二进制文件被设置了 SUID 权限(sudo getcap $(which git) 可检查),则普通用户执行 git 时会以文件所有者(通常是 root)的权限运行,从而可能被利用提权。
常见问题
遇到受限 shell(rbash)怎么办?
如果当前 shell 是受限的(如 rbash),需先绕过限制:
修改环境变量:
1
| export PATH=$PATH:/bin:/usr/bin
|
- 使用
BASH_CMDS 绕过:
- 命令执行后无响应?
可能需先按 q 退出帮助界面,再重新执行 sudo git -p help。
- 目标系统 Git 版本过新?
部分新版本 Git 修复了此漏洞,需尝试其他提权方法(如利用 sudo 其他命令或内核漏洞)。
总结步骤
- 检查
sudo 权限:sudo -l
- 执行
sudo git help config 或 sudo git -p help
- 在文本编辑器中触发
!/bin/bash
- 获得
root 权限后,读取敏感文件(如 /root/flag)。
安全提示
- 此方法依赖
sudo 对 git 的提权配置或 SUID 权限漏洞,需确保目标环境存在此漏洞。
- 实际操作需遵守法律法规,仅用于合法渗透测试。