博客园: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权限的更多相关文章

  1. 进程已经被attach debug,如何解除其debug权限?

    今天碰到一个问题,详情: 进程A创建了进程B,并且进程A在创建进程B的时候指定了debug权限: 我的进程C启动了一个Hook,然后系统将我的X dll载入到进程B中: 此时,用visual stud ...

  2. 提升进程权限为DEBUG权限

    在网上也看到了一些提升进程令牌的函数但都不怎么好用,最后我还是从一个黑客后门程序的源代码中提取出了一个好的提升进程令牌的函数,不敢独享,跟大家分享下.那个后门真的写的很好... Hysia提示你: 这 ...

  3. IIS 之 Web 服务器上的 ASP.NET 进程模型设置

    配置 Microsoft Internet 信息服务 (IIS) Web 服务器上的 ASP.NET 进程模型设置. processModel 节只能在 Machine.config 文件中进行设置, ...

  4. 在linux中添加ftp用户,并设置相应的权限

    在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd ...

  5. redis密码设置、访问权限控制等安全设置

    redis作为一个高速数据库,在互联网上,必须有对应的安全机制来进行保护,方法有2,如下. 1.比较安全的办法是采用绑定IP的方式来进行控制.  请在redis.conf文件找到如下配置 # If y ...

  6. linux中添加ftp用户,并设置相应的权限

    在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd ...

  7. php创建文件夹后设置文件夹权限(转)

    原文链接:http://www.phpstudy.net/b.php/69873.html PHP mkdir()无写权限的问题解决方法 使用mkdir创建文件夹时,发现这个函数有两个参数,第二个参数 ...

  8. (转)log4j日志级别设置成DEBUG时输出Html代码等问题:

    log4j日志级别设置成DEBUG时输出Html代码等问题: 问题: log4j日志级别设置成DEBUG时会输出很多信息,包括一些Html代码 解决方案: log4j的控制是树形,所以在log4j.p ...

  9. Centos给文件设置了777权限仍不能访问解决方案

    Centos给文件设置了777权限仍不能访问: 开启了SELinux导致 1.查看SELinux状态:/usr/sbin/sestatus -v ##如果SELinux status参数为enable ...

随机推荐

  1. js学习-es6实现枚举

    最近大部分时间再写dart,突然用到js,发现js不能直接声明一个枚举.搜索发现还是有实现的方式,于是总结一下. 目录 枚举特点 Object.freeze() Symbol 实现 体现不可更改 体现 ...

  2. Spring Boot邮箱链接注册验证

    Spring Boot邮箱链接注册验证 简单介绍 注册流程 [1]前端提交注册信息 [2]后端接受数据 [3]后端生成一个UUID做为token,将token作为redis的key值,用户数据作为re ...

  3. 【LeetCode】1248. 统计「优美子数组」

    1248. 统计「优美子数组」 知识点:数组:前缀和: 题目描述 给你一个整数数组 nums 和一个整数 k. 如果某个 连续 子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」. ...

  4. Hive——join的使用

    Hive--join的使用 hive中常用的join有:inner join.left join .right join .full join.left semi join.cross join.mu ...

  5. .net 5+ 知新:【1】 .Net 5 基本概念和开发环境搭建

    最近一两年搞了很多其它事情,.net web方面的基本没做,之前做过几个小的项目零星的学习了些,从.net core 发布后其实都没正真的系统学习过. 就是上手做项目,平时也有关注和看些资料,所以项目 ...

  6. 在windows中安装PHP MongoDB扩展

    最近做的一个项目中涉及到,ThinkPHP框架,MongoDB数据库,在本地windows 7 64位系统下,xamppv3.2.2集成的php环境运行测试程序.在网上百度后,按说明配置成功,现将步骤 ...

  7. Qt 入门 ---- 布局管理

    这是运行后的程序界面: 这是点击右上角"最大化"之后的程序界面: 接下来讲一下如何进行自动布局解决窗口拉伸问题. ① 原理: 在项目"设计"模式的左侧有如下两个 ...

  8. Python 接口之request ,headers格式不对

    复制heardes格式,模拟请求报错 原因:粗心,headers带了空格

  9. JMX远程连接JVM

    -Dcom.sun.management.jmxremote :允许使用JMX远程管理 -Dcom.sun.management.jmxremote.port=9999 :JMX远程连接端口 -Dco ...

  10. 如何区别php,jsp,asp,aspx随笔

    PHP是一种跨平台的服务器端的嵌入式脚本语言.它大量地借用C.Java 和 Perl 语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面.它支持目前绝大多数数据库.还有一点, ...