权限提升

部分内容由 the-fogarrow-up-right 提供,仅做部分内容排版修改


免责声明

本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.


大纲

  • Win

  • Linux

  • Mysql

  • MSSQL

  • PostgreSQL

  • Redis


多平台提权辅助工具


Win

相关案例

提权漏洞

  • OS-Exploits

管理员权限提权成 system

相关文章

windows 自带功能

SC 命令

该命令在 xp 系统可以正常使用, win7 和 winsrv2008 下需要点击查看信息, win8 以上不支持

进入命令行界面后,可以输入 explorer.exe 打开系统桌面,路径为 C:\Windows\system32\config\systemprofile\Desktop

在此种环境下打开的任何程序都具有 system 权限

计划任务

  • at 命令

    适用于 win7 和 winsrv2008

  • schtasks 命令

    • 创建服务, 以 system 权限启动

    • 查看服务状态

      有时候会报错 错误: 无法加载列资源, 这是由于 cmd 编码是 gbk 导致的, 调整为美国编码 (此时无法打印非 ascii 字符) 即可:

    • 删除服务

    支持 win7-win10, 借助工具才能看到

使用 psexec 会创建 PSEXESVC 服务

默认情况下, system 权限的进程不会在用户桌面显示, 如果不想显示进程界面, 可以去掉 -i 参数; 第一次使用 psexec.exe 需要确认, 使用 -accepteula 参数无需确认

如果系统不自带,下载地址为: https://download.sysinternals.com/files/PSTools.zip

官方文档: https://docs.microsoft.com/zh-cn/sysinternals/downloads/psexec

命名管道

这里借鉴了 Meterpreter 的方法:

  1. 创建 system 权限的服务, 提供一个命名管道

  2. 创建进程, 连接到该命名管道

使用 github 上的开源代码

  • https://github.com/xpn/getsystem-offline

下载下来之后编译成 getsystem-offline.exe 和 getsystem_service.exe; 依次在命令行运行 getsystem_service.exe 和 getsystem-offline.exe 即可 (测试机上需安装 .net4.0)

利用 msi 安装文件获得System权限

msi格式的介绍

  • http://sc.openoffice.org/compdocfileformat.pdf

msiexec

系统进程, 是 Windows Installer 的一部分, 用于安装 Windows update 更新和 Windows Installer 安装包, 后者即上面提到的 .msi 格式的安装包; 在命令行下运行 msiexec, 即可看到帮助文档

我们平时双击打开一个 .msi 文件,相当于在命令行下执行了如下命令

隐藏界面安装

远程加载安装

Advanced Installer

Advanced Installer 是一个 Windows Installer 的 MSI 安装包的制作工具, 下载地址: https://www.advancedinstaller.com/download.html

利用 AlwaysInstallElevated 提权

利用组策略可以实现权限提升, 开启 AlwaysInstallElevated 特权安装功能

  1. 打开组策略编辑器 (win+r,gpedit.msc)

  2. 用户配置 -> 管理模板 ->Windows 组件 ->Windows Installer-> 永远以高特权进行安装 -> 选择启用

  3. 计算机配置 -> 管理模板 ->Windows 组件 ->Windows Installer-> 永远以高特权进行安装 -> 选择启用

其实就是修改了两处注册表,命令行下进行上述操作

使用 msf 生成 msi

本地版本

输入 shell 命令进入目标主机 cmd 下使用命令行工具 Msiexec 进行安装,具体命令如下

运行后,此时在 C:\Windows\Installer 会生成 temp 和 msi 临时文件,安装结束后会自动删除;如果使用的是命令行隐藏安装,则会保留tmp文件;不管怎么都会在 %TEMP% 目录下生成对应的log文件

wix3

下载地址: https://github.com/wixtoolset/wix3/releases/

msigen.wix 代码下载地址: https://gist.github.com/xpn/d1ef20dfd266053227d3e992ae84c64e

由于上述文件中的 payload 如今已不免杀, 所以我将其替换成如下 payload:

完整代码如下:

编译命令:

直接双击执行 msigen.msi 会弹框,启动的 calc.exe 为 system 权限

命令行下执行:

启动的 calc.exe 为 high 权限

利用 token 复制获得 System 权限

简介

Windows 有两种类型的 Token

  1. Delegation token(授权令牌): 用于交互会话登录 (例如本地用户直接登录、远程桌面登录)

  2. Impersonation token(模拟令牌): 用于非交互登录 (利用 net use 访问共享文件夹)

注: 两种 token 只在系统重启后清除, 具有 Delegation token 的用户在注销后, 该 Token 将变成 Impersonation token, 依旧有效

incognito

下载地址: https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip

列举 token

提权至 system

切换到 A 用户

伪造用户

metasploit 版

首先回弹一个 meterpreter 的 shell 回来

加载 incognito

列举 token

查看当前用户

提权至 system 权限

指定用户 token 窃取

指定进程号窃取

返回之前 token

powershell 版

NtObjectManager

安装模块

提权

卸载模块

psgetsystem

C++ 实现

代码地址: https://gist.github.com/xpn/a057a26ec81e736518ee50848b9c2cd6

下载下来之后, 用 vs2019 打开, 文件 -> 从现有代码构建项目 ->Visual C++-> 下一步 -> 选择文件夹, 填写项目名 -> 完成

添加头文件

编译即可

找对应进程的 pid

提权成 system

提权成 trustedinstaller 组用户

描述

在 Windows 系统中,即使获得了管理员权限和 system 权限,也不能修改系统文件

因为 Windows 系统的最高权限为 TrustedInstaller

相关文章

查看 trustedinstaller 用户

利用TrustedInstaller.exe的token

使用 TrustedInstaller.exe 的 token 创建子进程,这样子进程就有了 TrustedInstaller 权限

powershell 版

先安装 Set-NtTokenPrivilege 命令

https://www.powershellgallery.com/packages/NtObjectManager/1.1.1

使用 whoami 查看当前 cmd 权限:

metasploit 版

首先回弹一个 meterpreter 的 shell 回来

加载 incognito

提权至 system 权限

启动 trustedinstaller 服务

找到进程对应的 pid

窃取 token

验证是否提权成功

SelectMyParent

  • https://github.com/3gstudent/From-System-authority-to-Medium-authority/blob/master/SelectMyParent.cpp

Invoke-TokenManipulation.ps1

  • https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Invoke-TokenManipulation.ps1

降权

描述

降权通常是指从system权限降到普通用户权限,往往是为了操作当前用户的文件内容(如捕获桌面、操作注册表等)

相关文章

为什么要降权

  • 无法获得当前用户的文件内容

  • 环境变量存在差异

    • system权限下,查询到的环境变量APPDATA为C:\Windows\system32\config\systemprofile\AppData\Roaming

    • 管理员权限下,查询到的环境变量APPDATA为C:\Users\a\AppData\Roaming

  • 注册表存在差异

管理员权限降到普通用户权限

runas

这个需要手动输入密码

通过配合 sanur 可以通过管道的方法将密码或者文件中的内容传递给 runas 程序

lsrunas

  • http://www.verydoc.com/exeshell.html

CPAU

  • https://github.com/3gstudent/From-System-authority-to-Medium-authority/blob/master/CPAU.exe

powershell

system权限降到普通用户权限

SelectMyParent

  • https://github.com/3gstudent/From-System-authority-to-Medium-authority/blob/master/SelectMyParent.cpp


Linux

常规提权

  • 参考 OS-Exploits 中的 linux 漏洞部分

Restricted Bash 绕过

  • 什么是 Restricted Bash

    Restricted Bash(rbash) 又叫做 Restricted Shell,顾名思义就是受限制的 shell。Linux 的 shell 功能强大,以至于整个 Linux 系统可以精准的使用 shell 来控制。在 Linux 不同用户之间,当你执行的一个系统命令时,它可能是危险的不可逆命令,为不同用户之间设定不同权限进行安全管理引入了限制 Bash Shell,防止一些非必要权限用户执行有害系统的高危命令。

    再比如一台 Linux 系统服务器中采用多用户管理,部分用户没有 sudo 权限,但是这些用户可以查看系统目录中大部分内容,虽然没有权限进行编辑但是不希望这些用户查看这些目录,这时可以通过 rbash 在不调整系统上每个文件夹权限的情况下通过限制用户输入某些命令来限制用户随意查看。

    简单来说 rbash 与 shell 的区别就是限制一些行为,让一些命令无法执行。

  • rbash 绕过方法

    • 参考 linux安全 中的 LOL 技巧


Mysql

  • Mysql提权


MSSQL

  • MSSQL提权


PostgreSQL

  • PostgreSQL提权


Redis

  • Redis


Oracle

  • Oracle


Docker

  • Docker


Kubernetes

  • Kubernetes