提权是很重要的一个环境。我们最常见的 dump hash 操作就需要足够的权限才能够执行
Winodows 中权限大概有 4 种:
- 普通用户
- Administrator。管理员权限。可以利用 Windows 的机制将自己提升为 System 权限。能够修改防火墙规则,修改注册表等操作
- System。系统权限。可以对 SAM 等敏感文件进行读取
- TrustedInstaller 。Windows 最高权限。唯一可以修改系统文件的用户
常见的提权方法有:
- 内核溢出漏洞
- 数据库提权
- 系统配置提权
- 组策略首选项提权
- DLL 劫持提权
- Web 中间件漏洞提权
系统内核提权
对于系统内核提权,我们可以使用 msf 上线。使用 post/windows/gather/enum_patches 模块,查看目标机器安装的补丁。根据漏洞编号快速找出当前系统缺少的补丁,然后就查找 msf 拥有的利用补丁进行提权
系统配置提权
系统配置提权依靠 Windows 中的一些权限配置错误,服务特性
服务权限配置错误提权
系统服务权限配置错误。我们会遇到两种情况:
- 服务未运行:攻击者可以替换原来的服务然后重启服务
- 服务正在运行且无法终止:这时候考虑 DLL 劫持技术
使用 PowerUp 脚本可以帮助我们分析能够提升权限的服务
powershell -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"
然后也可以尝试用 msf 的 exploit/windows/local/service_permissions 模块。如果设置 AGGRESSIVE 选项,会尝试每一个可能能够提权的漏洞对应的服务。(提权效果还是不错的)
该模块通过两种方法来获得 System 权限:如果提供给模块的 session 是管理员权限,那么它将尝试创建一个新的服务。如果当前权限不允许创建服务,该模块会判断哪些服务的文件或者文件夹权限有问题,然后进行劫持。该模块还会创建一个可执行程序,文件名和安装路径都是随机的
AlwaysInstallElevated 特性提权
注册键 AlwaysInstallElevated 也可以给我们打开提权的思路。这是注册表的一个策略选择设置项。Windows 允许低权限用户以 System 权限运行安装文件。如果启用此策略设置项,那么任何权限的用户都能以 Nt Authority\System 权限来安装恶意的 MSI (Microsoft Windows Installer)文件。如果我们有管理员用户权限的话,就可以设置该选项,然后很快速的提权的 System
启动 AlwaysInstallElevated 命令
reg add HKLM\Software\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1 /f
关闭 AlwaysInstallElevated 命令
reg add HKLM\Software\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 0 /f
然后使用 msf 的 exploit/windows/local/always_install_elevated 模块
可信任服务路径漏洞
这个漏洞利用了 Windows 文件路径解析的特性,利用了可执行文件/文件夹的权限。如果一个服务调用的可执行文件没有正确地处理所引用的完整路径名,这个漏洞就会被攻击者用来上传任意可执行文件。即服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的
检测目标机器是否存在漏洞
- 查看是否有 没有被引号引起来且包括空格的服务路径
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """
如果有幸找到这些路径,可以用 Windows 自带的命令 icacls 命令判断权限。
当然可以直接用 msf 中的 exploit/windows/local/unquoted_service_path 模块进行测试
配置文件读取敏感信息
我们也可以通过翻找配置安装文件,获取敏感信息,如管理员账号密码,服务账号密码等
我们可以通过查找机器上面配置文件,可能存在一些密码账号信息。
在 msf 可以使用 post/windows/gather/enum_unattend 模块进行测试
UAC 绕过提权
绕过 UAC
在权限不够时,访问系统磁盘的根目录、Windows 目录、Program Files 目录以及读写数据库程序等操作都需要经过 UAC ( User Account Control,用户控制 ) 的认证才能进行。
我们可以找一些以高权限运行的,但是并没有 uac 提示的进程,然后利用ProcessMonitor 寻找他启动调用却缺失的如dll、注册表键值,然后我们添加对应的值达到 bypass uac 的效果。
也可以使用 msf 的 windows/local/bypassuac_sluihijack 模块进行提权
提权效果还是不错的
当然啦,可以直接在 msf search bypassuac 查看其他的模块,都可以尝试一下
想要防御 UAC 绕过提权最好的办法就是不让内网机器的使用者拥有本地管理员权限。
令牌窃取
用 msf 首先在 session 中输入下列的命令加载插件
use incognito
列出可用的令牌
list_tokens -u
如果找到了你想要的令牌,比如管理员的,你可以输入
impersonate_token 主机名\\用户
然后你就可以在 shell 中伪造成为这个用户了
如果没有凭证还可以考虑用 LLMNR 和 NetBIOS 欺骗攻击
LLMNR(本地链路多播名称解析)。当局域网中的 DNS 服务器不可用的时候,DNS 客户端会使用 LLMNR 解析本地网段的机器名称
NetBIOS 是一种网络协议,通过该协议可以广播获取计算机名称
Net-NTML 是跳转/响应验证中的 “响应” ,也就是拿 NTML 散列值加密 challenge 获得的东西,不能够直接利用,需要用 hashcat 等工具获得明文后才能用于哈希传递攻击。用 Responder 抓取的通常就是 Net-NTML