`

一句代码提升进程权限

    博客分类:
  • VC
阅读更多

RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE,1,0,NULL);

这个函数封装在NtDll.dll中(在所有DLL加载之前加载),被微软严格保密,就是说你在MSDN上查不到关于他的任何信息。

.常量 SE_BACKUP_PRIVILEGE, "17", 公开
.常量 SE_RESTORE_PRIVILEGE, "18", 公开
.常量 SE_SHUTDOWN_PRIVILEGE, "19", 公开
.常量 SE_DEBUG_PRIVILEGE, "20", 公开


先来看看这个函数的定义(Winehq给出):

NTSTATUS RtlAdjustPrivilege
(
ULONG    Privilege,
BOOLEAN Enable,
BOOLEAN CurrentThread,
PBOOLEAN Enabled
)

 参数的含义:
Privilege [In] Privilege index to change.                         
// 所需要的权限名称,可以到MSDN查找关于Process Token & Privilege内容可以查到

Enable [In] If TRUE, then enable the privilege otherwise disable. 
// 如果为True 就是打开相应权限,如果为False 则是关闭相应权限

CurrentThread [In] If TRUE, then enable in calling thread, otherwise process. 
// 如果为True 则仅提升当前线程权限,否则提升整个进程的权限

Enabled [Out] Whether privilege was previously enabled or disabled.
// 输出原来相应权限的状态(打开 | 关闭)

 

 

很多人大概没有听说过他的大名,但是相信有很多人见过进程提权的过程
拷一段我写的提权上来吧

BOOL ImproveProcPriv()
{
    HANDLE token;
    //提升权限
    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&token))
    {
        MessageBox(NULL,"打开进程令牌失败...","错误",MB_ICONSTOP);
        return FALSE;
    }
    TOKEN_PRIVILEGES tkp;
    tkp.PrivilegeCount = 1;
    ::LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tkp.Privileges[0].Luid);
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    if(!AdjustTokenPrivileges(token,FALSE,&tkp,sizeof(tkp),NULL,NULL))
    {
        MessageBox(NULL,"调整令牌权限失败...","错误",MB_ICONSTOP);
        return FALSE;
    }
    CloseHandle(token);
    return TRUE;
}

 


看看吧,这个提权快要累死了...

但是 如果有这个函数就不一样了,你可以只用一个函数就实现这个功能,甚至功能远多于上面的代码...

通过恰当的IDE设置和必要的Defination,上面这个函数的功能你完全可以通过一行代码来实现。

RtlAdjustPrivilege(SE_DEBUG_NAME,1,0,NULL);

 

原文地址:http://bbs.pediy.com/showthread.php?t=104323

 

 

例子:强制关机

 

// ExitWindow.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>

//定义函数原型
typedef int (__stdcall *Func_RtlAdjustPrivilege)(ULONG, BOOLEAN, BOOLEAN, PBOOLEAN);

int main(int argc, char* argv[])
{
	//装载DLL
	HMODULE hModule = ::LoadLibrary("NTDLL.DLL");
	if(hModule == NULL) {
		printf("LoadLibrary error\n");
		return 0;
	}

	//得到导出函数的地址
	Func_RtlAdjustPrivilege RtlAdjustPrivilege = (Func_RtlAdjustPrivilege)GetProcAddress(hModule, "Func_RtlAdjustPrivilege");
	if(RtlAdjustPrivilege == NULL) {
		printf("GetProcAddress error \n");
		return 0;
	}
	

	//HANDLE hToken;
	//TOKEN_PRIVILEGES tkp;
	
	//取得系统版本
	OSVERSIONINFO osvi;
	osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if(GetVersionEx(&osvi) == 0) {
		return false;
	}

	if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) {
		/*
		.常量 SE_BACKUP_PRIVILEGE, "17", 公开
		.常量 SE_RESTORE_PRIVILEGE, "18", 公开
		.常量 SE_SHUTDOWN_PRIVILEGE, "19", 公开
		.常量 SE_DEBUG_PRIVILEGE, "20", 公开
		*/
		RtlAdjustPrivilege(19, 1, 0, NULL);
	}

	//强制关机, 不向进程发送WM_QUERYENDSESSION消息
	ExitWindowsEx(EWX_FORCE, 0);

	return 0;
}
 
分享到:
评论

相关推荐

    qt c++应用程序 进程崩溃 用于分析进程崩溃在哪一句代码,便于定位段错误,修改程序bug

    在实际的项目开发中,还可以通过集成第三方崩溃报告服务来进一步提升进程崩溃处理的效率。这些服务不仅可以自动捕获崩溃信息,还能提供一个友好的用户界面,方便用户报告错误,并将错误信息发送回开发团队进行分析。...

    VBring3强杀进程

    3. `mEnablePrivilege.bas`: 进程权限管理是强杀进程的关键,这个文件可能涉及如何启用或禁用系统特权,以允许程序执行需要管理员权限的操作,如结束其他进程。 4. `Form1.frm`: 这是VB应用程序的用户界面(UI)...

    操作系统专业课程设计进程管理进程间通信样本.doc

    进程的控制可以通过修改程序,让每个进程输出更复杂的字符串,如一句句话,来观察并发执行的效果。在此基础上,引入`lockf()`系统调用来实现进程互斥,确保同一时间只有一个进程能执行特定操作,防止数据不一致。 ...

    易语言进程结束专家源码.zip

    本压缩包“易语言进程结束专家源码.zip”提供了一份易语言编写的进程管理程序的源代码,这对于学习易语言和系统级编程的开发者来说是一份宝贵的参考资料。 首先,我们要理解什么是进程。在计算机科学中,进程是操作...

    操作系统-实验2进程控制管理-实验报告.doc

    2. 修改程序,使每个进程循环显示一句话。子进程分别显示'daughter...'和'son...',而父进程显示'parent...'. 这有助于深入理解进程间的同步和通信问题,因为不同的输出顺序可能会影响最终结果。 实验步骤涉及: 1. ...

    VB DLL插入到进程

    DLL(Dynamic Link Library)是Windows操作系统中的一个重要组成部分,它允许多个程序共享同一块内存空间中的代码和数据,从而节省资源并提高效率。"VB DLL插入到进程"这个主题涉及到的是如何将VB编写的动态链接库...

    linux一句话精彩问答

    在Linux操作系统的世界里,一句命令或一行代码往往能解决复杂的问题。"Linux一句话精彩问答"这个主题涵盖了Linux系统中的各种实用技巧和知识点,通过简洁明了的方式,帮助用户快速理解和应用。下面,我们将深入探讨...

    Linux一句话精彩问答

    本篇内容将围绕"Linux一句话精彩问答"展开,旨在通过简洁明了的方式,提供丰富的Linux相关知识。 1. **Linux基础** - **什么是Linux?** Linux是一种自由和开放源代码的操作系统内核,由林纳斯·托瓦兹创建,其上...

    Linux 一句话精彩问答

    【Linux 一句话精彩问答】 在Linux的世界里,每一行代码、每一个命令都可能蕴藏着丰富的知识与技巧。这里,我们通过一系列精炼的一句话问答,深入浅出地探索Linux操作系统的核心概念、常用命令以及系统管理的...

    查找窗口句并改名字并打开程序改内存

    标题中的“查找窗口句并改名字并打开程序改内存”是一个相当综合的IT概念,它涉及到几个关键的技术领域,包括Windows编程、进程管理和内存操作。接下来,我们将详细探讨这些知识点。 1. **Windows编程**:这是...

    田靖宇-day191

    1. **一句话木马**:在描述中提到的`("caidao")%&gt;`是一个典型的一句话ASP木马。它通过IIS(Internet Information Services)6.0运行,当攻击者向服务器发送包含恶意代码的HTTP请求时,木马会执行`request("caidao")`...

    C#编写病毒文本文档

    5. **进程和线程**:病毒可能创建新的进程或线程以执行恶意操作,学习如何在C#中控制进程和线程至关重要。 6. **反病毒策略**:了解如何检测和清除病毒,例如通过哈希检查、行为分析等,可以提高防范恶意软件的能力...

    第80天:红蓝对抗-AWD模式&准备&攻防&监控&批量1

    - **命令匹配**:通过命令行检测潜在的一句话木马。 - **监控特殊进程**:防止恶意进程运行。 - **防火墙设置**:权限允许的情况下,设置防火墙策略阻止未经授权的访问。 - **目录权限**:限制对敏感目录的修改...

    ghost2012远控源码

    "这句话暗示了源代码可能是用C++编程语言编写的,并且可能具有一定的时效性或稀缺性。VC++是Microsoft Visual C++的简称,是一款广泛使用的集成开发环境,特别适合编写Windows平台上的应用程序。由于源代码的获取...

    Tomcat Filter类型内存马与查杀技术学习1

    1. Web服务器管理页面 -&gt; 大马 -&gt; 小马拉大马 -&gt; 一句话木马 -&gt; 加密一句话木马 -&gt; 加密内存马 2. 其中,PHP内存马经常在AWD对抗赛中被用作常用手段。 以下是一个简单的PHP内存马示例,展示了基本的实现思路: ```...

    bbs系统源码要看看哦

    对于初学者或者希望提升C#技能的开发者来说,研究这样的源码可以直观地看到实际项目中的代码结构、类的组织方式、事件处理机制以及数据库交互等核心概念,从而加速学习进程。 在BBS系统中,我们可能会遇到以下知识...

    [C++] FBI-RAT_rat_feelv55_hungbhr_

    4. **权限提升**:RAT可能需要提升权限以执行某些高级操作,如修改系统设置、记录键盘输入或控制摄像头。学习如何在目标系统上获取管理员权限是必要的。 5. **隐蔽性和持久性**:RAT通常会尝试隐藏自己的存在,比如...

    1350多个精品易语言模块

    取注册表键句 柄.ec 取点颜色.ec 取焦点窗口句柄.ec 取特定目录模块.ec 取特征字.ec 取用户机器码模块.ec 取 窗口内所有控件标题.ec 取窗口句柄-外挂海万能模块1.53.ec 取系统信息.ec 取系统信息v2.1.ec 取系统信 息...

    gtkqq 源码

    7. **Linux编程**:了解Linux下的文件系统、进程管理、权限控制等相关知识。 8. **单元测试和调试**:源码中可能包含测试用例,可以学习如何编写和执行单元测试,以及使用调试器定位和解决问题。 9. **软件工程...

Global site tag (gtag.js) - Google Analytics