mfc HackerTools进程令牌设置为debug权限
博客园:https://www.cnblogs.com/ndyxb/p/12734717.html
要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,需要当前进程具有SeDeDebug权限。
实现原理:
获取进程的访问令牌,然后将访问令牌的权限修改为指定权限。但是系统内部并不直接识别权限名称,而是识别LUID值,所以需要根据权限名称获取对应的LUID值,之后传递给系统,实现进程访问令牌权限的修改。
实现过程:
1.获取指定进程的访问令牌(需要获取TOKEN_ADJUST_PRIVILEGES权限的令牌句柄)
2.获取本地系统指定特权名称的LUID值(LUID值相当于该特权的身份标号)
3.创建一个新的进程令牌特权结构体,并对其进行赋值(新特权的数量,特权对应的LUID值以及特权的属性状态)
4.调用 AdjustTokenPrivileges 函数对进程令牌的特权进行修改
注意点:
AdjustTokenPrivileges返回TRUE,并不代表特权设置成功,还需要使用GetLastError来判断错误码返回值。
若错误码返回值为ERROR_SUCCESS,则表示所有特权设置成功;若为ERROR_NOT_ALL_ASSIGNED,
则表示并不是所有特权都设置成功
换句话说,如果在程序中只提升了一个访问令牌特权,
且错误码为ERROR_NOT_ALL_ASSIGNED,则提升失败。如果程序运行在 Windows 7或者以上版本的操作系统,
可以尝试以管理员身份运行程序然后再测试
//************************************
// 函数名: CPrivilgeEscalationDlg::EnableDebugPrivilege
// 返回类型: BOOL
// 功能: 提升进程访问令牌权限
// 参数1: 需要提升权限的进程句柄
// 参数2: 特权名称
//************************************
BOOL CPrivilgeEscalationDlg::EnableDebugPrivilege(HANDLE hProcess, char* pszPrivilegesName)
{
HANDLE hToken = NULL;
//令牌权限结构体
TOKEN_PRIVILEGES tp; //打开进程令牌并获取进程令牌句柄
BOOL bRet = OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken);
if (FALSE == bRet)
{
MessageBox(L"打开进程令牌失败!");
return FALSE;
}
//获取本地系统的 pszPrivilegesName 特权的LUID值
bRet = LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
if (FALSE == bRet)
{
MessageBox(L"获取LUID值失败!");
CloseHandle(hToken);
hToken = INVALID_HANDLE_VALUE;
return FALSE;
}
//设置提升权限信息
//设置新提权的数量
tp.PrivilegeCount = 1;
//启用该特权
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //提升进程令牌访问权限
bRet = AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
if (FALSE == bRet)
{
MessageBox(L"提升进程令牌访问权限失败!");
CloseHandle(hToken);
hToken = INVALID_HANDLE_VALUE;
return FALSE;
}
else
{
//根据错误码判断是否是特权都设置成功
DWORD dwRet = GetLastError();
if (ERROR_SUCCESS == dwRet)
{
CloseHandle(hToken);
hToken = INVALID_HANDLE_VALUE;
return TRUE;
}
else if (ERROR_NOT_ALL_ASSIGNED == dwRet)
{
MessageBox(L"提升权限失败!,请以管理员身份运行");
CloseHandle(hToken);
hToken = INVALID_HANDLE_VALUE;
return FALSE;
}
}
CloseHandle(hToken);
hToken = INVALID_HANDLE_VALUE;
return FALSE;
}
mfc HackerTools进程令牌设置为debug权限的更多相关文章
- 进程已经被attach debug,如何解除其debug权限?
今天碰到一个问题,详情: 进程A创建了进程B,并且进程A在创建进程B的时候指定了debug权限: 我的进程C启动了一个Hook,然后系统将我的X dll载入到进程B中: 此时,用visual stud ...
- 提升进程权限为DEBUG权限
在网上也看到了一些提升进程令牌的函数但都不怎么好用,最后我还是从一个黑客后门程序的源代码中提取出了一个好的提升进程令牌的函数,不敢独享,跟大家分享下.那个后门真的写的很好... Hysia提示你: 这 ...
- IIS 之 Web 服务器上的 ASP.NET 进程模型设置
配置 Microsoft Internet 信息服务 (IIS) Web 服务器上的 ASP.NET 进程模型设置. processModel 节只能在 Machine.config 文件中进行设置, ...
- 在linux中添加ftp用户,并设置相应的权限
在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd ...
- redis密码设置、访问权限控制等安全设置
redis作为一个高速数据库,在互联网上,必须有对应的安全机制来进行保护,方法有2,如下. 1.比较安全的办法是采用绑定IP的方式来进行控制. 请在redis.conf文件找到如下配置 # If y ...
- linux中添加ftp用户,并设置相应的权限
在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd ...
- php创建文件夹后设置文件夹权限(转)
原文链接:http://www.phpstudy.net/b.php/69873.html PHP mkdir()无写权限的问题解决方法 使用mkdir创建文件夹时,发现这个函数有两个参数,第二个参数 ...
- (转)log4j日志级别设置成DEBUG时输出Html代码等问题:
log4j日志级别设置成DEBUG时输出Html代码等问题: 问题: log4j日志级别设置成DEBUG时会输出很多信息,包括一些Html代码 解决方案: log4j的控制是树形,所以在log4j.p ...
- Centos给文件设置了777权限仍不能访问解决方案
Centos给文件设置了777权限仍不能访问: 开启了SELinux导致 1.查看SELinux状态:/usr/sbin/sestatus -v ##如果SELinux status参数为enable ...
随机推荐
- python删除文件中某一行
将文本中的 tasting123删除 with open("fileread.txt","r",encoding="utf-8") as f ...
- 手写Spring框架,是时候撸个AOP与Bean生命周期融合了!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 嘎小子,这片代码水太深你把握不住! 在电视剧<楚汉传奇>中有这么一段刘邦 ...
- YARN调度器(Scheduler)详解
理想情况下,我们应用对Yarn资源的请求应该立刻得到满足,但现实情况资源往往是有限的,特别是在一个很繁忙的集群,一个应用资源的请求经常需要等待一段时间才能的到相应的资源.在Yarn中,负责给应用分配资 ...
- aptitude软件状态标志i、v、p
输出的结果分三栏,分别为状态.包名和描述.而状态则由p.i.v等字母表示.查询后才知道这些标识的含义是这样的: i - 包已经成功安装,并且所有依赖都满足. c - 包已经被移除,但是配置文件被保留. ...
- Apache HBase 1.7.1 发布,分布式数据库
Apache HBase 是一个开源的.分布式的.版本化的.非关系的数据库.Apache HBase 提供对数十亿个数据的低延迟随机访问在非专用硬件上有数百万列的行. 关于 HBase更多内容,请参阅 ...
- uiautomator2 入门教程
一.前言 在 Android 自动化测试方面,Google 提供了一个基于 Java 开发的库 UiAutomator,基本上支持所有的 Android 事件操作,使用简单. 在此基础上,有大佬开发出 ...
- 两万字Vue.js基础学习笔记(二)
Vue.js学习笔记(二) 4.模块化开发 ES6模块化的导入和导出 我们使用export指令导出了模块对外提供的接口,下面我们就可以通过import命令来加载对应的这个模块了 首先,我们需要在HTM ...
- MySQL检查与性能优化示例脚本
最近在玩python,为了熟悉一下python,写了个mysql的检查与性能优化建议的脚本. 虽然,真的只能算是一个半成残次品.也拿出来现眼一下. 不过对于初学者来说,还是有一定的参考价值的.比如说如 ...
- POJ1704 Georgia and Bob 题解
阶梯博弈的变形.不知道的话还是一道挺神的题. 将所有的棋子两两绑在一起,对于奇数个棋子的情况,将其与起点看作一组.于是便可以将一组棋子的中间格子数看作一推石子.对靠右棋子的操作是取石子,而对左棋子的操 ...
- odoo14开发之脚本自动生成代码
通过解析excel,自动生成odoo代码实现 一.首先做一个字段配置的excel模板 第二步.读取excel里面的模板,并写入到txt文件里 逻辑代码: # -*- coding: utf-8 -*- ...