### 查看服务器是否存在隐藏账号、克隆账号

Windows 服务器排查

攻击者在 Windows 上克隆或隐藏账户通常利用注册表和用户 SID（安全标识符）的特性。

1. 排查克隆账户

克隆账户是指攻击者创建一个新的用户，然后修改注册表，使其拥有与某个高权限账户（如管理员）完全相同的 SID 和权限，但名字可能正常或看似无害

- 使用 `wmic` 命令检查 使用 `wmic useraccount` 命令可以列出所有用户及其 SID。你需要重点检查以下情况：

  1. SID 异常：正常用户的 SID 最后一位通常是 1000 以上的递增数字
  2. 用户与 SID 不匹配：特别是那些用户名看起来正常，但 SID 和其他用户（如管理员）完全相同的账户

      wmic useraccount get name,sid

  正常情况下，一个用户对应一个唯一的 SID。如果发现两个用户拥有相同的 SID，则很可能存在克隆账户

- 检查本地用户和组 虽然在 `lusrmgr.msc` 中通常能看到克隆账户，但有时候攻击者会用一些技巧隐藏，所以结合 `wmic` 检查更保险。

2. 排查隐藏账户

攻击者会通过修改注册表来隐藏账户，使其在 `net user` 或 `lusrmgr.msc` 中不显示

- 检查注册表

  1. 打开注册表编辑器：`regedit`

  2. 导航到：`HKEY_LOCAL_MACHINE\SAM\SAM`

  3. 你需要 SYSTEM 权限才能访问这个路径。可以通过 `psexec` 获取一个 SYSTEM 权限的 `cmd` 来进行查看：

         psexec -s -i cmd

  4. 在 SYSTEM 权限的 `cmd` 中再次打开 `regedit`，导航到该路径

  5. 你会在 `SAM\Domains\Account\Users\Names` 下看到所有账户名

  6. 在 `SAM\Domains\Account\Users` 下，每个子项代表一个账户，其名称是十六进制的 RVA（相对虚拟地址）

  7. 对比 `Users\Names` 和 `Users` 下的键值。 如果 `Users` 下存在某个键值（账户）但在 `Users\Names` 下没有对应的名称，那么这个账户就是隐藏账户

- 日志审计 结合 安全日志（事件 ID 4720）进行排查，即使账户被隐藏，其创建记录也可能被保留

Linux 服务器排查

在 Linux 上，隐藏账户通常是利用系统文件的特性，而克隆账户则相对少见，但可以通过其他方式实现权限提升

1. 排查隐藏账户

攻击者通常通过修改 `/etc/passwd` 和 `/etc/shadow` 文件，删除用户名，但保留账户的其他信息，或者创建没有名称的账户

- 检查 `/etc/passwd` 文件

  1. 查找没有用户名的账户：

         grep -v '^[a-zA-Z]' /etc/passwd

     这个命令会过滤掉所有以字母开头的行，如果输出结果有非空的行，可能存在隐藏账户

  2. 查找空用户名账户：

         cat /etc/passwd | awk -F: '($1 == "") { print }'

     这种方法可以查找用户名为空的账户

  3. 检查 UID 为 0 的账户：

         awk -F: '($3 == 0) { print }' /etc/passwd

     UID 为 0 的账户拥有 root 权限。理论上只有一个 root 账户的 UID 为 0，如果出现多个，则很可能是克隆账户

2. 检查克隆账户

Linux 上的克隆账户通常是指多个账户拥有相同的 UID，从而共享相同的权限

- 检查相同 UID 的账户 使用 `awk` 命令查找 UID 重复的账户，这通常是克隆 root 权限账户的迹象

      awk -F: '{print $3}' /etc/passwd | sort | uniq -d

  这个命令会找出 `/etc/passwd` 文件中所有重复的 UID。如果输出结果有 0，说明存在多个 UID 为 0 的账户。然后，你可以用 `grep` 查找这些 UID 对应的用户名

      grep ":0:" /etc/passwd

3. 检查 SSH 授权文件

攻击者也可能通过在 `.ssh/authorized_keys` 中添加公钥来持久化，从而无需密码即可登录

- 检查所有用户的 `.ssh` 目录

      find /home -name "authorized_keys"

  找到文件后，检查其内容，看是否有不认识的公钥