metasploit、powershell之Windows错误系统配置漏洞实战提权

本文主要是介绍metasploit、powershell之Windows错误系统配置漏洞实战提权,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

我们在获得目标机一个普通的权限时,除了常规提权方法外,还可以通过查找目标主机错误的系统配置和漏洞来获取系统权限。本节所讲的“Trusted Service Paths(可信任服务路径)漏洞”和“系统服务的错误权限配置漏洞”绝对是你值得尝试的一个环节。

Trusted Service Paths(可信任服务路径)漏洞介绍

“Trusted Service Paths”漏洞是由系统中的“CreateProcess”函数引起的,利用了windows文件路径解析的特性,并涉及了服务路径的文件/文件夹权限,存在缺陷的服务程序利用了属于可执行文件的文件/文件夹权限。如果权限合适,我们可以上传恶意可执行文件。简单讲就是查找系统服务文件中存在非引用路径。如果一个服务调用可执行文件,没有正确处理引用的全路径名,就可以利用这个漏洞。

Trusted Service Paths漏洞产生原因

windows服务通常都是以System权限运行的,所以系统在解析服务的二进制文件对应的文件路径中的空格的时候也会以系统权限进行解析。如果我们能利用这一特性,就有机会进行权限提升。
例如,有如下的文件路径:

C:\Program Files\Some Folder\Service.exe

对于上面文件路径中的每一个空格,windows都会尝试寻找并执行名字与空格前名字相匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。以上面的例子为例,windows会依次尝试确定和执行下面的程序:

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

所以如果我们能够上传一个适当命名的恶意可执行程序在受影响的目录,服务一旦重启,我们的恶意程序就会以system权限运行(大多数情况下)。

Metasploit下Trusted Service Paths漏洞的实战利用

此时假设我们通过一系列前期渗透,已经成功获得了目标机的meterpreter shell(过程略),当前权限为shuteer,我们想获取系统的system权限,但是尝试了各类提权方法后失败,如图1所示。此时我们可以尝试通过TrustedService Paths漏洞来尝试实现权限的提升。

图1 当前权限

1.先检测目标主机是否存在该漏洞。理论上讲,如果一个服务的可执行文件的路径没有用双引号封闭,并且包含空格,那么这个服务就是有漏洞的。
我们在meterpreter shell命令提示符下输入shell命令进入目标机cmd下,然后使用下列wmi查询命令来列举受害者机器上所有的没有加引号的服务路径(除去了windows本身的服务)。如图2所示。

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

图2查询路径

可以看到,有“Vulnerable Service”、“OmniServ”、“OmniServer”、“OmniServers”四个服务对应的二进制文件路径没有引号包含起来,并且路径中包含空格。是存在该漏洞的,但在上传可执行文件进去之前,我们需要确定我们对目标文件夹是否有写入的权限。

2.检查对有漏洞目录是否有写入的权限,这个很关键。这里我们使用Windows内建的一个工具,icacls,下面我们用这个工具依次来检查

“C:\Program Files”
“C:\Program Files\Common Files”
“C:\Program Files\Common Files\microsoft shared”

等目录的权限,都提示权限不够。如图3所示。

图3 查看目录权限

很幸运,直到我们尝试到最后一个

“C:\Program Files\Program Folder”

文件夹时成功了,看到Everyone(OI)(CI)(F)没有。如图4所示。

图4 查看目录权限

“Everyone”用户对这个文件有完全控制权,就是说所有用户都具有全部权限修改这个文件夹。
参数说明:“M”表示修改,“F”代表完全控制,“CI”代表从属容器将继承访问控制项,“OI”代表从属文件将继承访问控制项。这意味着对该目录有读,写,删除其下的文件,删除该目录下的子目录的权限。
3.我们确认了目标主机存在此漏洞后,将便开始正式攻击,Metasploit中相对应的是Windows Service Trusted Path Privilege Escalation本地利用模块,该模块会将恶意的可执行程序放到受影响的文件夹中去,然后将受影响的服务重启。接着我们输入命令background,把当前的meterpreter shell转为后台执行。然后在Metasploit中搜索trusted_service_path模块。如图5所示。

图5搜索相应EXPLOIT

4.使用该exploit程序,并设置相关参数,如图6所示。

图6设置相关参数

5.攻击。输入run命令,可以看到自动反弹了一个新的meterpreter,我们在此meterpreter shell下输入getuid 发现是system 权限,如图7所示。证明我们已经提权成功了。

图7提权成功

我们输入sessions可以看到有2个meterpreter,ID为3的就是新反弹回来的,如图8所示。

图8查看sessions

我们浏览源代码发现,这个模块使用了一些正则表达式来过滤掉那些路径用引号包含起来的路径,以及路径中不含空格的路径,并创建一个受影响的服务的路径列表。接着该模块尝试利用列表中第一个受影响的服务,将恶意的可执行程序放到相应受影响的文件夹中去。接着受影响的服务被重启,最后,该模块会删除该恶意可执行文件。
6.解决方案:当开发者没有将文件路径用引号包含起来的时候,才会发生这种行为。用引号包含起来的路径解析的时候则不存在这种行为。

“系统服务错误权限配置漏洞”简介

Windows系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。比如,JAVA升级程序,每次重启系统时,JAVA升级程序会检测Oracle网站,是否有新版JAVA程序。而类似JAVA程序之类的系统服务程序加载时往往都是运行在系统权限上的。所以如果一个低权限的用户对于此类系统服务调用的可执行文件具有可写的权限,那么就可以将其替换成我们的恶意可执行文件,从而随着系统启动服务而获得系统权限。

PowerUp之”系统服务错误权限配置漏洞”的实战利用

这里我们主要利用一个非常实用的Powershell框架-Powerup通过直接替换可执行文件本身来实现权限的提升。首先检测目标主机是否存在该漏洞。Powerup可以帮助我们寻找服务器错误的系统配置和漏洞从而实现提权的目的。下载地址:

https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerUp

我们先将工具下载到本地,然后上传至目标服务器。见图9所示。

图9 上传工具

上传好脚本后,输入shell命令进入CMD提示符下,然后可以使用下列命令在本地隐藏权限绕过执行该脚本,会自动进行所有的脚本检查。见图10所示。

powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"

图10 查找有漏洞服务

也可以使用IEX下载在内存中加载此脚本,执行如下命令,同样会自动进行所有的检查,如图11所示。

powershell -nop -exec bypass -c “IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Invoke-AllChecks”

知识点:

-NoProfile(-NoP):PowerShell控制台不加载当前用户的配置

-Exec Bypass:绕过执行安全策略

Import-Module:加载脚本

图11 查找有漏洞服务

可以看出,Powerup列出了可能存在问题的所有服务,并在AbuseFunction中直接给出了利用方式。第一部分通过Get-ServiceUnquoted模块检测出了有“Vulnerable Service”、“OmniServ”、“OmniServer”、“OmniServers”四个服务,路径包含空格且不带引号,但是都没有权限,所以并不能被我们利用来提权。第二部分通过Get-ServiceFilePermission模块检测出当前用户可以在“OmniServers”服务的目录写入相关联的可执行文件,并且通过这些文件来进行提权。
这里我们还是可以使用icacls来验证下PowerUp脚本检测是否正确,我们先来测试

“C:\Program Files\Executable.exe”、
“C:\Program Files\Common Files\microsoft shared\OmniServ.exe”、
“C:\Program Files\Common Files\A Subfolder\OmniServer.exe”

这三个文件夹,均提示权限不够。如图12所示。

图12 查看目录权限

再测试

“C:\Program Files\Program Folder\A Subfolder\OmniServers.exe”

文件,如图13所示。

图13 查看目录权限

可以看到我们对OmniServers.exe文件是有完全控制权的,这里我们可以直接将OmniServers.exe替换成我们的MSF反弹木马,当服务重启时,就会给我们返回一个system权限的meterpreter。
在这里我们使用图11里AbuseFunction那里已经给出的具体操作方式,执行如下命令操作,如图14所示。

powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Install-ServiceBinary -ServiceName 'OmniServers'-UserName shuteer -Password Password123!

知识点:

Install-ServiceBinary模块,通过Write-ServiceBinary写一个C#的服务用来添加用户。

图14添加用户

接下来停止并再启动该服务的时候,就会添加我们的用户,如图15所示。

图15 停止启动服务

可以看到,提示拒绝访问,那是因为我们当前的权限是一个受限的USER权限,所以只能等待系统重启。这里因为是虚拟机机,所以直接使用如下命令强制重启,如图16所示。
Shutdown –r –f –t 0

图16 强制重启

我们切换到目标机界面可以看到已经关机重启了,如图17所示。

图17关机

重启以后,系统会自动创建了一个新的用户shuteer,密码是Password123!。如图18所示。

图18 查看用户

我们来查看下该用户权限,该用户已经是系统管理员。如图19所示。

图19 查看权限

提权成功以后,我们到目标机

C:\Program Files\Program Folder\A Subfolder

目录下面可以看到多了一个文件,如图20所示。

图20 查看文件夹

所以我们需要清除入侵的痕迹,把所有的状态恢复到最初的状态,可以使用如下命令恢复。

powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('c:/PowerUp.ps1');Restore-ServiceBinary -ServiceName
'OmniServers'

恢复

‘C:\Program Files\Program Folder\A Subfolder\OmniServers.exe.bak’为’C:\Program Files\Program Folder\A Subfolder\OmniServers.exe’

移除备份二进制文件

‘C:\Program Files\Program Folder\A Subfolder\OmniServers.exe.bak’

TheEnd.

本文为我团队 shuteer原创稿件,授权杂术馆发布,未经许可禁止转载

新书:《内网安全攻防:渗透测试实战指南》火爆上市!

Ms08067安全实验室

专注于普及网络安全知识。团队已出版《Web安全攻防:渗透测试实战指南》,2019年11月出版《内网安全攻防:渗透测试实战指南》。目前在编Python渗透测试,JAVA代码审计和逆向工程等方面书籍。

团队公众号定期分享关于CTF靶场、内网渗透、APT方面技术干货,从零开始、以实战落地为主,致力于做一个实用的干货分享型公众号。

这篇关于metasploit、powershell之Windows错误系统配置漏洞实战提权的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/486400

相关文章

修复已被利用的高危漏洞! macOS Sequoia 15.6.1发布

《修复已被利用的高危漏洞!macOSSequoia15.6.1发布》苹果公司于今日发布了macOSSequoia15.6.1更新,这是去年9月推出的macOSSequoia操作... MACOS Sequoia 15.6.1 正式发布!此次更新修复了一个已被黑客利用的严重安全漏洞,并解决了部分中文用户反馈的

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

PostgreSQL简介及实战应用

《PostgreSQL简介及实战应用》PostgreSQL是一种功能强大的开源关系型数据库管理系统,以其稳定性、高性能、扩展性和复杂查询能力在众多项目中得到广泛应用,本文将从基础概念讲起,逐步深入到高... 目录前言1. PostgreSQL基础1.1 PostgreSQL简介1.2 基础语法1.3 数据库

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

SpringBoot3匹配Mybatis3的错误与解决方案

《SpringBoot3匹配Mybatis3的错误与解决方案》文章指出SpringBoot3与MyBatis3兼容性问题,因未更新MyBatis-Plus依赖至SpringBoot3专用坐标,导致类冲... 目录SpringBoot3匹配MyBATis3的错误与解决mybatis在SpringBoot3如果