代码:
本源码修改至老外最初公布的POC源码(无GUI版的直接利用代码,大家可以自己实现,这里就不放出了) 本文件包含了POC的详细说明: 老外最初放出的绕过win7 UAC的网址如下: http://www./misc/win7_uac_whitelist2.html win8.1的那个Dll劫持已经修复了,我们现在来劫持另外一个exe即可,windows可以劫持的exe有好几个... 源码中BypassUac_Inject.cpp是比较关键的一个文件,其他的一些文件除了进程内存间拷贝代码就是GUI相关的代码了。 该POC程序包括了: - GUI代码(大部分的代码都是UI相关代码,你可以自己写一个命令行版本的) - 错误处理/报告 代码 (便于程序出错后诊断) - 清理代码 (绕过UAC后,清理遗留在系统目录下的Dll) - 我们可以选择不同的目标进程来注入 (Explorer.exe是比较适合的一个进程,除此之外Calc.exe, Notepad.exe, MSPaint.exe等也可以) 其实代码没有那么复杂,真的。 *注意事项* - 针对于64位的操作系统编译成64位的程序,针对于32位操作系统编译成32位程序... - 如果你不小心将32位DLL注入到了64位进程中去了,注入过程中程序可能会奔溃,反之亦然... 所以32位对32操作系统,64位对64位操作系统... - 你选择的目标进程可能需要开启ASLR(地址随机化),如果你关闭了EXE的ASLR,那么目标进程也需要关闭ASLR。本质上来说,Kernel32.dll在两个进程的加载地址要一样,所以两个进程关于地址随机化的处理要保持一致。可以利用的系统进程基本上都开启了ASLR,所以编译选项默认即可。如果你注入过程中发现目标进程崩溃了,这个时候你可以检查一下进程资源管理器中ASLR的情况。 - 该代码多进程/多线程的情况是不安全的(因为黑DLL可能还会使用,所以你可能需要添加互斥体来防止伪DLL被检测删除) ** 利用的细节: ** 该代码利用系统的两个漏洞。第一个缺陷比较漏洞,但是也比较难修复。第二个漏洞DLL劫持比较容易修复,这不,win8.1微软就修复了那个经典的sysprep.exe的dll劫持。 漏洞1(普通权限拷贝文件到系统目录而不触发弹窗拦截): 1.1) 我们选择有微软数字签名的程序,例如:Explorer.exe. 1.2) 远程线程注入目标进程。(有没有神马限制呢? 只需要我们选择的进程与我们的主程序位于同一个(Session)会话中,Explorer.exe是一个比较好的目标进程。) 1.3) 被注入的代码创建一个IFileOperation的COM对象。(如果是win7,8,8.1默认UAC选项的话,并且目标进程是拥有微软版权和数字签名程序的话,是不会触发UAC提示的。) 1.4)被注入的代码使用IFileOperation接口将我们的黑Dll拷贝到指定系统文件中 1.5) 被注入的代码将启动带有盾牌的并且是UAC白名单的程序 1.6) 被注入的代码等待带有盾牌的并且是UAC白名单的程序的启动完成。 1.7) 被注入的代码使用IFileOperation接口删除黑Dll。 漏洞2(系统Dll劫持): BypassUacDll.dll是一个非常简单的动态链接库文件,以资源文件的形式嵌入到主程序BypassUac里面。 我们寻找可以Dll劫持的系统程序。 注意:我们移动/重命名/替换System32下的文件。你会发现如果你以普通权限进行了移动/重命名/替换等操作的话,会弹窗提示以管理员权限操作。所以我们需要前面提到的IFileOperation对象来帮我们完成这些操作。 如何寻找可以Dll劫持的程序呢,监控System32的进程,你会发现C:\Windows\System32\sysprep目录下的sysprep.exe会默认加载一个叫cryptbase.dll的动态链接库。 而这个cryptbase.dll是位于System32目录下面的,目前没有什么好的方法替换掉它,但是我们可以利用漏洞1来复制一个伪造的Dll到sysprep目录下面去,sysprep.exe默认会加载当前目录下的cryptbase.dll,如果找不到的话,才会去System32目录下寻找cryptbase.dll。 注入win8.1下sysprep.exe劫持已经失效了,我们采用另一个程序C:\Windows\System32\migwiz\migwiz.exe。 |
|
来自: firefox_zyw > 《UAC Pass》