文章总结: 本文解析了Linux攻击者通过修改/etc/passwd添加UID为0超级用户后门的手法,涵盖开启SSHroot登录及非交互式创建账户。针对应急响应,给出了排查步骤:筛选可登录账户、定位UID为0特权账户、检查家目录时间戳及分析日志。最后建议使用userdel-f清除后门账号。内容兼顾攻击原理与防御实操,具有较强的实战价值。 综合评分: 85 文章分类: 应急响应,渗透测试,实战经验
Linux后门应急-增加超级用户账号(后门账户排查与权限维持手法全解析)|linux取证分析
原创
0xSec笔记本 0xSec笔记本
0xSec笔记本
2026年3月3日 08:08 浙江
📢 免责声明
本文所述技术仅用于合法授权的安全研究、教学演示及防御机制开发。作者及发布平台不承担因读者误用、滥用本内容所导致的任何法律责任。请严格遵守《中华人民共和国网络安全法》及相关法律法规。
2.1. Linux后门应急-增加超级用户账号
2.1.1. 添加超级用户账号
2.1.1.1. 方法一:可以交互设置允许uid=0的用户远程登录
添加超级用户账号命令:
echo "test:x:0:0::/:/bin/sh" >> /etc/passwd #增加超级用户账号
passwd test #修改test的密码为123456
在默认的情况下,root不允许远程SSH密码登录!!!(配置文件默认注释了, #PermitRootLogin prohibit-password ,且没有PermitRootLogin yes)
/etc/ssh/ssh_config文件下的PermitRootLogin 配置项的选项 :
PermitRootLogin 配置项有几个可能的选项,决定了如何允许 root 用户远程登录:
PermitRootLogin yes: 允许root用户通过 SSH 登录,无论是使用密码还是密钥认证。PermitRootLogin no: 禁止root用户通过 SSH 登录,无论是密码还是密钥认证。PermitRootLogin prohibit-password: 允许root用户通过 SSH 登录,但只允许使用 SSH 密钥认证,而禁止使用密码进行登录。PermitRootLogin without-password: 同上,允许通过密钥认证但禁止密码认证(这个选项与prohibit-password等价)。PermitRootLogin forced-commands-only: 允许root用户通过 SSH 登录,但仅限于执行特定命令(例如,通过配置文件指定的特定命令),这是一个更为严格的安全设置。
通过vim在/etc/ssh/sshd_confgi中添加(PermitRootLogin yes),并重启ssh服务(systemctl restart ssh)即可成功远程登录root权限用户!!!
远程登录成功!!!
2.1.1.2. 方法二:可以交互当不允许uid=0的用户远程登录
echo "0xSec:x:1000:1000::/:/bin/sh" >> /etc/passwd #增加普通用户账号
passwd 0xSec #修改0xSec的密码为123456
2.1.1.2.1. whoami 的原理 , Linux 的真实身份判断机制
用户名 = 可读标签
UID = 真正身份
系统内部识别身份用的是:
UID(User ID)
不是字符串名字。
默认普通用户:
kali:x:1000:1000:...
而你追加了:
0xSec:x:1000:1000::/:/bin/sh
现在 /etc/passwd 里出现:
kali:x:1000:1000:...
0xSec:x:1000:1000:...
两个用户名 👉 同一个 UID=1000
whoami 实际调用的是:
getpwuid(getuid())
关键点:
返回第一个匹配 UID=1000 的条目
而 /etc/passwd 里:
kali 在前
0xSec 在后
所以返回:
kali
反之返回:
0xSec
2.1.1.3. 方法三:不交互无回显添加Linux密码
2.1.1.3.1. 第一种:
#centos系列:useradd hhh -u 0 -o -g root -G root|| echo "123456" | passwd --stdin hhh #创建账户hhh、密码123456且为root权限useradd hhh -u 0 -o -g root -G root|| echo "123456" | passwd --stdin hhh #创建账户hhh、密码123456且为root权限
#debian/ubuntu系列:useradd hhh -u 0 -o -g root -G root|| echo "hhh:123456" | chpasswduseradd hhh -u 0 -o -g root -G root|| echo "hhh:123456" | chpasswd
2.1.1.3.2. 第二种:
#centos系列:
useradd hhh02
echo "123456" | passwd --stdin hhh02
#debian/ubuntu系列:
useradd hhh02
echo "hhh02:123456" | chpasswd
2.1.1.3.3. 第三种:
对密码强队有要求
使用 -e 选项启用转义字符,使得 \n 可以正确表示换行符,passwd 需要两次输入密码。确保两次密码一致,才能成功更改密码。
useradd -u 0 -o -g root -G root hhh03 |echo -e "0xSec123456\n0xSec123456"|passwd hhh03useradd -u 0 -o -g root -G root hhh03 |echo -e "0xSec123456\n0xSec123456"|passwd hhh03
2.1.2. 应急响应
2.1.2.1. 应急第一步,查找Linux下可以远程登录的账户
- 找有登录 shell 的用户 ( 理论上 能登录系统的账号)
awk -F: '$7 !~ /nologin|false/ {print $1}' /etc/passwd
命令解释:
① -F:
指定分隔符为冒号 :
因为 /etc/passwd 是冒号分隔格式。
② $7 !~ /nologin|false/
含义:
-
$7→ 第7列(shell)
-
!~→ 不匹配正则
-
/nologin|false/→ 包含 nologin 或 false
意思是:
👉 只保留 shell 不是:
/sbin/nologin/bin/false
的用户
③ {print $1}
输出用户名。
- 排除被锁定的账号 ,以下账户就是可以远程登录的账户
awk -F: '$2 !~ /^!/ && $2 !~ /^\*/ {print $1}' /etc/shadow
命令逐段解释
$2 !~ /^!/
密码字段 不是以 ! 开头
$2 !~ /^\*/
密码字段 不是以 * 开头
&&
两个条件都要满足
2.1.2.1.1. 知识拓展1: /etc/passwd 结构 和 /etc/shadow结构
- /etc/passwd结构
每一行结构形式:
用户名:密码占位:UID:GID:描述:家目录:登录Shell
字段编号从 1 开始:
| | | | — | — | | 字段号 | 含义 | | $1 | 用户名 | | $7 | 登录 shell |
- /etc/shadow结构,字段之间用 冒号
:分隔,共 9 个字段:
用户名:加密密码:上次修改密码的日期:最小密码年龄:最大密码年龄:密码过期前警告天数:密码过期后的宽限天数:账户失效日期:保留字段
2.1.2.1.2. 知识拓展2:/etc/passwd中常见登录shell类型表
| | | | |
| — | — | — | — |
| Shell 路径 | 是否可交互登录 | 类型 | 说明 |
| /bin/bash | ✅ 可以 | 主流交互 Shell | 默认 Shell,绝大多数发行版使用 |
| /bin/sh | ✅ 可以 | 标准 Shell | POSIX 标准,通常链接到 bash 或 dash |
| /bin/zsh | ✅ 可以 | 增强型 Shell | 功能丰富,很多安全研究员常用 |
| /bin/dash | ✅ 可以 | 轻量 Shell | Debian/Ubuntu 默认 /bin/sh 指向它 |
| /bin/ksh | ✅ 可以 | Korn Shell | 企业系统常见 |
| /bin/tcsh | ✅ 可以 | C Shell 变体 | 较少见 |
| /bin/csh | ✅ 可以 | 传统 C Shell | 旧系统使用 |
| /usr/bin/fish | ✅ 可以 | 现代 Shell | 交互体验友好 |
| /sbin/nologin | ❌ 不可登录 | 禁止登录 | 系统服务账号常用 |
| /usr/sbin/nologin | ❌ 不可登录 | 禁止登录 | 某些发行版路径不同 |
| /bin/false | ❌ 不可登录 | 直接退出 | 强制拒绝登录 |
| 空字段 | ❌ 通常不可登录 | 异常 | 配置错误或特殊账号 |
2.1.2.1.3. 如何查看系统支持哪些 Shell?
cat /etc/shells
2.1.2.2. 应急第二步,查找特权账户
awk -F: '$3==0 {print$1}' /etc/passwd
发现除了 root 账户,还有账户:test、hhh、hhh03都有 root 权限,因为只有 root 账户是管理员自己创建的属于正常的,其它账户都不是他创建的属于可疑账户。
2.1.2.3. 应急第三步,排查异常账号是否登录过系统
2.1.2.3.1. 排查异常账号的创建时间
进入 /home 目录,一半创建账户之后,会在 home 目录下新建一个账户的文件夹,因此可以查看账户文件夹的的创建时间来确定账号创建时间
发现只有kali的
为什么攻击者喜欢把 home 写成 /
因为:
- 不容易被注意
- 不生成目录
- 不留明显痕迹
- 登录后直接在根目录
这其实是一个常见权限维持手法。
2.1.2.3.2. 排查异常账号的登录时间
last -i | grep pts/
发现在2.28、2.27有root、0xSec、test、hhh02、hhh、test多个可疑用户ssh登录
2.1.2.3.2.1. last关键字段解释:
| | | | | — | — | — | | 终端类型 | 含义 | 是否 SSH | | pts/x | 伪终端 | ✅ SSH / 远程 | | tty1 | 本地控制台 | ❌ 本地 | | :0 | 图形界面 | ❌ 本机 GUI | | console | 本地物理终端 | ❌ |
2.1.2.3.3. 查看ssh登录失败的信息
lastb
2.1.2.4. 应急第四步,查看root账户的历史命令
history
2.1.2.5. 应急第五步,处置后门账户
- 首先查看当前所有的账户
- 执行强制删除账户的命令
userdel -f 0xSec
userdel -f test
userdel -f hhh
userdel -f hhh02
userdel -f hhh03
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:0xSec笔记本 0xSec笔记本 0xSec笔记本《Linux后门应急-增加超级用户账号(后门账户排查与权限维持手法全解析)|linux取证分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论