十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows提权实战:从信息收集到快速定位可用exp的完整流程

Windows提权实战:从信息收集到快速定位可用exp的完整流程 做Windows安全测试的朋友应该都有过这种体验费劲拿到一个普通用户权限的shell之后下一步就是想怎么把权限提上去。这时候最核心的一件事就是快速找到合适的exp。很多新手一上来就抱着CVE列表从头翻到尾效率低不说还容易翻到一堆跑不通的POC。我今天就把自己平时在授权环境下做Windows提权时“快速查找exp”的那套流程拿出来聊聊从信息收集、补丁比对到漏洞库检索、POC验证一次性说清楚。我默认你是做授权渗透测试、CTF或者红队演练的所以下面所有步骤的背后都有一个前提目标机器是你有合法测试权限的机器或者是你自己搭的靶场。提权本身是个技术活但也是双刃剑所有操作一定要在法律允许的范围内做。1. 提权场景与快速查找exp的整体思路1.1 先搞明白你要“提”谁的全怎么提Windows提权本质上就是从低权限账户普通用户、服务账号拿到系统最高权限SYSTEM或Administrator的过程。很多人在这一步卡住不是因为没有exp而是根本没想明白该往哪个方向提。Windows的攻击面是很大的粗略分一下就有这么几类内核提权利用操作系统内核的漏洞这是最“硬核”的一条路比如某版本的驱动存在越权写入导致本地普通用户可以直接拿到SYSTEM权限。服务配置提权Windows服务如果以SYSTEM权限运行但服务路径或依赖的DLL文件普通用户可以写那就存在被替换的可能。令牌模拟提权当前账户如果拥有SeImpersonatePrivilege这类特权就可以通过一些工具模拟出SYSTEM令牌。计划任务与启动项提权普通用户如果能修改计划任务指定的执行程序或者往启动目录塞东西也有机会在下次管理员登录时执行命令。第三方软件提权目标机器上装了某些存在漏洞的软件以高权限运行可以利用它来提权。“快速查找exp”这四个字其实应该放在最后一步。前面最重要的是确定攻击面是什么内核服务令牌第三方软件方向错了翻再多的exp也是白搭。1.2 查找exp前的三件事授权确认、信息收集、攻击面锁定我之前见过不少人拿到shell之后第一件事就是到处搜“提权exp”结果搜出来一大堆2008年的老古董POC根本跑不了。实际上专业流程应该是先做三件事第一确认测试授权。不管是自己搭的靶机、内网演练的机器还是客户授权的范围都要心里有数。没有授权就干那是违法不是技术。第二做基础信息收集。在Windows命令行下有这么几条命令是必看的systeminfo whoami /priv whoami /groups net user 当前用户名 tasklist /svc sc query type service state all其中systeminfo是最关键的因为它会直接告诉你系统版本、体系结构x86还是x64、以及安装的补丁列表。后面查exp主要就是靠它。whoami /priv可以看到当前账号有没有特殊权限比如SeImpersonatePrivilege、SeAssignPrimaryTokenPrivilege这些直接决定了可不可能走令牌路线。第三锁定攻击面。根据上面收集到的信息判断这台机器大致的“弱点方向”是系统很老、补丁缺得多还是跑着一堆第三方软件又或者当前账号居然有SeImpersonatePrivilege。攻击面不同找exp的路径就完全不同。2. 建立自己的漏洞信息库从CVE编号到公开利用代码2.1 常见公开漏洞源与检索姿势想快速找到exp你脑子里得先有一张地图知道去哪查。大多数情况下我会按优先级用这几个地方NVD (National Vulnerability Database)美国的国家漏洞库信息最全但不直接放exp。CVE官网查漏洞描述、影响版本、CVSS评分。Exploit-DB老牌漏洞利用数据库提供公开的exp代码也支持本地searchsploit查询。Microsoft Security Response Center (MSRC)微软官方安全公告告诉你哪个补丁对应哪个漏洞。GitHub搜索POC/exp的宝库很多人会把写好的利用代码传到GitHub。Metasploit Framework (MSF)内置大量提权模块自带检索功能。检索的时候最简单的姿势就是拿“CVE编号exploit”、或者“漏洞名称POC”当成关键词去搜。但要不要直接搜CVE的完整利用代码我的经验是优先看Metasploit有没有现成模块实在没有再去GitHub上翻POC因为MSF模块经过社区验证稳定性比随手找的POC高很多。2.2 searchsploit的本地化使用让检索变成一条命令如果你要经常做Windows提权测试建议装一个Kali或者在任何Linux机器上安装searchsploit它是Exploit-DB的本地客户端。安装很简单apt install exploitdb -y searchsploit -u这里有个小技巧很多Windows提权exp在Exploit-DB里被归到了“Windows Local”分类下你可以用过滤条件直接看searchsploit windows local但searchsploit的搜索是按漏洞描述来的不是按“系统打没打补丁”来的。所以更好用的做法是先用系统信息匹配出漏洞编号再用编号去searchsploit里精确搜。比如searchsploit CVE-2021-34527它会列出所有标题或描述里带这个CVE编号的exp。不过要注意searchsploit的输出往往是比较杂的有些exp针对的是老版本系统直接用大概率是跑不起来的。这个后面我再细说怎么筛选。2.3 用KB编号和系统版本来快速匹配这是我最高效的一组操作现在说回systeminfo。它输出的补丁列表长这样[01]: KB4598242 [02]: KB4486153 [03]: KB4534271这些KB编号是什么是微软的更新补丁编号。每个补丁通常会修复若干个CVE漏洞。所以思路就很清晰了拿到补丁列表比对缺失补丁缺失的补丁对应的CVE就是我们找exp的目标。手动比对不现实因为每个系统版本每个月会有几十个补丁。我的做法是找一个叫Windows-Exploit-Suggester-NGWES-NG的开源工具。它本质上是拿systeminfo输出的补丁列表和一个动态更新的漏洞定义数据库比对最后输出一张“你可能能打的漏洞列表”。先获取系统信息systeminfo sysinfo.txt然后在本地Linux或Windows都行运行WES-NGpython wesng.py --update python wesng.py --definitions wesdefs.csv --systeminfo sysinfo.txt跑完之后它会输出类似“系统缺少KBxxxxxx潜在受影响CVE是CVE-xxxx-xxxxx”这样的结果。这个列表就是你的寻宝图。需要注意WES-NG输出的漏洞是“潜在可能”不代表POC一定可用需要你挨个去验证。3. 快速查找exp的实战路径与工具组合3.1 Windows内核提权exp的查找路径内核提权是最常见的方向因为漏洞一旦利用成功几乎可以直接拿到SYSTEM。查找路径大概是这样的第一步确认目标系统的大版本和具体Build号。Windows 10 1809、Windows Server 2016、Windows Server 2019这些版本的漏洞分布差异很大不能拿Server 2019的exp往Windows 10 2004上硬套。第二步用WES-NG或手动比对得到候选CVE列表。这时候我建议给候选漏洞排个优先级看CVSS评分9分以上的优先、看MSRC公告里写的“Exploitation More Likely”更容易被利用、看漏洞披露时间越新越好用因为系统没打补丁。但这些优先级是相对的实际还是得靠验证。第三步对候选漏洞在Exploit-DB和MSF里检索searchsploit windows local 2016 msfconsole msf search type:exploit platform:windows target:2016第四步如果MSF里有对应模块优先用MSF的如果没有再去GitHub搜POC。GitHub搜索也有技巧用“CVE编号poc”搜索按stars排序看最近更新日期选star最多的那个。注意看代码仓库的README很多作者会写明支持哪些Windows版本、编译环境是什么。3.2 第三方服务与驱动提权的exp查找路径很多情况下目标的内核补丁打得很全指望内核漏洞提权是没戏了。但我见过不少机器上跑着一些奇奇怪怪的第三方软件比如老版本的Java、Flash、打印机驱动、数据库客户端甚至是显卡驱动这些都可能成为提权突破口。核心思路是把第三方软件也当成一个“小系统”来做漏洞匹配。第一步把tasklist /svc的结果拿回来看看哪些服务在跑尤其是以SYSTEM或Administrator身份运行的服务。tasklist /svc /fo csv tasks.csv第二步找到可疑的服务进程用wmic查它的可执行文件路径和版本wmic process where namexxxx.exe get ExecutablePath,Version第三步拿软件名版本号去搜公开漏洞。比如搜“某某软件 某个版本 提权CVE”、“某软件 权限提升 exploit”。多数老软件的CVE都能在Exploit-DB或NVD里搜到。这里有个特别值得注意的方向驱动漏洞。很多第三方软件会安装内核驱动比如防病毒软件、硬件监控工具、老旧外设驱动。内核驱动一旦有漏洞那就是妥妥的提权入口。判断方法是在systeminfo里看“Hyper-V requirements”没用得看驱动文件列表或者搜“软件名driver vulnerability”。历史上很多著名的Windows提权漏洞比如CVE-2021-21551戴尔驱动、CVE-2023-29360某驱动都属于驱动层面的问题。3.3 提权辅助工具的使用与坑自动化不等于无脑跑市面上有不少提权辅助脚本除了WES-NG还有一个老牌的Windows-Exploit-Suggester旧版以及一些国内社区流传的“提权辅助包”。这些工具确实能大幅缩短查找exp的时间但用的时候有几个坑你必须知道第一工具输出的候选漏洞很多不代表都能利用。有的漏洞对应的是远程利用不是本地提权有的漏洞虽然影响当前版本但利用条件极其苛刻比如需要特殊系统配置。第二自动化工具可能误报。WES-NG是靠补丁列表来推导漏洞的如果目标机器是通过其他方式比如Windows Update之外的手动修复打了某些补丁可能没写入systeminfo那就会误报。第三不要盲目信任“最新”的exp。我在GitHub上看到很多POC滥用者可能只是为了钓鱼或者让自己出名代码里带了后门。所以任何从网上找的exp在运行之前都必须人工审一遍代码确认没有下载执行、没有反弹shell之类的恶意行为再放到隔离环境里跑。4. exp的筛选、分析与验证别拿随机POC就往目标上跑4.1 反读exp代码判断可靠性的五个维度我养成一个习惯拿到一个exp不管是谁发的先不急着执行而是先读代码。哪怕你C语言不熟、对PowerShell不熟也可以从几个地方判断它靠不靠谱说明文档是否有清晰的适用系统范围比如“Windows 10 19041-19044”、适用架构x86/x64。目标范围写的是“Windows 10”还是带具体Build号的。带具体Build号的更可靠说明作者测试过。编译脚本C/C写的exp是否自带Makefile或CMakeLists是否说明用什么编译器Visual Studio版本、MinGW等编译。引用来源GitHub上有没有多人fork、star数量、issue反馈。如果一个几百star的仓库没人反馈成功也没人反馈失败那大概率没人真正跑通过。代码完整性是不是有预留的“shellcode”或“外部下载”逻辑这类代码九成有问题直接放弃。记住一句话在提权这条路上“跑不起来”是常态“跑起来直接蓝屏”也不少见。所以代码审阅这一步不能省。4.2 隔离环境复现与编译必须在自己可控的VM里跑我强烈建议你在本地搭一套跟目标系统版本、补丁状态尽量一致的虚拟机环境先在虚拟机里验证exp是否有效再决定是否用到真实的授权环境里。虚拟机验证的关键点有三个系统版本和Build号要尽量一致至少大版本一致。补丁状态要模拟目标的补丁缺失情况。最简单的方法就是装完系统后干脆不更新目标是少打了哪些补丁你这边就保持相似的缺失状态。必须是专机专用不要和你的日常工作环境混在一起避免exp里的清理逻辑出问题殃及宿主机。编译exp时Windows下我一般用Visual Studio的开发者命令行选Release、x64Linux下交叉编译Windows目标的时候用MinGW-w64。需要注意的是很多老exp是在XP、Win7时代写的直接用新SDK编译会报一堆错。遇到这种问题要么花点时间改代码适配新环境要么干脆放弃找另一个exp。4.3 实际测试中的两条路线MSF模块 vs 本地exp我把这一节单独拿出来是因为很多人会纠结“用MSF还是自己跑exp”。我的建议做一个简单的对比维度Metasploit模块本地exp上手难度低meterpreter会话里直接use模块即可高需要编译、传文件、手动运行稳定性一般被社区验证过成功率相对稳定参差不齐依赖编译环境和目标状态被杀软检出概率较高MSF特征已经很明显较低但也不绝对灵活性低只能按模块预设来高可以自己调整参数和逻辑适合场景快速验证、靶场训练实战环境、研究调试我的习惯是先看MSF里有没有对应模块有就优先用因为省事。MSF在meterpreter会话里执行提权模块的姿势很简单meterpreter sysinfo meterpreter getuid meterpreter background msf use exploit/windows/local/某个模块 msf set SESSION 1 msf run但这招在真实业务环境里很容易被EDR拦下来所以到了真正复杂的授权测试里本地编译的exp和手写的载荷往往更管用。不过这些都是后话对新手来说先把MSF用熟练再研究本地exp这个顺序最舒服。4.4 容易忽略的风险蓝屏、数据破坏与痕迹清理说到提权测试很多新手只关心“成不成功”忽略了风险。我得专门提醒一下蓝屏风险内核提权exp一旦失败最轻的是直接蓝屏重则损坏系统文件。所以跑之前要权衡目标机器是不是核心业务机能不能重启有没有快照备份数据破坏某些exp会写文件、修改注册表如果路径写死或写错位置可能导致目标服务崩掉。痕迹清理提权exp运行后会在系统里留下大量日志和临时文件。在授权测试里测试结束后一定要按约定清理痕迹别把测试环境搞成一团乱麻。5. 常见问题与排查技巧实录5.1 找不到对应exp怎么办这是我被问得最多的问题WES-NG跑完了CVE也有但Exploit-DB、GitHub上都搜不到公开利用代码怎么办几条路可以走换攻击面。不要死磕内核提权回到服务配置、令牌、计划任务这些方向。比如当前账户如果带SeImpersonatePrivilege我建议你直接测试令牌模拟像PrintSpoofer、JuicyPotato这类公开工具在某些版本上依然好用前提是满足权限条件。换漏洞。有些CVE虽然公开了但只有技术细节没有完整exp。这时候可以关注安全研究员后续公布的PoC或者去MSF的GitHub提交记录里看看是否有人在开发对应模块。降级搜索。把关键词从“CVE-xxxx exploit”换成“漏洞名称 windows exploit”有时候作者写POC时没用CVE编号命名。自己写exp。这个对大多数人来说门槛太高但至少可以从阅读漏洞分析文章开始很多漏洞的原理是可以理解后手写利用代码的。5.2 exp编译报错、运行失败那些最常见的坑编译报错这件事我都记不清踩过多少回了。最常见的坑有这么几个架构不匹配目标系统是x64你编译的是x86版本兼容层虽然能跑但很多提权exp依赖的注入、API调用会直接失败。依赖缺失老exp依赖的库文件、Windows SDK头文件版本不对编译根本过不去。解决办法是装一个老版本的Visual Studio Build Tools或者把依赖的头文件手动补齐。运行环境变量不对某些exp需要管理员权限运行某些需要普通权限有些在服务会话里跑和交互式登录跑的结果完全不同。被杀毒软件拦截本地跑exp的时候Windows Defender经常出手拦截。在隔离测试环境里可以临时关掉Defender实时防护但在目标机器上不能这么干得靠混淆和免杀技术那就超出这篇文章的范围了。5.3 提权成功后的权限确认与“下一步”建议exp跑完怎么判断自己是不是真的提到SYSTEM了在meterpreter里可以这么看meterpreter getuid Server username: NT AUTHORITY\SYSTEM命令行模式则可以用whoami /groups | findstr S-1-16-12288看到TrustedInstaller或SYSTEM说明基本到顶了。但我还想多嘴一句提权拿到SYSTEM不代表万事大吉。在真实授权测试里后续的横向移动、敏感数据定位、权限维持每一步都要重新评估风险。新手最容易犯的错是拿到SYSTEM就膨胀在业务机器上乱翻文件、乱跑命令结果把测试搞成事故。技术是一步步来的敬畏心也是。5.4 注意事项速查表整理一个我常用的提权exp查找与测试注意事项清单方便你对照序号检查项说明1测试授权必须有书面或明确授权的范围否则一切免谈2信息收集完整性systeminfo、whoami /priv、tasklist、服务列表缺一不可3exp来源可信度优先MSF、Exploit-DB、知名安全研究员仓库谨慎下载小众POC4代码审查运行前必须审查确认没有外联、后门逻辑5隔离验证先在本地VM同版本系统测试成功再考虑目标环境6版本匹配系统版本、Build号、架构、补丁状态尽量匹配7风险预估蓝屏、数据损坏、业务中断提前和相关负责人确认8痕迹清理测试结束后按约定清理工具、临时文件、日志写在最后在Windows提权这条路上我自己也经历过翻遍几百个exp然后一个都跑不起来的挫败感。后来慢慢明白快速查找exp的核心从来不是“搜得快”而是“定位得准”——先认准攻击面再用补丁和版本信息锁定候选漏洞最后靠严格的代码审查和隔离验证筛掉废POC。这套流程走下来基本不会白忙活。最后再分享一个小习惯我会把自己每次测试过的exp按“系统版本补丁状态验证结果”整理成一个本地笔记时间久了就是一份非常私人的提权exp速查手册比任何公开工具都靠谱。
返回列表