当前位置: 首页 > news >正文

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

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

利用系统服务提权

通过情况下,用户安装的一些应用软件会在本地注册一些服务,并且大多数服务在计算机开机时以系统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

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

相关文章:

  • WebAssembly编译之(2)-Ubuntu搭建WASM编译环境
  • InstanceNorm LayerNorm
  • yolo结构介绍
  • 最详细、最仔细、最清晰的几道python习题及答案(建议收藏哦)
  • C语言:数组
  • Python装饰器使用方法详解
  • 「python|语言特性」为什么f-string是python中最舒适的字符串格式化方式
  • 8. 好客租房-WebSocket与即时通讯系统[项目必需]
  • 机器学习04 决策树
  • java基础学习 day37 (集合)
  • Python闭包与闭包陷阱
  • 测试篇(三):测试用例的万能公式、对水杯和登录页面设计测试用例、测试用例的设计方法
  • 第十三届蓝桥杯省赛 Java A 组 I 题、Python A 组 I 题、Python B 组 J 题——最优清零方案(AC)
  • 阿里“云开发“小程序(uniCould)
  • 提权漏洞和域渗透历史漏洞整理
  • [译] 怎样写一个基础的编译器
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • JAVA_NIO系列——Channel和Buffer详解
  • Laravel 实践之路: 数据库迁移与数据填充
  • LeetCode18.四数之和 JavaScript
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • oldjun 检测网站的经验
  • PaddlePaddle-GitHub的正确打开姿势
  • React的组件模式
  • 成为一名优秀的Developer的书单
  • 缓存与缓冲
  • 机器学习中为什么要做归一化normalization
  • 利用jquery编写加法运算验证码
  • 入手阿里云新服务器的部署NODE
  • 译有关态射的一切
  • Java总结 - String - 这篇请使劲喷我
  • ​力扣解法汇总946-验证栈序列
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #define与typedef区别
  • #vue3 实现前端下载excel文件模板功能
  • (003)SlickEdit Unity的补全
  • (10)ATF MMU转换表
  • (11)MATLAB PCA+SVM 人脸识别
  • (11)MSP430F5529 定时器B
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (HAL库版)freeRTOS移植STMF103
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三)uboot源码分析
  • (十一)c52学习之旅-动态数码管
  • (算法设计与分析)第一章算法概述-习题
  • (原創) 物件導向與老子思想 (OO)
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net MVC + EF搭建学生管理系统
  • .NET开发不可不知、不可不用的辅助类(一)
  • @angular/cli项目构建--http(2)
  • [.net]官方水晶报表的使用以演示下载
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [20190401]关于semtimedop函数调用.txt