笔者最近在学习UAC绕过的技术,通过对其他师傅的文章进行总结,成功利用DLL劫持绕过了UAC,并且可以以High Mandatory Level来启动进程。在此记录下学习过程,笔者也是初次接触,若各位师傅发现文章中的错误,望各位师傅斧正。

一、基础知识简述

UAC:

用户帐户控制(User Account Control,简写作UA C)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制,保护系统进行不必要的更改,提升操作系统的稳定性和安全性。

管理员一般以较小的权限去运行管理员任务,低权限的管理员被称为被保护的管理员,这些管理员在执行管理员任务时,可以通过用户交互界面来提升权限去执行任务。

普通用户执行管理员任务时会被要求提升到管理员权限,再去执行任务

DLL文件:动态链接库文件,多数可执行文件并不是一个完整的文件,它被分为多个DLL文件,大多数EXE程序执行的时候均会调用DLL文件。

当程序运行时调用DLL文件的过程:

1.程序所在目录

2.系统目录即 SYSTEM32 目录

3.16位系统目录即 SYSTEM 目录

4.Windows目录

5.加载 DLL 时所在的当前目录

6.PATH环境变量中列出的目录

可执行程序在调用DLL文件的过程中会在高优先级目录中查找(首先查找程序所在目录),当无法找到时会依次在较低优先级的目录中查找,当程序在高优先级的目录中找到所需的DLL文件后,则不会在低优先级的目录中查找。

可执行程序的提权执行:

一些可执行文件在执行时会自动提权运行,而且不会触发UAC机制。这些应用程序清单中都有<autoElevate>元素。

如何查看可执行文件清单中是否有<autoElevate>元素:

1、findstr/C:”<autoElevate>true” xxx.exe

2、使用sigcheck(微软数字签名工具)

附上工具链接:

https://docs.microsoft.com/zh-cn/sysinternals/downloads/sigcheck

这里使用一种可自动提权运行的可执行文件,且其调用dll的目录可以被写入恶意的dll文件,从而进行dll劫持:

C:\Windows\SysWOW64\SystemPropertiesAdvanced.exe

二、通过DLL劫持成功绕过UAC机制

这里使用的是C:\Windows\SysWOW64\SystemPropertiesAdvanced.exe文件,进行dll劫持从而绕过UAC机制

1、首先查看文件清单是否有<autoElevate>元素,可以默认提权执行

2、通过process monitor工具来查看SystemPropertiesAdvanced.exe执行时调用dll文件的过程

添加过滤器方便查找dll的调用过程:

Windowsapps目录是win10应用商店的缓存/下载应用程序的目录,允许用户对其进行写操作,可以通过构造恶意的DLL文件并将其放入,进行DLL劫持并绕过UAC机制

3、通过msfvenom构造payloads,将构造好的srrstr.dll放入到windowssapps目录下,通过构造的CMD.exe来绕过UAC

4、再次运行SystemPropertiesAdvanced.exe,查看DLL劫持效果,发现成功绕过UAC机制(备注:这里在运行时没有进行二次调用,无法正常运行原来的程序,可能会影响被劫持程序的稳定性,这里的恶意DLL仅仅弹出CMD,就算被劫持的程序崩掉,CMD已经成功弹出,对实验结果影响不大),新的CMD不会触发UAC提示可以用regedit命令进行测试:

可以看到,此时的cmd.exe具有高完整性级别:

除此以外还可以通过同样的方式由DLL劫持来创建会话,效果如下:

参考资料链接:

https://egre55.github.io/system-properties-uac-bypass/

https://blog.csdn.net/vlily/article/details/47338327

https://payloads.online/archivers/2018-06-09/1#0×02-%E5%AF%BB%E6%89%BE%E8%BF%87%E7%A8%8B

https://docs.microsoft.com/zh-cn/windows/win32/uxguide/winenv-uac

UAC绕过初探的更多相关文章

  1. UAC绕过思路(未完)

    ---恢复内容开始--- What is UAC?

  2. 关于父进程和子进程的关系(UAC 绕过思路)

    表面上看.在windows中. 假设是a进程创建了b进程,那么a进程就是b进程的父进程.反之,假设是b创建了a,那么b进程就是a的父进程,这是在windows出现以来一直是程序员们都证实的,可是在在w ...

  3. UAC 实现原理及绕过方法-打洞专用

    首页 新随笔 订阅 管理 随笔 - 7  文章 - 0  评论 - 0 UAC 实现原理及绕过方法   目录 0x01 UAC 实现方法(用户登陆过程)0x02 UAC 架构0x03 触发UAC0x0 ...

  4. 20165310 NetSec Week4 Exp2 后门原理与实践

    20165310 NetSec Exp2后门原理与实践 一.基础问题 例举你能想到的一个后门进入到你系统中的可能方式? 网页木马等访问网页导致 下载非官方源软件 随意下载邮件中不明程序等 例举你知道的 ...

  5. VC6.0 工程转到VS2010一些问题的描述及解决方法

    下列为VC6.0 工程转到VS2008一些问题的描述及解决方法 //////////////////////////////////////////////////////////////////// ...

  6. Powershell 渗透测试工具-Nishang

    Powershell 渗透测试工具-Nishang 分享到: 作者:V1ct0r 稿费:500RMB(不服你也来投稿啊!) 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 传送门 ...

  7. PowerShell攻击:nishang

    nishanhg 下载地址:https://github.com/samratashok/nishing   1.简介 nishang的使用是要在PowerShell 3.0以上的环境中才可以正常使用 ...

  8. UAC新解(有非正常手段可以绕过)

    360第一次注册是需要弹,可是以后就不弹了开机自启动不弹框,开机自启动不弹框 服务是system权限再说一句,一般程序也不需要过UAC系统启动项白名单.UAC有一个白名单机制.还有UAC也可以通过wu ...

  9. 使用Metasploit绕过UAC的多种方法

      一.用户帐户控制(UAC)简介 在本文中,我们将简要介绍一下用户帐户控制,即UAC.我们还将研究它如何潜在地保护免受恶意软件的攻击并忽略UAC提示可能给系统带来的一些问题. 1.什么是用户帐户控制 ...

随机推荐

  1. push 、pop 、unshift 、shift

    push .pop : 操作数组后面 unshift .shift :操作数组前面 push.unshift : 字母多的添加 pop .shift : 字母少的删除 push.unshift : 添 ...

  2. PTA的Python练习题(三)

    继续在PTA上编写Python的编程题. 从 第2章-11 求平方与倒数序列的部分和 开始 1. a,b=map(int,input().split()) s=0 while(a<=b): s= ...

  3. broadcom sdk command

    1.查看端口link状态 BCM.0>ps 2.查看vlan BCM.0>vlan show 3.查看pvlan BCM.0>pvlan show 4.CPU发包 BCM.0> ...

  4. List转为字符串

    2019-12-12 20:34:16 方法1: 转换后的格式为:"('111','112','1113')" List list = new ArrayList<>( ...

  5. Ionic3记录之核心代码分析

    app.module.ts app的根模块,一些插件的引用需要在这里声明,告诉APP如何组装应用: app.componet.ts app的根组件,主要用来APP启动时和启动后的操作;

  6. 在webView中的返回键

    在写webView中我们按一下返回键,退到上一个我们浏览的网页,到第一个页面时,按两下退出程序,且按一下时提示你在按一下退出程序 只要加上这个方法即可 public void onBackPresse ...

  7. ProgressBarForm 进度条

    ProgressBarForm public partial class ProgressBarForm : Form { private Panel panel1 = new System.Wind ...

  8. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  9. C/C++ — CreateThread 相关 API

    使用互斥对象: #include <windows.h> #include <iostream> #define THREADCOUNT 6 HANDLE ghMutex; D ...

  10. redis 之redis发布订阅

    Redis 通过 PUBLISH . SUBSCRIBE 等命令实现了订阅与发布模式. 一个Publisher,多个Subscriber模型 如下图所示,可以作为消息队列或者消息通道 主要应用: 一个 ...