通过 COM 组件 IFileOperation 越权复制文件

发布于 2025-01-20 17:43:25 字数 6571 浏览 2 评论 0

0x00 前言

在之前的文章 《Empire 中的 Invoke-WScriptBypassUAC 利用分析》 曾介绍过一个越权复制文件的方法,在普通用户的权限下,利用 wusa 能够将 cab 文件释放至管理员权限的文件夹,进一步可以实现文件名劫持和 UAC 绕过。

但该功能在 Win10 下被取消,那么有没有更为通用的方法呢?

本文将要介绍一个适用于 Win7-Win10 的方法——利用 COM 组件 IFileOperation

0x01 简介

  • 利用原理
  • 三种实现思路
  • 实例代码
  • 实际测试
  • 利用分析

0x02 利用原理

注: 该方法学习自 Defcon 25 中的 workshop,Ruben Boonen 《UAC 0day, all day!》

ppt 下载地址: https://github.com/FuzzySecurity/DefCon25/blob/master/DefCon25_UAC-0day-All-Day_v1.2.pdf

利用 COM 组件 IFileOperation 越权复制文件的前提:

  • Win7 以后的系统
  • 可信路径下的可信文件(例如 explorer.exe,powershell.exe)

所以有以下三种实现思路:

1、dll 劫持或是 dll 注入

由于可信路径下的可信文件一般都是在需要管理员权限的路径下,所以普通用户权限下基本无法实现 dll 劫持

可行的方法是 dll 注入

例如 explorer.exe,在普通用户权限就可以对其进行 dll 注入

2、修改 PEB 结构,欺骗 PSAPI,调用 COM 组件 IFileOperation

COM 组件通过 Process Status API (PSAPI) 读取进程 PEB 结构中的 Commandline 来识别它们正在运行的进程

如果将进程的 Path 改成可信文件(如 explorer.exe),就能够欺骗 PSAPI,调用 COM 组件 IFileOperation 实现越权复制

3、通过可信文件直接调用 COM 组件 IFileOperation

例如 powershell.exe 为可信文件,并且能够直接调用 COM 组件 IFileOperation

0x03 实现方法 1:dll 注入 explorer.exe

具体实现分为如下两段:

  1. 将 dll 注入到进程 explorer.exe
  2. dll 实现调用 COM 组件 IFileOperation 复制文件

github 已经有一个完整的实现代码,因此可以参考该工程对其分析,工程地址: https://github.com/hjc4869/UacBypass

(1) 工程 UacBypassTest 实现了 dll 注入到进程 explorer.exe

去掉不必要的功能,只保留将 UacBypass.dll 注入到进程 explorer.exe 的功能:

删除 Line 58 即可

(2) 工程 UacBypass 实现了调用 COM 组件 IFileOperation 复制文件

该工程编译后生成文件 UacBypass.dll,实现了将同级目录下的 ntwdblib.dll 复制到 C:\windows\System32

实际测试:

运行 UacBypassTest.exe,将 UacBypass.dll 注入到进程 explorer.exe,成功实现越权文件复制

0x04 实现方法 2:修改 PEB 结构,欺骗 PSAPI,调用 COM 组件 IFileOperation

参考工程 UacBypass,将 dll 转为 exe,添加头文件,修复 bug,可供参考的完整代码: https://github.com/3gstudent/Use-COM-objects-to-bypass-UAC/blob/master/IFileOperation.cpp

实现了将 c:\6\ntwdblib.dll 复制到 c:\windows\system32

代码分析:

成功的前提是指定了该 COM 组件的属性(需要提升权限)

官方文档地址: https://msdn.microsoft.com/en-us/library/bb775799.aspx

代码位置: https://github.com/3gstudent/Use-COM-objects-to-bypass-UAC/blob/master/IFileOperation.cpp#L14

属性说明:

  • FOF_NOCONFIRMATION :不弹出确认框
  • FOF_SILENT:不弹框
  • FOFX_SHOWELEVATIONPROMPT:需要提升权限
  • FOFX_NOCOPYHOOKS:不使用 copy hooks
  • FOFX_REQUIREELEVATION:默认需要提升权限
  • FOF_NOERRORUI:报错不弹框

实际测试:

直接运行 exe,会弹出 UAC 的确认框,提示权限不够,如果选择允许,能够实现文件复制

接下来需要添加修改 PEB 结构的功能,为了欺骗 PSAPI,共需要修改以下位置:

  • _RTL_USER_PROCESS_PARAMETERS 中的 ImagePathName
  • _LDR_DATA_TABLE_ENTRY 中的 FullDllName
  • _LDR_DATA_TABLE_ENTRY 中的 BaseDllName

注: 不需要修改_RTL_USER_PROCESS_PARAMETERS 中的 CommandLine ,该属性能够通过 Process Explorer 查看,为了更具有欺骗性,可以选择将其修改

我在这里参考了 UACME 中 supMasqueradeProcess() 的实现代码,地址如下: https://github.com/hfiref0x/UACME/blob/143ead4db6b57a84478c9883023fbe5d64ac277b/Source/Akagi/sup.c

我做了以下修改:

  • 不使用 ntdll.lib 文件(安装 DDK 后包含),改为通过 ntdll 获得 NTAPI
  • 提取关键代码
  • 修复 bug
  • 添加调用 COM 组件 IFileOperation 复制文件的功能

更多细节可参考开源的代码,地址如下:https://github.com/3gstudent/Use-COM-objects-to-bypass-UAC/blob/master/MasqueradePEB.cpp

代码实现了修改当前进程的 PEB 结构,欺骗 PSAPI,将其识别为 explorer.exe,接着调用 COM 组件 IFileOperation 实现文件复制

实际测试:

当前进程被修改为 explorer.exe,如下图

Alt text

文件复制成功,并且没有弹出 UAC 的确认框,实现了越权复制文件

0x05 实现方法 3:通过 powershell.exe 调用 COM 组件 IFileOperation

先通过 c#编译一个 COM 组件实现调用 COM 组件 IFileOperation 复制文件,接着通过 powershell 来调用这个 COM 组件

1、编写 COM 组件

代码参考地址:https://github.com/FuzzySecurity/PowerShell-Suite/tree/master/Bypass-UAC/FileOperations/FileOperations

编译成功后生成 FileOperation.dll

注:Ruben Boonen(b33f@FuzzySecurity) 参考的源工程:https://github.com/mlaily/MSDNMagazine2007-.NET-Matters-IFileOperation-in-Windows-Vista

他在此基础上做了修改(修改类名等),使得 powershell 能够直接调用 COM 组件,这个功能很棒

2、通过 powershell 来调用这个 COM 组件

有以下两种方式:

(1) [System.Reflection.Assembly]::LoadFile($Path)

直接加载文件

(2) [Reflection.Assembly]::Load($bytes)

将文件压缩为字符串保存在数组中,可参考 Matthew Graeber 的方法,地址如下:http://www.exploit-monday.com/2012/12/in-memory-dll-loading.html

能够直接输出可供使用的 powershell 代码

方法 3 完整的实现代码可参考:https://github.com/FuzzySecurity/PowerShell-Suite/blob/ebbb8991a8a051b48c05ce676524a1ba787dbf0c/Bypass-UAC/Bypass-UAC.ps1

实际测试:

执行 powershell 脚本,加载 COM 组件 IFileOperation,由于 powershell.exe 为可信进程,所以不会弹出 UAC 的确认框,成功实现越权复制文件

0x06 利用分析

COM 组件 IFileOperation 适用于 Win7-Win10,所以越权复制的方法也是可用的

对于 explorer.exe,加载高权限的 COM 组件不会弹出 UAC 的对话框。

本文已经实现了模拟 explorer.exe 的方法,那么是否有其他可用的 COM 组件呢?又能完成哪些“提权操作呢”?

0x07 小结

本文介绍了通过 COM 组件 IFileOperation 越权复制文件的三种方法,整理并开发了实现代码,可用于直接测试。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

魄砕の薆

暂无简介

文章
评论
26 人气
更多

推荐作者

迎风吟唱

文章 0 评论 0

qq_hXErI

文章 0 评论 0

茶底世界

文章 0 评论 0

捎一片雪花

文章 0 评论 0

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文