以下是一些常见的 Windows 提权方法:
### 系统内核溢出漏洞提权
- **原理**:利用 Windows 系统本身存在的内核溢出漏洞,这些漏洞可能是由于程序在处理输入数据时没有正确边界检查,导致缓冲区溢出,使得攻击者可以覆盖关键的内存区域,如函数返回地址等,从而执行恶意代码来提升权限。
- **操作示例**:
- 手工查找补丁情况,通过命令如`systeminfo`查看系统信息,`wmic qfe get caption,description,hotfixid,installedon`获取补丁详细信息,然后到相关漏洞查询网站(如[https://github.com/ianxtianxt/win-exp-](https://github.com/ianxtianxt/win-exp-)、[https://github.com/secwiki/windows-kernel-exploits](https://github.com/secwiki/windows-kernel-exploits)),根据未打补丁的漏洞信息查找相应的提权 exploit 进行利用。
- 使用 Metasploit 等工具,如`post/windows/gather/enum_patches`进行后渗透扫描,以发现可利用的内核漏洞并尝试提权。
### 数据库提权
- **以 MySQL UDF 提权为例**:
- **原理**:MySQL 允许用户创建自定义函数(UDF),黑客在获取到数据库的 root 用户权限后,利用这一特性,将包含恶意代码的 DLL 文件上传到 MySQL 的 plugin 目录下,创建自定义函数来执行系统命令,从而实现提权。
- **提权条件**:必须是 root 权限;`secure_file_priv`为空(即没有限制文件导入导出的路径);能够将 udf.dll 文件上传到指定目录。
- **操作步骤**:例如在 MySQL 5.5.29 版本中,查看`secure_file_priv`的值,若为空,使用`select 'xxx' into dumpfile '创建文件夹路径'`创建文件夹(如`c:\\phpstudy_pro\\extensions\\mysql5.5.29\\lib::$index_allocation`和`c:\\phpstudy_pro\\extensions\\mysql5.5.29\\lib\\plugin::$index_allocation`),虽然语句会报错,但文件夹会成功创建。利用 msf 的`exploit/multi/mysql/mysql_udf_payload`生成一个 DLL 的 payload,上传到`\lib\plugin`目录下,执行`select 生成的 payload 内容 into dumpfile 'c:\\phpstudy_pro\\extensions\\mysql5.5.29\\lib\\plugin\\udf.dll'`,定义别名`create function sys_eval returns string soname 'udf.dll'`,最后通过`select sys_eval('whoami')`执行命令,若输出为 system 用户,则提权成功。
### 错误的系统配置提权
- **系统服务权限配置错误提权**:
- **原理**:Windows 系统启动时会伴随一些高权限服务启动,如果某些服务存在漏洞,攻击者就可以借助这些服务进行权限劫持。常见的实现方法有使用 powershell 中的 powerup 脚本([https://github.com/powershellmafia/powersploit/blob/master/privesc/powerup.ps1](https://github.com/powershellmafia/powersploit/blob/master/privesc/powerup.ps1)),或者在 Metasploit 中使用攻击模块(需提前获取一个 session),如`exploit/windows/local/service_permissions`。
- **示例**:假设发现某个服务存在权限配置错误,如“insprosvc”服务具有`service_change_config`的权限,那么可以使用命令`sc config insprosvc binpath="cmd.exe /k c:\users\public\reverse_tcp.exe"`(指定服务的二进制文件路径,`=`后要有空格)将该服务启动时执行的二进制文件替换成预先上传的攻击载荷,然后通过`sc stop insprosvc`和`sc start insprosvc`重启服务,当服务重启时,攻击载荷(reverse_tcp)就会继承系统权限。
- **可信任服务路径漏洞提权**:
- **原理**:如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就存在漏洞。攻击者可以利用这一漏洞,将恶意程序放置在该服务路径下的可执行文件位置,当服务启动时,会执行恶意程序,从而获得系统权限。
- **操作示例**:使用`wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "c:\windows\\" | findstr /i /v """`命令寻找存在漏洞的服务。例如,发现某个服务路径可写,如“xxservice”服务的路径为“c:\program\xx\xx.exe”,且该路径存在可信任服务路径漏洞,那么可以将同名的攻击载荷上传到该路径,覆盖原来的可执行文件。当服务下次启动时,就会执行攻击载荷,实现提权。
- **计划任务提权**:
- **原理**:如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序,这样在下次计划执行时,就会以高权限来运行恶意程序。
- **示例**:使用`schtasks /query /fo list /v`查看计算机的计划任务,通过`accesschk.exe -d -q -v "d:\test"`查看指定目录(如计划任务所在目录)的权限配置情况。假设发现“d:\test”目录下的某个计划任务对应的程序文件可写,并且该计划任务是以高权限运行的,那么攻击者可以将恶意程序覆盖原来的程序文件,等待计划任务执行时,恶意程序就会以高权限运行,从而实现提权。
### 组策略首选项提权
- **原理**:组策略首选项(Group Policy Preferences, GPP)存在一些配置不当的情况,可能导致敏感信息泄露或权限提升。攻击者可以利用这些问题来获取更高的权限。
- **操作方法**:可以使用 powershell 脚本获取,如`Get-GPPPassword.ps1`,也可以在 Metasploit 中使用`post/windows/gather/credentials/gpp`模块,或者在 Empire 中使用`usemodule privesc/gpp`。
### Web 中间件漏洞提权
- **原理**:如果 Web 服务器使用的中间件(如 IIS、Apache Tomcat 等)存在漏洞,攻击者可能能够利用这些漏洞获取到系统权限。例如,某些中间件可能存在文件上传漏洞、远程代码执行漏洞等,攻击者可以上传恶意文件或执行恶意代码,进而尝试提权。
- **示例**:假设 Web 服务器使用的 IIS 中间件存在一个文件上传漏洞,攻击者可以通过该漏洞上传一个包含提权代码的 ASPX 文件,然后通过访问该文件触发提权代码的执行,尝试获取更高的权限。或者如果 Apache Tomcat 中间件存在远程代码执行漏洞,攻击者可以利用该漏洞执行特定的命令或脚本,以提升权限。
### DLL 劫持提权
- **原理**:Windows 系统在加载 DLL 文件时,会按照一定的搜索顺序在特定的目录中查找 DLL。如果攻击者能够将恶意的 DLL 文件放置在优先搜索的目录中,并且系统在运行某个程序时需要加载一个存在漏洞的 DLL,那么系统就会加载攻击者准备的恶意 DLL,从而执行其中的恶意代码,实现提权。
- **操作示例**:首先需要确定目标程序所依赖的 DLL,以及这些 DLL 的加载顺序和搜索路径。然后,找到一个可以被劫持的 DLL(即目标程序在加载该 DLL 时存在漏洞,例如没有对 DLL 的来源进行严格验证)。接下来,编写恶意的 DLL,使其功能与原 DLL 相似,但包含提权的代码。最后,将恶意 DLL 放置在系统优先搜索的目录中(通常是目标程序所在目录或系统的特定目录),等待目标程序运行时加载恶意 DLL,实现提权。例如,某个应用程序在运行时会加载“example.dll”文件,并且该应用程序在加载 DLL 时没有对其来源进行严格验证,同时该应用程序所在目录具有可写权限。攻击者可以制作一个恶意的“example.dll”文件,包含提升权限的代码,然后将其放置在该应用程序所在目录,当应用程序运行时,就会加载恶意的“example.dll”,从而实现提权。
### 滥用高危权限令牌提权
- **令牌窃取原理**:在 Windows 系统中,令牌(Token)是系统的临时密钥,用于决定用户是否允许执行特定操作和访问资源。令牌分为授权令牌(Delegation Token)和模拟令牌(Impersonation Token)。授权令牌用于交互式会话登陆(如本地用户登陆、用户桌面等),模拟令牌用于非交互式登陆(如 net use 访问共享文件)。默认情况下,只能列举出当前用户和比当前用户权限更低用户的令牌。但如果当前的 shell 是 administrator 或者 system,就可以看到系统中的所有令牌。攻击者可以通过窃取高权限令牌,然后使用该令牌来执行操作,从而获得高权限。
- **操作示例**:使用 Metasploit 进行令牌窃取。首先需要获取到一个 session,然后使用`meterpreter > use incognito`进入 incognito 模式,接着使用`meterpreter > list_tokens -u`列出可用的令牌,找到目标高权限用户(如 administrator)的令牌,使用`meterpreter > impersonate_token [令牌名称]`(如`meterpreter > impersonate_token win-2hu3n1\\administrator`,注意这里是两个反斜杠`\\`)来模拟该令牌,成功后就可以以高权限执行命令。或者可以借助一些工具,如 RottenPotato(烂土豆),原理是通过 Windows 的 COM(Component Object Model,组件对象模型)类,向指定的服务器端口发送 NTLM 认证,捕获认证数据包,并修改数据包内容使其认证成功,从而获得 system 权限的 token,再通过高权限的令牌执行反弹 shell 的命令,获取高权限用户的 shell。
### 第三方软件/服务提权
- **原理**:一些第三方软件或服务在安装和运行过程中,可能会存在漏洞或配置不当的情况,攻击者可以利用这些问题来提升权限。例如,某些软件可能在安装过程中会创建具有高权限的服务或设置一些不安全的配置,攻击者可以通过这些途径来获取系统权限。
- **示例**:假设某个第三方软件在安装时创建了一个具有高权限的服务,并且该服务存在漏洞,攻击者可以针对该服务的漏洞进行攻击,从而实现提权。或者某个软件在运行时会加载一些外部的库或组件,如果这些库或组件存在漏洞,攻击者也可以利用这些漏洞来提升权限。具体的操作方法需要根据具体的软件和漏洞情况来确定,可能需要进行深入的漏洞分析和利用代码编写。
### 绕过 UAC 提权
- **UAC 简介**:UAC(User Account Control,用户帐户控制)是 Windows Vista 以上版本引入的安全机制,要求用户在执行可能影响计算机运行或更改其他用户设置的操作之前,提供权限或管理员密码。
- **绕过方法**:
- **白名单劫持**:利用白名单程序(即该程序以系统权限启动且不用通知用户),找到相关程序并劫持它,当程序启动时,就会带着攻击者的程序以系统权限启动。
- **DLL 劫持**:与前面提到的 DLL 劫持提权类似,通过劫持特定的 DLL 文件来绕过 UAC。
- **Windows 自身漏洞提权**:利用 Windows 系统本身的漏洞来绕过 UAC,例如一些可以导致权限提升的漏洞。
- **远程注入**:通过远程注入的方式将代码注入到目标进程中,以绕过 UAC 的限制。
- **COM 接口技术**:利用 Windows 系统中的 COM 接口的一些特性来绕过 UAC。
- **使用 Metasploit 绕过示例**:
- `exploit/windows/local/ask`:弹出 UAC 确认窗口,点击后获得 system 权限。
- `exploit/windows/local/bypassuac`、`exploit/windows/local/bypassuac_injection`、`exploit/windows/local/bypassuac_fodhelper`、`exploit/windows/local/bypassuac_eventvwr`、`exploit/windows/local/bypassuac_comhijack`等模块,可尝试不同的绕过方式。
### 其他提权方法
- **At 本地命令提权(适用于 Windows 2000、2003、XP)**:
- **原理**:at 是一个发布定时任务计划的命令行工具,在 Windows 2000、Windows 2003、Windows XP 这三类系统中,通过 at 命令发布的定时任务计划,Windows 默认以 system 权限运行。
- **操作示例**:语法为`at 时间 命令`,例如`at 10:45pm calc.exe`会发布一个定时任务计划,在每日的 10:45 启动 calc.exe。可以通过“/interactive”开启界面交互模式,如`at 10:45pm /interactive cmd`,在得到一个 system 的 cmd 之后,使用 taskmgr 命令调用任务管理器,此时的任务管理器是 system 权限,然后 kill 掉 explore 进程,再使用任务管理器新建 explore 进程,将会得到一个 system 权限的桌面环境。
- **Sc 命令提权(适用于 Windows 7/8、03/08、12/16 等更高版本)**:
- **原理**:sc 命令是用于与服务控制管理器和服务进行通信的命令行程序,可以启动一个服务。在一些更高版本的 Windows 操作系统上,当 at 命令被取消后,可以使用 sc 命令进行提权。
- **操作示例**:命令如`sccreatesystemcmdbinpath="cmd/kstart"type=owntype=interact`,其中“systemcmd”是服务名称可随意填写,“binpath”是启动的命令,“type=own”表示服务所属。执行`scstartsystemcmd`即可启动服务。由于服务器有交互式检测,点击进去即可获得权限提升。例如,在 Windows 7 系统中,使用上述命令创建一个名为“mycmd”的服务,并将其启动路径设置为`cmd/kstart`,然后启动该服务,就可以获得一个具有 system 权限的命令行窗口。
需要注意的是,提权操作可能会对系统的安全性和稳定性造成严重影响,并且在未经授权的情况下进行提权是非法的行为。在进行安全测试或相关研究时,应确保在合法合规的前提下进行,并遵循相应的道德和法律准则。同时,及时更新系统和软件,修复漏洞,可以有效降低被提权攻击的风险。