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

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

滚雪球学Java(87):Java事务处理:JDBC的ACID属性与实战技巧!真有两下子!

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~ 🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!! 环境说明:Windows 10

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

springboot实战学习(1)(开发模式与环境)

目录 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 (3)前端 二、开发模式 一、实战学习的引言 (1)前后端的大致学习模块 (2)后端 Validation:做参数校验Mybatis:做数据库的操作Redis:做缓存Junit:单元测试项目部署:springboot项目部署相关的知识 (3)前端 Vite:Vue项目的脚手架Router:路由Pina:状态管理Eleme

Windows环境利用VS2022编译 libvpx 源码教程

libvpx libvpx 是一个开源的视频编码库,由 WebM 项目开发和维护,专门用于 VP8 和 VP9 视频编码格式的编解码处理。它支持高质量的视频压缩,广泛应用于视频会议、在线教育、视频直播服务等多种场景中。libvpx 的特点包括跨平台兼容性、硬件加速支持以及灵活的接口设计,使其可以轻松集成到各种应用程序中。 libvpx 的安装和配置过程相对简单,用户可以从官方网站下载源代码

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne