windows提权技巧详解(上)
时间:2025-05-13 20:28:45 349浏览 收藏
在渗透测试中,提升权限是一个常见且关键的任务。本文详细介绍了在Windows系统上进行提权的多种方法和技巧。首先,通过webshell获取权限是较为常见的方式,尤其在网站部署在Windows系统时。此外,文章还探讨了利用溢出提权、可信任服务路径漏洞、错误配置的系统服务以及不安全的注册表和文件/文件夹权限等多种提权途径。通过这些方法,攻击者可以提升权限,从而实现横向渗透和进一步的攻击。本系列文章将持续深入探讨各种提权技术,帮助读者全面了解Windows提权的技巧和策略。
在渗透测试中,提升权限是一个常见的问题。通常情况下,最容易获取的权限是通过webshell,特别是当网站部署在Windows系统上时。此外,在进行横向渗透时,如果收集到可以远程连接桌面的账号,也需要提升权限。实际操作中,提权是经常需要的,本系列文章将详细介绍各种提权方式。
提权基础在进行提权之前,首要任务是对目标系统的操作系统进行信息收集。关于信息收集的具体内容,请参阅之前的文章《Windows环境下的信息收集》。这里简要提及几个关键命令:
溢出提权是提权过程中最常见的方法,但其关键在于目标系统的安全补丁更新不及时,这才为攻击者提供了机会。以下是一些较新的溢出exp示例。
由于运营者的错误配置,有时可以为我们提供提权的便利,从而提高提权成功率。下面将简单介绍这方面的提权方法。
可信任服务路径漏洞(Trusted Service Paths)是由系统中的“CreateProcess”函数引起的,利用了Windows文件路径解析的特性,并涉及了服务路径的文件/文件夹权限。存在缺陷的服务程序利用了属于可执行文件的文件/文件夹权限。如果权限合适,我们可以上传恶意可执行文件。简单来说,就是查找系统服务文件中存在非引用路径。如果一个服务调用可执行文件时,未正确处理引用的全路径名,就可以利用这个漏洞。Metasploit集成了trusted_service_path(http://www.zeroscience.mk/codes/msfsession.txt)漏洞利用模块。
Windows服务通常以System权限运行,因此系统在解析服务的二进制文件路径中的空格时也会以系统权限进行解析。如果我们能利用这一特性,就有机会进行权限提升。例如,有如下文件路径:
对于上述文件路径中的每一个空格,Windows都会尝试寻找并执行名称与空格前的部分匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。以上的例子中,Windows会依次尝试确定和执行以下程序:
因此,如果我们能上传一个适当命名的恶意可执行程序到受影响的目录,服务一旦重启,我们的恶意程序就会以system权限运行(大多数情况下)。
利用步骤如下:
检测目标主机是否存在该漏洞
如果存在以下结果,则表示存在漏洞:
FABS - Helping agent for MAGIX media database FabsC:\Program Files (x86)\Common Files\MAGIX Services\Database\bin\FABS.exe /DisableUI Auto
检查对有漏洞目录是否有写入权限。使用Windows内建工具icacls查看路径中受影响文件夹的权限,(M)代表修改权限,(F)代表完全控制,(CI)代表从属容器将继承访问控制项,(OI)代表从属文件将继承访问控制项。
攻击。将我们需要执行的exe根据需要重命名并放置在可写入的有漏洞目录下,然后运行如下命令尝试重启服务,如果失败的话等待服务器重启时执行exe,成功提权后记得清理痕迹。
sc stop service_namesc start service_name
如果我们的exe会弹回一个SYSTEM权限的meterpreter shell,但是我们新得到的会话很快就中断了。这是因为当一个服务在Windows系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。我们所有需要做的就是在终止载荷进程之前,将它迁移到其它进程,也可以使用自动迁移
set AutoRunScript migrate -f
。
系统服务的错误权限配置漏洞Windows系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。例如,JAVA升级程序,每次重启系统时,JAVA升级程序会检测Oracle网站是否有新版JAVA程序。而类似JAVA程序之类的系统服务程序加载时往往都是运行在系统权限上的。因此,如果一个低权限的用户对于此类系统服务调用的可执行文件具有可写的权限,就可以将其替换成我们的恶意可执行文件,从而随着系统启动服务而获得系统权限。Metasploit集成了漏洞利用模块exploit/windows/local/service_permissions。手工测试步骤如下:
检查易受攻击的服务。SERVICE_ALL_ACCESS的意思是我们对“Vulnerable Service”的属性拥有完全控制权。
#"Authenticated Users"指Windows系统中所有使用用户名、密码登录并通过身份验证的账户,不包括来宾账户Guest。也可以使用当前用户用户名来列出所以可以被当前用户修改的服务。#-->RW 360rp# SERVICE_ALL_ACCESS
查看可以完全控制的服务的属性。
修改服务配置执行命令。BINARY_PATH_NAME参数指向了该服务的可执行程序(360rps.exe)路径。如果我们将这个值修改成任何命令,那意味着这个命令在该服务下一次启动时,将会以SYSTEM权限运行。
当尝试启动服务时,它会返回一个错误。这一点我们之前已经讨论过了,在Windows系统中,当一个服务在Windows系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。上面的“net user”肯定是无法和服务管理器通信的,但是不用担心,我们的命令已经以SYSTEM权限运行了,并且成功添加了一个用户。
提权成功后修改服务配置,清理痕迹。
不安全的注册表权限配置在Windows中,与Windows服务有关的信息存储在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
注册表项中。以服务360rp为例,服务对应的程序路径存储在HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Vulnerable Service\360rp\ImagePath
中。如果我们对这一键值有写入权限就可以修改服务对应的程序路径,让系统以SYSTEM权限运行我们的程序,从而达到提权的目标。如下所示,我们可以使用SubInACL(https://www.microsoft.com/en-us/download/details.aspx?id=23510)工具去检查注册表项的权限。建议本地安装后找到 subinacl.exe 拷贝到目标机器上运行。
如果我们对注册表有写入权限,就可以修改注册表,使得服务启动时运行我们的恶意程序:
在下一次启动该服务时,adduser.exe将会以SYSTEM权限运行。成功提权后记得修改回配置。
不安全的文件/文件夹权限配置可信任服务路径漏洞产生的原因就是不安全的文件夹权限以及“CreateProcess”函数。如果我们对系统服务对应的应用程序所在文件夹有写入权限,便可以直接使用恶意程序替换原来的可执行文件,从而完成提权。
任意用户以NT AUTHORITY\SYSTEM权限安装msiAlwaysInstallElevated是一个策略设置,当在系统中使用Windows Installer安装任何程序时,该参数允许非特权用户以system权限运行MSI文件。如果目标系统上启用了这一设置,我们可以使用msf生成msi文件来以system权限执行任意payload。msf集成了漏洞利用模块:exploit/windows/local/always_install_elevated
。详细利用步骤如下:
判断是否启用了AlwaysInstallElevated策略。当两个注册表键值查询结果均为1时,代表该策略已启用。
使用msfvenom生成恶意程序上传
运行恶意程序。
# /quiet 安装过程中禁止向用户发送消息# /qn 不使用GUI# /i 安装程序
计划任务可以使用如下命令查看计算机上的计划任务。
使用如下命令可以查看指定目录的权限配置情况。如果我们对以高权限运行的任务所在目录具有写入权限,就可以使用恶意程序覆盖掉原来的程序。当计划任务下次执行时,就会以高权限运行恶意程序,进而完成提权。
总结本文作为这个提权系列的上篇,主要讲了提权的一些基础信息,提到了溢出提权、错误配置导致的提权等。由于作者尚未完全完成这个系列的所有内容,所以可能有不全的地方,请大家理解,随后会慢慢放出作者已经完成的部分。
终于介绍完啦!小伙伴们,这篇关于《windows提权技巧详解(上)》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
480 收藏
-
492 收藏
-
456 收藏
-
121 收藏
-
266 收藏
-
484 收藏
-
457 收藏
-
436 收藏
-
302 收藏
-
385 收藏
-
252 收藏
-
351 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习