热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用EVENTVWR.EXE和注册表劫持实现“无文件”UAC绕过

在对Windows 10进行深入挖掘并发现了一个非常有趣的绕过用户帐户控制(UAC)的方法之后(详细信息请参阅https://enigma0x3.net/2016/07/22/bypassing-ua

http://p9.qhimg.com/t015f7f55a36a93a46d.png

在对Windows 10进行深入挖掘并发现了一个非常有趣的绕过用户帐户控制(UAC)的方法之后(详细信息请参阅https://enigma0x3.net/2016/07/22/bypassing-uac-on-windows-10-using-disk-cleanup/),我决定花更多的时间来调查其他潜在的UAC绕过技术。目前,有一些开源的UAC绕过技术,其中大部分需要特权文件副本,然后使用IFileOperation COM对象或WUSA提取(Windows 7) 在一个受保护的系统位置进行DLL劫持。所有这些技术都需要向磁盘中导入一个文件(例如,将一个DLL导入到磁盘上来执行一个DLL劫持)。你可以在下面这个网址查看这些开源技术https://github.com/hfiref0x/UACME。这篇文章中提到的技术不同于其他开源方法,而是提供了一个有用的新技术,它不依赖于特权文件副本,代码注入,或者在磁盘上放置一个传统的文件(如DLL)。这种技术已经在Windows 7和Windows10上进行了测试,但希望以后能够在所有实施UAC的Windows版本上运行。

跟我在上篇文章中提到过的使用磁盘清理绕过UAC技术一样,探查Windows加载方式的一个普遍的技术是使用进程监视器分析进程执行时的行为。然而继续挖掘,在用ProcMon打开Windows事件日志时,我注意到,作为一个高阶进程,eventvwr.exe执行了一些关于HKEY_CURRENT_USER hive的注册表查询。

很早之前,理解HKEY_CLASSES_ROOT(HKCR)和HKEY_CURRENT_USER(HKCU)注册表项以及它们之间是如何相互作用的就是很重要的。HKCR仅仅是HKLM:SoftwareClasses和HKCU:SoftwareClasses的组合(想要了解什么是HKCR以及为什么HKLM和HKCU要进行合并,请点击下面的链接https://msdn.microsoft.com/enus/library/windows/desktop/ms724475(v=vs.85).aspx)。由于这些hive是合并的,通常可以通过在HKCU:SoftwareClasses中创建一些键来劫持HKCR:中的键。因为在这两个hive之间存在的这种关系,所以任何能够作用到HKCU和HKCR的高阶进程都会显得特别有趣,因为它可以篡改HKCU的值。作为一个普通用户,你将访问键写入了HKCU;如果你可以操作一个高阶进程来影响这些键,那么你就可能会干扰一个高度集成的进程试图执行的行为。

现在,有些人可能知道,有一些微软签署的二进制文件可以根据它们的manifest进行自动提升(更多关于这些二进制文件和manifest的信息请参阅:https://technet.microsoft.com/en-us/magazine/2009.07.uac.aspx)。通过使用系统工具“sigcheck”,我证实了“eventvwr.exe”使用它的manifest进行了自动提升:

http://p2.qhimg.com/t015e987e7f719abc2c.png

深入了解ProcMon输出的时候,我注意到“eventvwr.exe”与HKCUSoftwareClassesmscfileshellopencommand进行了交互,这导致了一个“NAME NOT FOUND”的结果。不久,eventvwr.exe又与HKCRmscfileshellopencommand的键进行了交互。当我查看HKCRmscfileshellopencommand时,我注意到默认值被设置为调用mmc.exe(微软管理控制台程序),这个程序负责加载管理Snap-Ins:

http://p8.qhimg.com/t0184a87a434a0260c1.png

如前所述, 一个高阶进程调用HKEY_CURRENT_USER (or HKCU)是十分有趣的。这通常意味着一个提升的进程与注册表的位置进行交互,而这个地方一个中阶进程就可以进行篡改。在这种情况下,我观察到“eventvwr.exe”在HKCRmscfileshellopencommand之前查询HKCUSoftwareClassesmscfileshellopencommand。由于HKCU返回值为“NAME NOT FOUND”,所以这个提升进程开始查询HKCR的位置:

http://p3.qhimg.com/t017ac5fcbf976d93b6.png

从输出可以看到, 作为一个高阶进程,“eventvwr.exe”在查询了HKCU和HKCR的注册表hive之后调用了mmc.exe。mmc.exe执行之后,它打开了eventvwr.msc,这是一个微软保存控制台文件,导致事件查看器进行显示。这看起来合乎常理,因为微软管理控制台(mmc.exe)装载的是微软保存控制台文件(.msc)。

根据这些信息,我决定创建一个“eventvwr.exe”所需的注册表结构来成功查询HKCU的位置而不是HKCR的位置。既然位于HKCRmscfileshellopencommand的默认值包含一个可执行文件,我决定只是用powershell.exe来替换这个可执行文件:

http://p6.qhimg.com/t0165ee5fb7e963a2af.png

当“eventvwr.exe”运行的时候,我注意到它成功查询/打开了HKCUSoftwareClassesmscfileshellopencommand:

http://p6.qhimg.com/t01305a3234ebc73f5f.png

这一行动有效地用我们的新值“powershell.exe”替代了之前的“mmc.exe”值。随着进程的继续,我观察到它最终调用了“powershell.exe”而不是“mmc.exe”:

http://p5.qhimg.com/t01168c54be7cdbf1a4.png

查看进程管理工具,我能够确认powershell.exe确实在以高阶权限运行:

http://p7.qhimg.com/t01c1cc6aa235323264.png

由于能够劫持进程的启动,所以简单地执行你希望的任何恶意PowerShell脚本/命令都是可行的。这意味着代码可以在一个高阶进程中执行(绕过UAC),并且没有向文件系统中导入DLL或任何其它文件。这会显著减少攻击者的风险,因为他们不用把传统的文件导入到文件系统中,而这正是最容易被AV/HIPS检测到的。

为了演示这种攻击, Matt Graeber和我构造了一个PowerShell脚本,在系统上执行的时候,会在当前用户的hive中创建所需的注册表项 (HKCUSoftwareClassesmscfileshellopencommand),设置默认值为任何你想通过command参数传递的值,运行“eventvwr.exe”,然后清理注册表条目。

你可以在下面的链接找到这个脚本:https://github.com/enigma0x3/Misc-PowerShell-Stuff/blob/master/Invoke-EventVwrBypass.ps1

在这个脚本中,我们提供了一个示例命令。这个特殊的命令使用PowerShell向“C: UACBypassTest”中写入“Is Elevated: True”。这可以证明这个命令是在一个高阶进程中执行的,因为“Is Elevated”等于“True”,并且输出文本文件被写入的目录中阶进程没有写入权限。


总结及应对措施

这种方法不同于其他的开源技术,主要是有以下几个非常方便的好处:

1.这种技术不需要导入传统的文件到文件系统。目前大多数开源UAC绕过技术需要引入一个文件(通常是一个DLL)到文件系统,这样做会增加攻击者被抓的风险。由于这种技术不需要导入传统的文件,攻击者的风险得到了显著减轻;

2.这种方法不需要任何进程注入,这意味着攻击不会被监控这种行为的安全解决方案标记;

3.不需要特权文件副本。大多数UAC绕过技术需要某种特权文件的副本来将一个恶意DLL复制到一个安全的位置,从而进行DLL劫持。而这种技术可以替代“eventvwr.exe”运行时启动加载所需的管理单元,可以简单地使用现有的、受信任的微软二进制文件在内存中执行代码。

应对措施:

1.将UAC的级别设置为“总是通知”;

https://img8.php1.cn/3cdc5/18414/711/b01827d3618d894a.png

2.从本地管理员群组中删除当前用户;

3.可以利用这种方法的特征监测这种攻击:查找HKCUSoftwareClasses中的注册表项,或者在HKCUSoftwareClasses中创建新注册表项。


推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • 详解 Python 的二元算术运算,为什么说减法只是语法糖?[Python常见问题]
    原题|UnravellingbinaryarithmeticoperationsinPython作者|BrettCannon译者|豌豆花下猫(“Python猫 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文讲述了孙悟空写给白骨精的信件引发的思考和反省。孙悟空在信中对自己的行为进行了反思,认识到自己胡闹的行为并没有给他带来实际的收获。他也揭示了西天取经的真相,认为这是玉皇、菩萨设下的一场陷阱。他还提到了师傅的虚伪和对自己的实心话,以及自己作为师傅准备提拔的对象而被派下来锻炼的经历。他认为路上的九九八十一难也都是菩萨算计好的,唐僧并没有真正的危险。最后,他提到了观音菩萨在关键时刻的指导。这封信件引发了孙悟空对自己行为的思考和反省,对西天取经的目的和自己的角色有了更深入的认识。 ... [详细]
  • Windows2003 IIS上设置301定向,实现不带www域名跳转带www域名的方法
    打开IIS,建一个网站,主机头用不带www的域名,随便指向一个目录。然后在这个网站上点右键,属性--主目录--重定向到URL如图ÿ ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 作者表示自己最近工作非常忙碌,无法抽出时间写作。他计划在未来的几天内写关于namespace与C#的名字解析以及数据库内容转化为excel文件下载的知识。 ... [详细]
author-avatar
-DJIAJIAN-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有