IT学习网 - 爱学习 - 最具影响力综合资讯网站 -- 中国IT界的领航者!
热门关键字:      88888  as  xxx
站外
广告
站外
广告

巧用COM接口IARPUninstallStringLauncher绕过UAC

发布时间:2016-10-21 05:45文章来源:互联网文章作者: 佚名点击次数:
前言 最近笔者对之前利用windows卸载接口绕过UAC的研究资料进行了整理,这里指的并非Github这份代码中的模拟鼠标点击的方式,而是编码实现程序自身调用windows卸载接口从而绕过UAC的方式。 简介 细心的朋友可能会发现,通过windows的控制面板卸载程序的时候不

前言

最近笔者对之前利用windows卸载接口绕过UAC的研究资料进行了整理,这里指的并非Github这份代码中的模拟鼠标点击的方式,而是编码实现程序自身调用windows卸载接口从而绕过UAC的方式。

简介

细心的朋友可能会发现,通过windows的控制面板卸载程序的时候不会触发UAC框,那么其背后的原理是什么呢?主要有三点:

1.调用位于CARPUninstallStringLauncherCOM组件中IARPUninstallStringLauncher接口的LaunchUninstallStringAndWait方法来实现卸载程序。

2.获取autoelevate的IARPUninstallStringLauncher接口指针,这里实际就是将中完整性级别提升至高完整性级别,这一步在不可信的宿主程序中执行的时候会触发UAC窗口。

3.步骤2中的操作要在windows的白名单程序中执行才不会触发UAC框,哪些是白名单程序呢?位于系统目录%systemroot%下的很多exe都是白名单程序,比如说:记事本,计算器,桌面等等。

逆向分析控制面板的卸载功能

首先向控制面板的已安装程序列表中添加一个测试条目,要实现这里一点只需要在注册表键

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall下添加一个子键即可.该子键导出的reg文件模版如下:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\{18E78D31-BBCC-4e6f-A21D-0A15BBC62D49}]

"DisplayName"="利用COM接口ARPUninstallStringLauncher绕过默认等级UAC演示示例"

"UninstallString"="D:\\VSProject\\ElevateUI\\Release\\ElevateUI.exe"

"Publisher"="ExpLife"

"DisplayVersion"="1.0"

该模版中各个键名的具体含义请参见上图.其中{18E78D31-BBCC-4e6f-A21D-0A15BBC62D49}这个名称大家可以根据需要替换成任意字符串。

接下来将windbg附加到桌面进程,对创建进程的API函数CreateProcessW设置断点。

然后运行起来,接着在刚刚添加的测试条目上单击鼠标右键并选择右键菜单项。

这时断了下来,查看一下调用堆栈

可以看到,控制面板中的单击鼠标右键的卸载菜单项实际上是调用的appwiz.cpl模块中IARPUninstallStringLauncher接口的LaunchUninstallStringAndWait方法。

通过IDA加载appwiz.cpl,然后查看一下交叉引用图解

接着查看一下LaunchUninstallStringAndWait这个方法的反编译代码

这里IDA对于LaunchUninstallStringAndWait这个方法的几个参数识别有误.第一个参数是this指针,可以暂时不用理会,第二,第三,第四个参数的含义我们可以通过ReadUninstallStringFromRegistry这个函数的内部实现来进行推敲.该函数的功能根据函数名称字面的意思应该是从注册表中读取卸载字符串.反编译代码如下:
巧用COM接口IARPUninstallStringLauncher绕过UAC
本文由 IT学习网 整理,转载请注明“转自IT学习网”,并附上链接。
原文链接:http://www.ourlove520.com/Article/diannao/wangluo/519312.html

标签分类:

上一篇:上一篇:利用bash特性的攻击方式浅析,使用Sqlmap的你可能踩中了“蜜罐”
下一篇: 下一篇:没有了
无觅关联推荐,快速提升流量