笔者最近在学习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. CSS Sprite精灵图如何缩放大小

    transform:scale( x ): 语法为:transform: scale(x,y). 同时有scaleX, scaleY专门的x, y方向的控制. 例如:transform: scale( ...

  2. python脚本调用iftop 统计业务应用流量

    因公司服务器上部署应用较多,在有大并发访问.业务逻辑有问题的情况下反复互相调用或者有异常流量访问的时候,需要对业务应用进行故障定位,所以利用python调用iftop命令来获取应用进程流量,结合zab ...

  3. Hosts工作原理及作用

    Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开.其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”.当用户在浏览器中输入一个需要登录的网址时,系统会先检查系自己的Ho ...

  4. 进程fork

    fork用于父进程创建一个子进程 返回两次 返回-1表示错误 父进程中返回创建子进程的ID,大于0 返回0是表示进入子进程 创建的子进程会继承父进程的属性,比如打开的文件描述符.工作目录.根目录等等. ...

  5. 1 Struts2基本概述及其入门

    什么是Struts2? webwork+Struts1 一个基于MVC设计模式的web层框架,本质上相当于一个Servlet.. 在MVC设计模式中,Struts2作为控制器Controller来建立 ...

  6. ZeroTier 局域网组建工具

    无公网IP通过ZeroTier实现内网穿透 需求:想要在公司访问家里内网NAS,或是在家里访问公司服务 有固定的公网IP或动态的公网IP:常见的方案动态域名解析做端口转发方式等 无公网IP:常见的实现 ...

  7. Linux Kernel 5.5 最终删除 SYSCTL 系统调用

    导读 Linux Kernel 5.5 最终消除了支持sysctl系统调用的代码,该代码已被弃用了大约十年,目前对任何体系结构的现代系统都没有影响. 长期以来,Linux sysctl系统调用都不建议 ...

  8. Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)C

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;string s;pair<int,in ...

  9. C++面试常见问题——04链表的逆序与合并

    链表的逆序与合并 链表的逆序 已知一个链表的头指针为head,将该链表逆序. #include<iostream> using namespace std; struct Node{ in ...

  10. 110、Java中String类之字符串文本拆分

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...