博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
alpha版出炉,实现win2008 service的session 0穿透
阅读量:7298 次
发布时间:2019-06-30

本文共 4419 字,大约阅读时间需要 14 分钟。

指定用户名,拿最小session,实现和用户ui交互。

这样,搞windows的自动化部署,就可以向前一大步啦。

比以前用psexec要用户名密码,指定session要先进多啦。

安全保密性也提高了。。

#include 
#include
#include
#include
#pragma comment(lib, "WtsApi32.lib")#pragma comment(lib, "advapi32.lib")#pragma comment(lib, "userenv.lib")using namespace std;HANDLE GetUserToken(DWORD dwSessionId){ HANDLE hImpersonationToken = 0; if (!WTSQueryUserToken(dwSessionId, &hImpersonationToken)) { printf(" WTSQueryUserToken ERROR: %d\n", GetLastError()); return FALSE; } DWORD dwNeededSize = 0; HANDLE *realToken = new HANDLE; TOKEN_USER *pTokenUser = NULL; PTOKEN_GROUPS pGroups = NULL; //twice call function if (!GetTokenInformation(hImpersonationToken, TokenUser, NULL, 0, &dwNeededSize)) { if (GetLastError() == ERROR_INSUFFICIENT_BUFFER && dwNeededSize > 0) { pTokenUser = (TOKEN_USER*)new BYTE[dwNeededSize]; if (!GetTokenInformation(hImpersonationToken, TokenUser, pTokenUser, dwNeededSize, &dwNeededSize)) { printf("GetTokenInformation ERROR: %d", GetLastError()); } } return hImpersonationToken; } return hImpersonationToken;}bool GetSessionUserName(DWORD dwSessionId, char username[256]){ LPTSTR pBuffer = NULL; DWORD dwBufferLen; if (!WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, dwSessionId, WTSUserName, &pBuffer, &dwBufferLen)) { printf(" WTSQuerySessionInformation ERROR: %d\n", GetLastError()); return FALSE; } lstrcpy(username ,pBuffer); WTSFreeMemory(pBuffer); return TRUE;}void Usage(void){ printf("==============Usage================\n" "path:\\callsession.exe 'system-admin' 'path:\\xxx.exe start'\n" "==============Usage================\n");}int main(int argc, char **argv){ if(argc==1) { Usage(); return FALSE; } else if(argc==3) { LPSTR lpUsername = argv[1]; LPSTR lpCmdLine = argv[2]; DWORD session_id = -1; DWORD session_count = 0; WTS_SESSION_INFOA *pSession = NULL; char username[256]; BOOL blFound = FALSE; //EnumerateSessions if (!WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pSession, &session_count)) { printf("WTSEnumerateSessions ERROR: %d", GetLastError()); return FALSE; } //Get the right user and his session id for(DWORD i = 0; i < session_count; ++i) { GetSessionUserName(pSession[i].SessionId,username); //if( (pSession[i].State == WTSActive) && (pSession[i].State != WTSDisconnected) ) if(!strcmp(lpUsername, username)) { printf("\tSession user's name = %s\n",username); session_id = pSession[i].SessionId; printf("\tsession_id = %d\n",session_id); blFound = TRUE; break; } } if (!blFound){ printf("No login username %s found.", lpUsername); return FALSE; } WTSFreeMemory(pSession); //free meme heap //Duplicate User Token HANDLE hTokenThis = GetUserToken(session_id); HANDLE hTokenDup = NULL; if (!DuplicateTokenEx(hTokenThis, TOKEN_ALL_ACCESS, NULL, SecurityIdentification, TokenPrimary, &hTokenDup)) { printf("DuplicateTokenEx ERROR: %d\n", GetLastError()); return FALSE; } if (!SetTokenInformation(hTokenDup, TokenSessionId, &session_id, sizeof(DWORD))) { printf("SetTokenInformation Error === %d\n",GetLastError()); return FALSE; } //init this process info STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(STARTUPINFO)); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); si.cb = sizeof(STARTUPINFO); si.lpDesktop = "WinSta0\\Default"; //LPVOID pEnv = NULL; DWORD dwCreationFlag = NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE; //CreateEnvironmentBlock(&pEnv, hTokenDup, FALSE); if (!CreateProcessAsUser(hTokenDup, NULL, lpCmdLine, NULL, NULL, FALSE, dwCreationFlag, NULL, NULL, &si, &pi)) { printf("CreateProcessAsUser Error === %d\n",GetLastError()); return FALSE; } printf("OK"); } return 0;}

  

转载地址:http://ztfnm.baihongyu.com/

你可能感兴趣的文章
Alpha 冲刺报告(3/10)
查看>>
Event事件
查看>>
kill qz _e epi,eu,ex,exo out3
查看>>
表单验证,添加动态class
查看>>
java读取ACCESS数据库的简单示例
查看>>
linux设置开机自启动
查看>>
tab切换(js+css)
查看>>
Java实体类对象修改日志记录
查看>>
Android实例-手机震动(XE8+小米2)
查看>>
音频,视频项目
查看>>
关于expanded一级二级菜单数据的分组排序
查看>>
金环(2017佛山市选拔初中组)
查看>>
hexo搭建教程
查看>>
9月14日学习内容整理:初识别面向对象
查看>>
12月20日学习内容整理:博客系统之media配置
查看>>
Flask的闪现(message) 请求扩展 中间件 蓝图
查看>>
大三下学期第四周总结
查看>>
vue学习笔记(WebStorm安装)
查看>>
《深入浅出WPF》系列视频(特辑)——MVVM入门与提高(难度300+)
查看>>
numpy meshgrid 和 mgrid 的两个简单实例和解析
查看>>