0%

权限提升之令牌窃取以及无凭证欺骗

0x01 令牌窃取提权

1、令牌及伪造令牌介绍

 令牌(Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源。这些令牌将持续存在于系统中(除非系统重新启动)。
 令牌的最大特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。

  • 访问令牌(Access Token )代表访问控制操作主休的系统对象。
  • 密保令牌(Security Token )也叫作认证令牌或者硬件令牌,是一种用于实现计算机身份校验的物理设备,例如U盾。
  • 会话令牌(SessionToken)是交互会话中唯一的身份标识符。

伪造令牌攻击的核心是Kerberos协议, Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。Kerberos协议的工作机制如下图所示

kerberos工作机制
客户端请求证书的过程如下:

  1. 客户端向认证服务器发送请求,要求得到证书。
  2. 认证服务器收到请求后,将包含客户端密钥的加密证书发送给客户端。该证书包含服务器Ticket(包含由服务器密钥加密的客户机身份和一份会话密钥)和一个临时加密密钥(又称为会话密钥,Session Key)。当然,认证服务器也会向服务器发送一份该证书,使服务器能够验证登录的客户端的身份。
  3. 客户端将Ticket传送给服务器。如果服务器确认该客户端的身份,就允许它登录服务器。

客户端登录服务器后,攻击者就能通过入侵服务器来窃取客户端的令牌。

2、假冒令牌

假设已经获取到了目标机器的meterpreter Shell ,首先输入 ‘use incoginto’,然后输入‘list_tokens -u’命令,列出可用的令牌。

1
2
meterpreter > use incognito 
meterpreter > list_tokens -u

这里有两种类型的令牌:

  1. 一种是Delegation Tokens,也就是授权令牌,它支持交互式登录(例如,可以通过远程桌面登录及访问);
  2. 另一种是Impersonation Tokens,也就是模拟令牌,它支持非交互式的会话。

令牌的数量其实取决于meterprcter shell的访问级别,假设已经获得了一个系统管理员的授权令牌,如果攻击者可以伪造这个令牌,便可以拥有它的权限。

1
2
meterpreter > impersonate_token WIN7\\q    
#在incognito中调用inpersonate_token,假冒用户q进行测试,WIN7是机器名,q为用户名,中间需要\\隔开

3、Rotten Potato本地提权分析

 如果目标系统中存在有效的令牌,可以通过Rotten Potato程序快速模拟用户令牌来实现权限的提升。首先输入“use incognito”命令,然后输入“list_tokens -u”命令,列出可用的令牌。

【下载Rotten Potato】 下载完成后,RottenPotato有一个rottenpotato.exe 可执行文件。执行如下命令可以将此文件上传到目标机器然后进行提权:

1
2
3
4
5
meterpreter > use incognito 
meterpreter > list_tokens -u
meterpreter > upload /home/kali/Downloads/rottenpotato.exe
meterpreter > execute -HC -f rottenpotato.exe
meterpreter > impersonate_token "NT AUTHORITY\SYSTEM"

4、添加域管理员

在meterpreter会话中使用ps命令查找域管理进程,并使用migrate命令迁移到该进程,进入shell执行如下命令:

1
2
3
net user sec 123456Bo /ad /domain    #添加域用户
net group "domain admins" sec /ad /domain #添加到域管理员组
net group "domain admins" /domain #查看域管理员组

同样在meterpreter中可以使用incognito来模拟域管理员,然后通过迭代系统中所有可用的身份验证令牌来太添加域管理员(为测试)

1
2
3
use incognito
add_user 用户名 密码 -h 1.1.1.8
add_group_user "domain admins" 用户名 -h 1.1.1.8

5、Empire 下的令牌窃取

 在Empire 下获取服务器权限后,可以使用内置的mimikatz工具获取系统密码。运行mimikatz,输入creds可以查看empire列举出来的密码。如果我们发现曾经有域用户登录此服务器我们可以使用pth <ID> ,这里的ID就是creds下的CredID,就能完成窃取高权限身份的令牌。
 同样使用ps命令查看当前是否有域用户的进程正在运行,随后使用steal_token获取这个令牌。

获取令牌后,输入‘revtoself’命令,恢复令牌的权限。

6、针对令牌窃取提权的防御措施

  • 及时安装微软推送的补丁。
  • 对来路不明的或者有危险的软件,既不要在系统中使用,也不要在虚拟机中使用。
  • 对令牌的时效性进行限制,以防止散列值被破解后泄露有效的令牌信息。越敏感的数据,其令牌时效应该越短。如果每个操作都使用独立的令牌,就可以比较容易地定位泄露令牌的操作或环节。
  • 对于令牌,应采取加密存储及多重验证保护。
  • 使用加密链路SSL/TLS传输令牌,以防止被中间人窃听

0x02 无凭证条件下的权限获取

在本节的实验中,假设已经进入目标网络,但没有获得任何凭证,使用(链路本地多播名称解析) 和NetBIOS欺骗攻击对目标网络进行渗透测试。

1、LLMNR 和 NetBIOS欺骗攻击的基本概念

(1)、LLMNR:本地链路多播名称解析

 本地链路多播名称解析(LLMNR)是一种域名系统数据包格式。当局域网中的DNS服务器不可用时,DNS客户端会使用LLMNR解析本地网段中机器的名称,直到 DNS服务器恢复正常为止。从 Windows Vista版本开始支持LLMNR。LLMNR支持IPv6。
LLMNR的工作流程:

  1. DNS客户端在自己的内部名称缓存中查询名称。
  2. 如果没有找到,主机将向主DNS发送名称查询请求。
  3. 如果主DNS没有回应或者收到了错误的信息,主机会向备DNS发送查询请求。
  4. 如果备DNS没有回应或者收到了错误的信息,将使用LLMNR进行解析。
  5. 主机通过UDP协议向组播地址224.0.0.252的5355端口发送多播查询请求,以获取主机名所对应的P地址。查询范围仅限于本地子网。
  6. 本地子网中所有支持 LLMNR 的主机在收到查询请求后,会对比自己的主机名。如果不同,就丢弃;如果相同,就向查询主机发送包含自己IP地址的单播信息。

(2)、NetBIOS 网络协议

 NetBIOS是一种网络协议,一般用在由十几台计算机组成的局域网中(根据NetBIOS协议广播获得计算机名称,并将其解析为相应的IP地址)。在Windows NT 以后版本的所有操作系统中均可使用NetBIOS。但是,NetBIOS不支持IPv6。
NetBIOS 提供以下三种服务:

  1. NetBIOS-NS(名称服务):主要用于名称注册和解析,以启动会话和分发数据报。该服务需要使用域名服务器来注册NetBIOS 的名称,默认监听UDP137端口,也可以使用TCP137端口。
  2. Datagram Distribution Service(数据报分发服务):无连接服务。该服务负责错误检测和恢复,默认监听UDP 138端口。
  3. Session Service(会话服务):允许两台计算机建立连接,允许电子邮件跨越多个数据包进行传输,提供错误检测和恢复机制。默认使用 TCP 139端口。

(3)、Net-NTLM Hash

Net-NTLM Hash与 NTLM Hash不同。
 NTLM Hash是指Windows操作系统的Security Account Manager中保存的用户密码散列值。NTLM Hash通常保存在Windows的SAM文件或者NTDS.DIT数据库中,用于对访问资源的用户进行身份验证。
 Net-NTLM Hash是指在网络环境中经过NTLM认证的散列值。挑战/响应验证中的“响应”就包含Net-NTLM Hash。使用Responder抓取的通常就是Net-NTLM Hash。攻击者无法使用该散列值进行哈希传递攻击,只能在使用Hashcat等工具得到明文后进行横向移动攻击。

2、LLMNR 和 NetBIOS欺骗攻击分析

  假设目标网络的 DNS服务器因发生故障而无法提供服务时,会退回使用 LLMNR和 NBT-NS进行计算机名解析。下面使用Responder 工具进行渗透测试。
  Responder 是监听 LLMNR和 NBT-NS协议的工具之一,能够抓取网络中所有的 LLMNR和NBT-NS 请求并进行响应,获取最初的账户凭证。
 Responder可以利用内置SMB认证服务器、MSSQL认证服务器、HTTP认证服务器、HTTPS认证服务器、LDAP认证服务器、DNS服务器、WPAD代理服务器,以及FTP、POP3、IMAP、SMTP等服务器,收集目标网络中计算机的凭据,还可以通过Multi-Relay 功能在目标系统中执行命令。

(1) 下载并允许

Responder是使用Python语言编写的。

1
git clone https://github.com/SpiderLabs/Responder.git

(2) 进入监听模式

进入目标网络后,如果没有获取任何目标系统的相关信息和重要凭证,可以开启Responder的监听模式。Responder只会对网络中的流量进行分析,不会主动响应任何请求。

1
responder -I eth0

(3) 渗透测试

 在使用 Responder对网络进行分析之后可以利用SMB协议获取目标网络中计算机的 Net-NTLM Hash。如果用户输入了错误的计算机名在DNS服务器上进行的名称查询操作将会失败,名称解析请求将被退回,使用NBT-NS和LLMNR进行解析。
 在渗透测试中,使用Responder 开启回应请求功能,Responder会自动回应客户端的请求并声明自己就是被输人了错误计算机名的那台机器(就是伪造成错的那台计算机),然后尝试建立SMB连接。客户端项发送自已的Net-NTLM Hash进行身份验证,此时将得到目标机器的Net-NTLM Hash
【参考链接】


-------------本文结束感谢您的阅读-------------