PTH
0x00:简介
PTH(pass-the-hash) 哈希传递
pass-the-hash在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。
0x01:原理
我们可以想象一下,如何做一次尽可能保证安全的认证,首先,肯定不能直接使用明文密码进行认证,因为可能被窃听,那我们肯定得使用加密的密文。但是密文也是不能直接传递的,因为有被破解碰撞的风险,那如何解决这个问题呢,微软巧妙的使用NTLM身份认证解决了这个问题。
- 在Windows系统中,通常会使用NTLM身份认证
- NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)
- hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash
- 如果攻击者获得了hash,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程)
这类攻击适用于:
- 域/工作组环境
- 可以获得hash,但是条件不允许对hash爆破
- 内网中存在和当前机器相同的密码
微软也对pth打过补丁,然而在测试中发现,在打了补丁后,常规的Pass The Hash已经无法成功,唯独默认的Administrator(SID 500)账号例外,利用这个账号仍可以进行Pass The Hash远程ipc连接。
如果禁用了ntlm认证,PsExec无法利用获得的ntlm hash进行远程连接,但是使用mimikatz还是可以攻击成功。即使用AES密钥串。
从windows到windows横向pth这一类攻击方法比较广泛
0x02:mimikatz
mimikatz的pth功能需要本地管理员权限,这是由它的实现机制决定的,需要先获得高权限进程lsass.exe的信息
对于8.1/2012r2,安装补丁kb2871997的Win 7/2008r2/8/2012,可以使用AES keys代替NT hash
使用mimikatz先获取hash:
privilege::debug
sekurlsa::logonpasswords
得到hash后
输入命令:
sekurlsa::pth /user:administrator /domain:pureqh /ntlm:579da618cfbfa85247acf1f800a280a4
可以看到NTML hash已经对pureqh使用,这样的话访问远程主机或服务,就不用提供明文密码,注意,只有在mimikatz弹出的cmd可以无需密码与目标主机建立连接。右下方的cmd则是新打开的cmd,需要密码认证。
后续可以使用copy命令将本地文件copy至目标机器,并设置定时任务,执行添加账户或者执行远控等操作。
到这里pass the hash成功~ 由于net 是windows原生的命令,所以无法执行其他command,这里我们可以使用wmiexec来PTH攻击。
0x03:wmiexec
windows 管理规范[WMI]”,实际上就是windows从03/xp开始就一直内置的一个系统插件,其设计初衷之一是为了管理员能更加方便的对远程windows主机进行各种日常管理,此处我们不妨先来简单来试着想一下,对windows的远程管理到底意味着什么,没错,它意味着我们可以直接在本地操作远程目标机器上的进程,服务,注册表等其它的一系列的特权操作,严格来说它其实是为各种服务提供一个统一的调用接口而设计的,比如,你想操作什么服务就去调用对应的服务类中的方法去执行你的操作就行,不过,单对于内网横向移动来讲,我们可以暂时先不用把它理解的 非常细致,毕竟不是在专门做针对性的防御产品,也正是由于此功效,在正常的管理员的眼里 wmi 可能确实是一把远程管理的好手,但在渗透者眼中,它也同样是一把在目标内网进行横向移动的非常趁手的武器.
https://github.com/Kevin-Robertson/Invoke-TheHash
Import-Module .\Invoke-TheHash.psd1
Invoke-WMIExec -Target 192.168.1.1 -Domain pureqh -Username pureqh -Hash 579da618cfbfa85247acf1f800a280a4 -Command "calc.exe" -verbose
查看192.168.1.1机器,发现calc.exe进程已经启动
另外还有Invoke-SMB等脚本都可以进行利用,利用方法也差不多一样:普通域用户cmd权限即可启动目标机system权限。
Invoke-SMBExec -Target 192.168.1.1 -Domain pureqh -Username pureqh -Hash 579da618cfbfa85247acf1f800a280a4 -Command "calc.exe" -verbose
通过在目标主机创建服务执行命令,所以权限为system
Invoke-SMBClient
支持SMB1, SMB2 (2.1), and SMB signing,如果只有SMB文件共享的权限,没有远程执行权限,可以使用该脚本。
支持的功能包括列举目录、上传文件、下载文件、删除文件(具体权限取决于该口令hash的权限)
第二种:
wmiexec.py 脚本地址: https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py
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:579da618cfbfa85247acf1f800a280a4 pureqh/pureqh@192.168.1.1 "whoami /all"
wmiexec.py的hash参数格式为 LM Hash:NT Hash ,由于该Hash来自于Server 2008,系统默认不支持LM hash,所以LM hash可以设定为任意值