利用Windows系统服务进行权限提升

news2024/12/30 3:25:52

提权是后渗透重要的一环节,如果当前获取的用户权限比较低,那么我们将无法访问受保护的系统资源或执行系统管理操作,影响后续的攻击过程。这要求我们通过各种手段将当前用户的权限进行提升,以满足后续攻击的要求。

利用系统服务提权

通过情况下,用户安装的一些应用软件会在本地注册一些服务,并且大多数服务在计算机开机时以系统system权限启动。应用软件在注册服务时,会在以下路径中创建相应的注册表项。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

如下MySQLa服务注册表的信息,其中的ImagePath键指向该系统服务所启动的二进制文件

windows系统服务在操作系统启动时运行,并在后台调用相应的二进制文件。由于大多数系统服务时以系统权限(sytem)权限启动的,如果让系统启动时执行其他程序,该程序就可以随着服务的启动获得系统权限,这是利用系统服务提权的主要思路。

系统服务提权从主观上可以归咎于用户的配置疏忽或操作失误,如不安全的服务权限、服务注册表权限脆弱、服务路径权限可控、未引用的服务路径等。

不安全的服务权限

该方法是由于服务的管理配置错误,导致本地普通用户对一些服务拥有过多的权限,例如修改服务配置等。

可制作木马文件上传至服务器,并将某服务的路径更改为木马文件,服务启动则会执行恶意代码

ACL定义了安全对象的访问控制策略,用于规定哪些主体对其拥有访问权限和拥有什么样的权限。windows的系统服务正是通过ACL来指定用户对其拥有的权限,常见的权限如下表

权限

说明

SERVICE_START

启动服务的权限

SERVICE_STOP

停止服务的权限

SERVICE_PAUSE_CONTINUE

暂停/继续运行服务的权限

SERVICE_QUERY_STATUS

查询服务状态的权限

SERVICE_QUERY_CONFIG

查询服务配置的权限

SERVICE_CHANGE_CONFIG

更改服务配置的权限

SERVICE_ALL_ACCESS

完全控制权限

假设目标主机的用户在配置服务时存在疏忽,使得低权限用户对高权限下运行的系统服务拥有更改服务配置的权限(SERVICE_CHANGE_CONFIG或SERVICE_ALL_ACCESS),就可以通过这个低权限用户直接修改服务启动时的二进制文件路径。

在实战中,AccessChk工具可以枚举目标主机上存在权限缺陷的系统服务。AccessChk是微软官方提供的管理工具,常用来枚举或查看系统中指定用户、组队特定资源(包括但不限于文件、文件夹、注册表、全局对象或系统服务等)的访问权限。

环境搭建

先用本地管理员授予test用户对apache服务的完全控制权限,参考:https://www.yuque.com/chenchen-dqalz/qe15s1/er9olfttlz32sfyu

subinacl.exe /service apache /grant=test=F

此时,就可以模拟管理员由于疏忽,让低权限用户test对高权限下运行的系统服务拥有更改服务配置的权限这么一种情况

  1. 执行以下命令

普通用户test,查看自身对哪些服务有更改配置的权限

accesschk.exe /accepteula test -uwcqv *

此时,可以看到,test用户对 "apache"服务拥有SERVICE_ALL_ACCESS权限

  1. 替换apache服务启动时的二进制文件为poc,并重启系统或重启服务

sc config 服务名 binpath= "cmd.exe /k c:\beacon.exe"

服务注册表权限脆弱

windows的注册表中存储了每个系统服务的条目,而注册表使用ACL来管理用户对其所拥有的访问权限。如果注册表的ACL配置错误,使得一个低权限用户对服务的注册表拥有写入权限,此时可以通过修改注册表来更改服务配置。例如,修改注册表中的ImagePath键,从而变更服务启动时的二进制文件路径。

环境配置

如下配置,使得低权限用户对apache服务的注册表拥有写入权限

权限提升

  1. 切换到普通用户test,执行如下,通过AccessChk在目标主机中检查test用户是否对某个服务的注册表有写入权限

accesschk.exe /accepteula test -uvwqk HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services

发现对apache服务的注册表拥有完全控制权限

  1. 将该服务的注册表中的ImagePath键指向预先上传的攻击载荷

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\apache /v ImagePath /t REG_EXPAND_SZ /d "cmd.exe /k c:\beacon.exe" /f
  1. 检查当前用户对该服务是否有重启权限

accesschk.exe /accepteula test -ucqv apache

可见没有重启该服务的权限

所以,只能等待系统重启,最终提权如下

服务路径权限可控

如果目标主机上用户存在错误配置或操作,使得一个低权限的用户对此服务调用的二进制文件或其所在目录拥有写入权限,那么可以直接将该文件替换成攻击载荷,并随着服务的启动继承系统权限。

如下,用AccessChk查看apache这个服务的二进制文件所在目录是否有写入权限

accesschk.exe /accepteula -quv "C:\phpStudy\PHPTutorial\Apache\bin"

如果有写入权限,则可以替换服务的二进制文件,过程略...

未引用的服务路径

未引用的服务路径曾被称为可信任的服务路径(Trusted Service Paths),利用了windows文件路径解析的特性。当服务启动所执行的二进制文件的路径中包含空格且没有用引号括起来,就会导致该漏洞。

如果一个服务调用的可执行文件的路径没有被双引号引起来,且路径带空格,且当前用户又有写权限。这个漏洞就会被攻击者用来上传任意可执行文件。

漏洞原理

造成该漏洞的根本原因在于windows系统中用户创建进程的CreateProcess函数,语法如下

BOOL CreateProcessA(
  [in, optional]      LPCSTR                lpApplicationName,
  [in, out, optional] LPSTR                 lpCommandLine,
  [in, optional]      LPSECURITY_ATTRIBUTES lpProcessAttributes,
  [in, optional]      LPSECURITY_ATTRIBUTES lpThreadAttributes,
  [in]                BOOL                  bInheritHandles,
  [in]                DWORD                 dwCreationFlags,
  [in, optional]      LPVOID                lpEnvironment,
  [in, optional]      LPCSTR                lpCurrentDirectory,
  [in]                LPSTARTUPINFOA        lpStartupInfo,
  [out]               LPPROCESS_INFORMATION lpProcessInformation
);

其中,lpApplicationName参数用户指定要执行的模块或应用程序的路径或文件名。如果完整路径中包含空格且未有效包含在引号中,那么对于该路径中的每个空格,windows会按照从左到右的顺序依次尝试寻找并执行与空格前的名字相匹配的程序。例如,对于如下的路径

C:\Program Files\Vulnerable Service\Sub Directory\service.exe

系统依次寻找并执行如下的程序

C:\Program.exe
C:\Program Files\Vulnerable.exe
C:\Program Files\Vulnerable Service\Sub.exe
C:\Program Files\Vulnerable Service\Sub Directory\service.exe

注意,当系统在依次尝试服务路径中的空格时,会以当前服务所拥有的权限进行。因此,测试人员可以将一个特殊命名的攻击载荷上传到受影响的目录中,当重启服务时,攻击载荷将随着服务的启动继承系统权限,但前提是当前目录对受影响的目录具有写入权限。

漏洞环境设计

  1. 管理员打开cmd,创建目录\test data\vuln\,并创建名为vulns的服务,服务的可执行文件路径包含空格且未被引号包裹

mkdir "C:\Program Files\wgy\test data\Vuln" && sc create "vulns" binpath= "C:\Program Files\wgy\test data\Vuln\file.exe" start= auto

如下服务的可执行文件路径包含空格且未被引号包裹

正常包含空格的路径是需要被引号包裹的

  1. 给\test data\目录授权普通用户可写的权限

这里,漏洞环境就准备好了

权限提升

切换到普通用户test

  1. 枚举目标主机上存在该漏洞的系统服务

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

#-i 不区分大小写,-v 打印不匹配的行

枚举出两个结果,可见第二个服务vulns的路径是包含空格的,所以其可能存在漏洞

  1. 查看是否有写入权限

发现\wgy\具有写入权限

accesschk.exe /accepteula -quv "c:\Program Files\" && accesschk.exe -quv "c:\Program Files\wgy\"

或者使用icacls查看

icacls "c:\Program Files" && icacls "c:\Program Files\wgy"

此时向"c:\Program Files\wgy\"目录上传一个名为test.exe的poc

copy beacon.exe "c:\Program Files\wgy\test.exe"

服务重启后,系统会按照前文说过的顺序依次检查服务路径,当检查到"c:\Program Files\wgy\test.exe"时,攻击载荷将以system权限运行

防御

为了避免该类漏洞的影响,在使用sc创建系统服务时,应有效的对存在空格的服务路径使用引号包裹,如下

sc create "vulns" binpath= "\"C:\Program Files\wgy\test data\Vuln\file.exe\"" start= auto

msf利用

可以使用msf发现未引用的服务路径漏洞。先获取一个低权限的session

use windows/local/unquoted_service_path
set session 1
set lport 5555
run

如下,成功发现漏洞,但是由于没有重启该服务的权限,只能等待系统重启后才能执行攻击载荷

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VUE2--22.11.23

VUE2一、Vue.js devtools二、Vue简介1、什么是Vue2、Vue的特性1.数据驱动视图2.双向数据绑定3.MVVM三、Vue的基本使用1、基本使用步骤四、Vue的指令与过滤器1、什么是指令2、内容渲染指令1.v-text2.{{}}3.v-html3、属性绑定指令4、事件绑定指令5、双向绑定指令6、条件渲染指令7…

【Linux】动静态库、文件的三个时间

1.文件的三个时间Access: 访问时间,访问的频率很高,所以较新的Linux都是按一定的时间间隔刷新Modify: 修改文件内容时间Change:修改文件属性时间,修改文件内容也会修改文件属性makefile自动编译判断文件是否为最新:就是按可执行程…

运动基元(一):Dubin‘s曲线【part3】

3.5 RLR RLR的第一段圆弧的曲率 k 1 = − k m a x < 0 → s i g n ( k 1 ) = − 1 k_1=-k_{max}<0\rightarrow si

Springboot图书馆图书借阅管理系统x1x74

目 录 1 概述 1 1.1课题背景及意义 1 1.2 国内外研究现状 1 1.3 本课题主要工作 2 2 系统开发环境 3 2.1 java简介 3 2.2 Mysql数据库 3 2.3 B/S结构 4 2.4 JSP技术介绍 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2操作…

机器学习sklearn笔记:LDA(线性判别分析)

1 介绍 1.有监督的降维2.投影后类内方差最小&#xff0c;类间方差最大2 推导 我们记最佳的投影向量为w&#xff0c;那么一个样例x到方向向量w上的投影可以表示为&#xff1a; 给定数据集令分别表示第i类的样本个数、样本集合、均值向量和协方差矩阵——>在投影上的均值是 —…

kafka初识

安装kafka 下载 下载window的kafka地址 window的kafka只是为了方便学习 安装地址&#xff1a;kafka.apache.org/ 安装 解压zip为文件夹 启动kafka kafka服务器的功能相当于RocketMQ中的broker&#xff0c;kafka运行还需要一个类似于命名服务器的服务。在kafka安装目录中自…

Windows10添加WebDav地址时报错“输入的文件夹无效,请选择另一个”

一、问题描述在使用Windows10添加WebDav网络地址时&#xff0c;报错“输入的文件夹无效&#xff0c;请选择另一个”&#xff0c;如下图所示&#xff1a;二、问题分析这是由于Windows10的WebDav默认只支持https协议&#xff0c;没有支持http协议导致的。三、解决办法3.1、修改注…

计算机科学领域中里程牌式的算法

计算机科学中伟大的算法前言搜索引擎的索引PageRank公钥加密 --- 用明信片传输秘密纠错码数据压缩无损压缩有损压缩数据库 --- 追求一致性的历程事务和待办事项&#xff08;预写日志记录&#xff09;数字签名用挂锁签名用指数挂锁签名RSA的安全性前言 我肯定不是一位天文学专家…

redis 消息队列方案

redis 消息队列方案 观察角度&#xff1a;消息有序&#xff0c;重复消息处理&#xff0c;消息可靠性保证 pub/sub 发布订阅机制 list集合 消息有序&#xff1a;lpush和rpop可以保证消息顺序的被消费 重复消息处理&#xff1a;list没有为消息提供唯一标识&#xff0c;需要生产者…

利用matlab求解非线性目标函数

文章目录函数介绍设置函数参数步骤结果分析函数介绍 使用fmincon函数来进行求解&#xff0c;格式为 [x,y] fmincon(f,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)其中&#xff0c;f表示所求的目标函数&#xff0c;x0表示初始值&#xff0c;A,b,Aeq,beq表示线性的约束&#xff0c…

SpringBoot06:整合JDBC、Druid、MyBatis

整合JDBC 1、创建一个新的工程&#xff0c;勾选JDBC API和MySQL Driver 2、导入web启动器 3、编写yaml配置文件&#xff0c;连接数据库 spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/mybatis?useUnicodetrue&characterEncodingut…

力扣 2299. 强密码检验器 II

题目 如果一个密码满足以下所有条件&#xff0c;我们称它是一个 强 密码&#xff1a; 它有至少 8 个字符。 至少包含 一个小写英文 字母。 至少包含 一个大写英文 字母。 至少包含 一个数字 。 至少包含 一个特殊字符 。特殊字符为&#xff1a;“!#$%^&*()-” 中的一个。…

面向对象编程范式

目录 1.概述 1.1.面向对象编程的核心诉求 1.2.面向对象的世界观 2.类和对象 3.如何寻找类和对象 3.1.概述 3.2.示例 4.如何表示类 4.1.什么是UML 4.1.关系 4.2.权限 4.3.依赖 4.4.泛化&#xff08;继承&#xff09; 4.5.实现 4.6.关联 4.7.聚合 4.8.组合 1.概…

自定义类型之枚举和联合

该文章将详细介绍除结构体外的另外两种自定义类型--------枚举类型与联合类型。1.枚举1.1枚举类型的定义1.2枚举的优点1.3枚举的使用2.联合&#xff08;共用体&#xff09;2.1联合类型的定义2.2联合的特点2.3联合大小的计算1.枚举 枚举顾名思义就是------一一列举。 把所有可能…

ADAS HiL系统测试方案

1、什么是ADAS ADAS&#xff08;Advanced Driving Assistance System&#xff09;也就是高级驾驶辅助系统&#xff0c;是无人驾驶的过渡。 ADAS利用安装在车上的各式各样传感器&#xff08;毫米波雷达、激光雷达、单\双目摄像头以及卫星导航&#xff09;&#xff0c;在汽车行驶…

[前端笔记——CSS] 12.处理不同方向文本

[前端笔记——CSS] 12.盒模型背景与边框1.书写模式2.书写模式、块级布局和内敛布局3.逻辑属性和逻辑值1.书写模式 CSS 中的书写模式是指文本的排列方向是横向还是纵向的。writing-mode 属性使我们从一种模式切换到另一种模式。例如&#xff0c;我们使用writing-mode: vertical…

stack、queue、priority_queue

容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff0c;该种模式是将一个类的接口转换成客户希望的另外一个接口。 其中stack和queue都是容器适配器&#xff0c;其中stack可以封装vector、list以及我们…

ffmpeg无损裁剪、合并视频

我用的版本是 ffmpeg version git-2020-06-23-ce297b4 官方文档 https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax 时间格式 [-][HH:]MM:SS[.m...] 或 [-]S[.m...][s|ms|us]裁剪视频 假设需要裁剪视频aaa.mp4&#xff0c;第5秒到第15秒 ffmpeg -ss 5 -to 15 -i…

使用gazebo对scara机械臂进行仿真

本文主要介绍如何仿真一个scara机械臂&#xff0c;以及在网上看了一些项目以后&#xff0c;有了一些感想&#xff0c;不想看的可以直接跳到机械臂部分。 目录感想(自己的理解&#xff0c;不一定对。)Scara机械臂的开发运动学计算如何使用机械臂工作图一个例子: 在start_pose抓起…

【Hadoop】MapReduce分布式计算实践(统计文本单词数量)

文章目录1. 前言2. Mapper代码3. Reducer代码4. Main代码5. 项目打包6. Hadoop运行7. 运行结果查看7.1 输出文件查看7.2 日志查看1. 前言 在博客【Hadoop】MapReduce原理剖析&#xff08;Map&#xff0c;Shuffle&#xff0c;Reduce三阶段&#xff09;中已经分析了MapReduce的运…