权限提升
windows常用命令
# 查看本地用户
net user
# 帮助命令
net user /?
# 查看用户权限
net user <用户名>
# 添加普通用户和密码
net user <用户名> <密码> /add
# 查看本地组
net localgroup
# 添加普通用户到管理员用户组
net localgroup administrators <用户名> /add
# 添加用户到远程桌面组
net localgroup "Remote Desktop Users" <用户名> /add
# 删除用户
net user <用户名> /delLinux常用命令
学习参考
Exploit-db本地提权:https://www.exploit-db.com/?type=localWindows提权漏洞集合:https://github.com/SecWiki/windows-kernel-exploitsLinux提权漏洞集合:https://github.com/SecWiki/linux-kernel-exploitsMac-OS提权漏洞集合:https://github.com/SecWiki/macos-kernel-exploits
Windows提权
Windows 中权限主要分为四种:User Administrator System TrustedInstaller
缓冲区溢出
往缓冲区中写入超出限定长度的内容,造成缓冲区溢出,从而破坏程序的堆栈,进而运行自己精心准备的指定代码,达到攻击的目的。主要分为堆溢出和栈溢出。
内核溢出
内核溢出提权方法是利用系统本身存在的一些系统内核溢出漏洞,但未曾打相应的补丁,攻击者通过对比 systeminfo 信息中的补丁信息,来查找缺失的补丁号,通过缺失补丁号对照相应的系统版本查找对应可以提权提升的 exp
只要对应的补丁号加上对应的系统的版本的提权 exp 才可以成功,有时候如果查找到提权 exp 提权不成功,那么就可以查看是不是系统版本没对应上,且不排除一些提权漏洞利用需要相应的环境
查找补丁
手工查找
手工查找补丁情况
PowerShell 中的 SherLock 脚本
地址:https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/MyShell/Invoke-MS16-032.ps1
MSF 后渗透扫描
查询到缺失补丁后,对照相应的操作系统,查找对应的 exp
https://github.com/SecWiki/windows-kernel-exploits
https://bugs.hacking8.com/tiquan/
https://github.com/Heptagrams/Heptagram/tree/master/Windows/Elevation
https://www.exploit-db.com/
https://i.hacking8.com/tiquan/
https://github.com/AonCyberLabs/Windows-Exploit-Suggester
自动化查找
查询存在的漏洞,使用脚本
windows-exploit-suggester.py查询系统中安装的补丁程序与微软的漏洞数据库进行比较,识别可以权限提升的漏洞
使用 PowerShell 脚本
Sherlock.ps1,可以快速查找可能用于本地权限提升的漏洞
地址:https://github.com/rasta-mouse/Sherlock
Exploit-DB 漏洞库:https://github.com/offensive-security/exploitdb
earchsploit 是 Exploit-DB 的命令行工具,Kali 自带了 Exploit-DB 和 searchsploit
MSF
实验
本地提权
远程提权
CVE-2017-0146(MS17-010补丁)永恒之蓝漏洞内核溢出漏洞,XP~2008r2范围内系统存在此漏洞
可信任服务路径(TSP)漏洞
如果一个服务的可执行文件的路径没有被
双引号引起来且包含空格,那么这个服务就是有漏洞的原理:对于
C:\Program Files\Test Folder\xxx.exe文件路径中的每一个空格,windows 都会尝试寻找并执行名字与空格前的名字向匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序
所以如果我们能够上传一个适当命名的恶意可执行程序在受影响的目录,比如这里我把木马名字改了
Program.exe,放在 C 盘,一旦此服务重启,因为优先级的缘故,服务会优先选择我们木马Program.exe,那么我们的恶意程序就会以 system 权限运行查询
利用
手动上传木马
system 权限直接写入木马
MSI文件提权
注册表键 AlwaysInstallElvated
注册表键 AlwaysInstallElevated 是一个策略设置项,windows 允许低权限用户以 System 权限运行安装文件,如果启用此策略设置项,那么任何权限的用户都能以 NAAUTHORITY\SYSTE 权限来安装恶意的MSI(Microsoft Windows Installer)文件
Windows Installer 是 windows 操作系统组件之一,专门用来管理和配置软件服务,Installer 除了是一个安装程序,还用于管理软件安装、管理软件组件的添加和删除、监视文件的还原、通过回滚进行灾难恢复等
开启 Windows Installer 特权安装功能
在
win+r中输入gpedit.msc,打开组策略编辑器启用计算机配置下和用户配置下的
windows instraller的永远以高特权进行安装
查看注册表的相关选项
查看:
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer查看:
HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Installer
实验
绕过UAC提权
UAC(用户帐户控制),它是Windows的一个安全功能,它支持防止对操作系统进行未经授权的修改,UAC确保仅在管理员授权的情况下进行某些更改。
UAC 通过阻止程序执行任何涉及有关系统更改/特定任务的任务来运行。除非尝试执行这些操作的进程以管理员权限运行,否则这些操作将无法运行。如果您以管理员身份运行程序,则它将具有更多权限,因为它将被“提升权限”。
一般没有管理员权限无法进行的操作: 注册表修改、加载设备驱动程序、配置 windows update、修改系统时间(时钟)、修改用户帐户控制设置、修改受保护的目录(例如 Windows 文件夹,Program Files)、计划任务(如以管理员权限自动启动)。
MSF利用
exploit/windows/local/ask:弹出 UAC 确认窗口,点击后获得 system 权限exploit/windows/local/bypassuac:此模块将通过进程注入使用可信任发布者证书绕过 Windows UAC,它将生成关闭 UAC 标志的第二个 shellexploit/windows/local/bypassuac_injection:此模块将通过进程注入使用可信任的发布者证书绕过 Windows UAC,它将生成关闭 UAC 标志的第二个 shell
ask
使用模块:
exploit/windows/local/ask设置好参数,开始利用,此时靶机会弹出一个用户账户控制的询问框
如果对方点击“是”,那么就可以反弹一个新的 shell 提权成功
bypassuac or bypassuac_injection
使用模块:
exploit/windows/local/bypassuac注意:当前用户需要在管理员组中
CVE-2019-1388
该漏洞位于 Windows 的 UAC(User Account Control,用户帐户控制)机制中。
默认情况下,Windows 会在一个单独的桌面上显示所有的 UAC 提示(Secure Desktop)。
这些提示是由名为
consent.exe的可执行文件产生的,该可执行文件以NT AUTHORITY\SYSTEM权限运行,完整性级别为 System。因为用户可以与该 UI 交互,因此对 UI 来说紧限制是必须的。否则,低权限的用户可能可以通过 UI 操作的循环路由以 SYSTEM 权限执行操作。即使隔离状态的看似无害的 UI 特征都可能会成为引发任意控制的动作链的第一步。
事实上,UAC 会话中含有尽可能少的点击操作选项。倘若利用该漏洞,是很容易就可以提升权限到 SYSTEM。
令牌窃取
Kerberos认证
简单地说,Kerberos 提供了一种单点登录(SSO)的方法。考虑这样一个场景,在一个网络中有不同的服务器,比如,打印服务器、邮件服务器和文件服务器。这些服务器都有认证的需求。很自然的,不可能让每个服务器自己实现一套认证系统,而是提供一个中心认证服务器(AS-Authentication Server)供这些服务器使用。这样任何客户端就只需维护一个密码就能登录所有服务器。
客户端向 KDC 的 AS 服务请求开具身份证明
AS 服务认证成功后返回给客户端认证权证(TGT 黄金票据攻击需要伪造的票据)
客户端拿着 TGT 到 KDC的TGS 服务买票。
TGS 认证成功后返回给客户端服务票据(ST)
客户端拿着 ST 去访问服务。
服务向 DC 核实,返回相应的服务资源
主要应用于 Windows 2000 Server(or Later)域(Domain)环境
令牌窃取
令牌(token)是系统的临时秘钥,相当于账号和密码,用来决定是否允许这次请求和判断这次请求是属于哪一个用户的。它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源,这些令牌将持续存在于系统中,除非系统重新启动。
令牌的种类:
访问令牌(Access Token):表示访问控制操作主体的系统对象
会话令牌(Session Token):交互会话中唯一的身份标识符。
密保令牌(Security Token):又叫做认证令牌或硬件令牌,是一种计算机身份校验的物理设备,例如U盾
实验
使用普通用户登录
首先使用普通本地用户登录到一台内网机器,然后反弹 shell 到 kali 的 msf 中
使用普通域用户登录
首先使用普通域用户用户登录到一台内网机器,然后反弹 shell 到 kali 的 msf 中
使用一个本地管理员的用户登录
首先使用本地管理员登录到一台内网机器,然后反弹 shell 到 kali 的 msf 中
此时再登录下域控
现在登录下域控管理员的账号,然后回到刚才本地管理员的会话中
提权到system后
模拟令牌
增加域用户
恢复到原本的权限
CVE-2020-1472
NetLogon 远程协议是一种在 Windows 域控上使用的 RPC 接口,被用于各种与用户和机器认证相关的任务。
最常用于让用户使用 NTLM 协议登录服务器,也用于 NTP 响应认证以及更新计算机域密码。
攻击者使用 Netlogon 远程协议 (MS-NRPC) 建立与域控制器连接的 Netlogon 安全通道时,存在特权提升漏洞。
当成功利用此漏洞时,攻击者可无需通过身份验证,在网络中的设备上运行经特殊设计的应用程序,获取域控制器的管理员权限。
Linux提权
脏牛提权(CVE-2016-5195)
这个名叫 Dirty COW,也就是脏牛的漏洞,存在 Linux 内核中已经有长达9年的时间,也就说2007年发布的 Linux 内核版本中就已经存在此漏洞。Linux kernel 团队已经对此进行了修复。
该漏洞具体为,Linux 内核的内存子系统在处理写入时复制(copy-on-write, COW)时产生了竞争条件(racecondition)。
恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。
利用这一漏洞,攻击者可在其目标系统提升权限,甚至可能获得 root 权限。
实验
假设拿到 ssh 的登录账户和密码,但是权限是一个普通用户
Ubuntu内核提权(CVE-2021-3493)
Ubuntu 内核 OverlayFS 权限逃逸(CVE-2021-3493)
根据官方介绍,OverlayFs 漏洞允许 Ubuntu 下的本地用户获得 root 权限
这个漏洞是 Ubuntu 系统中的特定问题,在该问题中,未正确验证关于用户 namespace 文件系统功能的应用程序
由于 Ubuntu 附带了一个允许非特权的 Overlayfs 挂载的补丁,结合这个补丁挂载 Overlayfs 可以权限逃逸,达到权限提升的目的
映像版本:Ubuntu 20.10、Ubuntu 20.04 LTS、Ubuntu 18.04 LTS、Ubuntu 16.04 LTS、Ubuntu 14.04 ESM
实验
假设拿到 ssh 的登录账户和密码,但是权限是一个普通用户
sudo溢出提权(CVE-2021-3156)
sudo 是 linux 系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如 halt、reboot、su 等等。这样不仅减少了 root 用户的登录 和管理时间,同样也提高了安全性,sudo 不是对 shell 的一个代替,它是面向每个命令的
2021年01月26日,sudo 被披露存在一个基于堆的缓冲区溢出漏洞(CVE-2021-3156,该漏洞被命名为“Baron Samedit”),可导致本地权限提升
当在类 Unix 的操作系统上执行命令时,非 root 用户可以使用 sudo 命令来以 root 用户身份执行命令。由于 sudo 错误地在参数中转义了反斜杠导致堆缓冲区溢出,从而允许任何本地用户(无论是否在 sudoers 文件中)获得 root 权限,无需进行身份验证,且攻击者不需要知道用户密码
在 5.1.17 之前的 Linux 内核中,kernel / ptrace.c 中的 ptrace_link 错误地处理了想要创建 ptrace 关系的进程的凭据记录,这允许本地用户通过利用父子的某些方案来获取 root 访问权限 进程关系,父进程删除权限并调用 execve 可能允许攻击者控制。
Linux 执行 PTRACE_TRACEME 函数时,ptrace_link 函数将获得对父进程凭据的 RCU 引用,然后将该指针指向 get_cred 函数,但是,对象 struct cred 的生存周期规则不允许无条件的将RCU引用转换为稳定引用。PTRACE_TRACEME 获取父进程的凭证,使其能够像父进程一样执行父进程能够执行的各种操作,如果恶意低权限子进程使用 PTRACE_TRACEME 并且该子进程的父进程具有高权限,该子进程可获取其父进程的控制权并且使用其父进程的权限调用 execve 函数创建一个新的高权限进程。
该漏洞利用前提:需要目标服务器有桌面环境,所以较为鸡肋的漏洞
查看sudo的版本
在终端输入 sudo --version 查看 sudo 版本,使用 whoami 查看当前用户
上传利用文件
数据库提权
Mssql弱口令提权
UDF提权
UDF(User Defined Function)用户自定义函数,是 mysql 的一个拓展接口。
用户可以通过自定义函数实现在 mysql 中无法方便实现的功能,其添加的新函数都可以在 sql 语句中调用,就像调用本机函数一样。
UDF 可以理解为 MySQL 的函数库,可以利用 UDF 定义创建函数(其中包括了执行系统命令的函数)
提权条件:
mysql 中支持 UDF 扩展 ,使得我们可以调用 DLL 里面的函数来实现一些特殊的功能
掌握 mysql 数据库的账户,从拥有对 mysql 的 insert 和 delete 权限,以创建和删除函数
拥有可以将 udf.dll 写入相应目录的权限
实验
发现上传的木马,发现只有普通用户的执行权限
环境:给 apache 服务降权
将 phpstudy 中的服务变为系统服务
将 apache 降权为普通用户
将 apache 用户赋予 phpstudy 目录的读写权限
开机启动项提权
利用 Mysql 写入自启文件
开机启动项提权原理:利用 mysql,将后门写入开机自启动项。同时因为是开机自启动,写入之后,需要重启目标服务器
这个要求 mysql 的权限较高,至少是管理员权限甚至是 system,可以利用一些漏洞尝试打蓝屏重启
windows 的开机启动地址:
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
创建表-插入数据
写入开机自启文件
查看开机自启文件
查看开机启动文件
开机启动,发现 hacker 账户已经增加成功
MOF提权
MySQL之MOF提权
MOF 文件是 MySQL 数据库的扩展文件(在 c:/windows/system32/wbem/mof/nullevt.mof)叫做”托管对象格式”,其作用是每隔五秒就会去监控进程创建和死亡,因为MOF文件每五秒就会执行,且是系统权限,所以如果我们有权限替换原有的MOF文件,就能获得 system 权限
利用条件:
Windows<=2003(虽然很久远了,但教科级案例)
mysql 在 c:/windows/system32/mof 目录有写权限
已知数据库账号密码
再上传一个 mof 将它加到 administrators 组
再上传一个 mof 将它加到 administrators 组
PostgreSQL提权
CVE-2019-9193 漏洞
第三方软件提权
Shiro 权限绕过漏洞复现(CVE-2020-1957)
Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)
CVE-2019-0708 RDP 终极 EXP 爆破
CVE-2019-0708 是微软于 2019年05月14日 发布的一个严重的 RDP 远程代码执行漏洞
该漏洞无需身份认证和用户交互,可能形成蠕虫爆发,影响堪比 wannycry
2019年09月07日,@rapid7 在其 metasploit-framework 仓库公开发布了 CVE-2019-0708 的利用模块,漏洞利用工具已经开始扩散,已经构成了蠕虫级的攻击威胁
Last updated