Linux后门应急-增加超级用户账号(后门账户排查与权限维持手法全解析)|linux取证分析

admin 2026-03-18 00:33:14 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文解析了Linux攻击者通过修改/etc/passwd添加UID为0超级用户后门的手法,涵盖开启SSHroot登录及非交互式创建账户。针对应急响应,给出了排查步骤:筛选可登录账户、定位UID为0特权账户、检查家目录时间戳及分析日志。最后建议使用userdel-f清除后门账号。内容兼顾攻击原理与防御实操,具有较强的实战价值。 综合评分: 85 文章分类: 应急响应,渗透测试,实战经验


cover_image

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下可以远程登录的账户

  1. 找有登录 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}

输出用户名。


  1. 排除被锁定的账号 ,以下账户就是可以远程登录的账户
awk -F: '$2 !~ /^!/ && $2 !~ /^\*/ {print $1}' /etc/shadow

命令逐段解释

$2 !~ /^!/

密码字段 不是以 ! 开头


$2 !~ /^\*/

密码字段 不是以 * 开头


&&

两个条件都要满足


2.1.2.1.1. 知识拓展1: /etc/passwd 结构  和 /etc/shadow结构
  1. /etc/passwd结构

每一行结构形式:

用户名:密码占位:UID:GID:描述:家目录:登录Shell

字段编号从 1 开始:

| | | | — | — | | 字段号 | 含义 | | $1 | 用户名 | | $7 | 登录 shell |

  1. /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. 应急第五步,处置后门账户

  1. 首先查看当前所有的账户

  1. 执行强制删除账户的命令
userdel -f 0xSec
userdel -f test
userdel -f hhh
userdel -f hhh02
userdel -f hhh03

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:0xSec笔记本 0xSec笔记本 0xSec笔记本《Linux后门应急-增加超级用户账号(后门账户排查与权限维持手法全解析)|linux取证分析》

    AI资讯日报|3月3日 网络安全文章

    AI资讯日报|3月3日

    文章总结: 本文汇总了2026年3月3日AI行业核心动态,涵盖DeepSeekV4发布预告及其国产芯片适配进展、Claude全球服务中断事件、阿里千问AI眼镜亮
    寻能源行业的师傅 网络安全文章

    寻能源行业的师傅

    文章总结: 本文是一则简短的社交联络启事,作者钟毓安全旨在寻找能源行业专业人士进行私下交流。文中未包含技术分析或安全建设内容,仅表达了建立行业联系的诉求并提供联
    评论:0   参与:  0