利用未文档化API:RtlAdjustPrivilege 提权实现自动关机

这里主要是利用NTDLL.dll中未文档化的API:

RtlAdjustPrivilege

来实现提权、自动关机的功能。

RtlAdjustPrivilege定义如下:

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.
// 输出原来相应权限的状态(打开 | 关闭)

#include <iostream>
#include <windows.h>
#include <string>

using namespace std;

const unsigned long SE_DEBUG_PRIVILEGE = 0x13;
typedef int(_stdcall *_RtlAdjustPrivilege)(int, BOOL, BOOL, int *);
typedef int(_stdcall *_ZwShutdownSystem)(int);

int main(int argc, char* argv[])
{
     HMODULE hNtDll = LoadLibrary("NTDLL.dll");
     if (!hNtDll)
         cout << "Error.." << endl;
     _RtlAdjustPrivilege pfnRtlAdjustPrivilege = (_RtlAdjustPrivilege)GetProcAddress(hNtDll, "RtlAdjustPrivilege");
     _ZwShutdownSystem pfnZwShutdownSystem = (_ZwShutdownSystem)GetProcAddress(hNtDll, "ZwShutdownSystem");

     int nEn = 0;
     pfnRtlAdjustPrivilege(SE_DEBUG_PRIVILEGE, TRUE, FALSE, &nEn);
    pfnZwShutdownSystem(2);

    return 0;
}
时间: 2024-09-29 19:34:59

利用未文档化API:RtlAdjustPrivilege 提权实现自动关机的相关文章

NTDLL未文档化函数RtlGetNtVersionNumbers获取操作系统版本

作为新手,对获取操作系统版本号好奇过,因为曾经假象过一个场景:如果将来在windows xp环境下编译的程序,在windows xp跑会怎样, 在windows 2003,windows 7,windows 8又会怎样,如果程序在windows 7以上版本需要特殊处理又该怎样判断操作系统版本呢. 带着这个好奇也了解过GetVersion和GetVersionEx函数,他们的最低使用需求是Windows 2000,以下是一些官方的测试代码. GetVersion function #include

使用 Swagger 文档化和定义 RESTful API

大部分 Web 应用程序都支持 RESTful API,但不同于 SOAP API——REST API 依赖于 HTTP 方法,缺少与 Web 服务描述语言(Web Services Description Language,WSDL)类似的语言来定义使用者与提供者之间的请求和响应结构.由于没有充分的合同服务,许多 REST API 提供者使用 Microsoft Word 文档或维基页面来记录 API 用法.这些格式使协作和文档版本控制变得很困难,尤其对于有许多 API 或资源的应用程序,或者

使用Xcode HeaderDoc和Doxygen文档化你的Objective-C和Swift代码

在一个应用的整个开发过程中涉及到了无数的步骤.其中一些是应用的说明,图片的创作,应用的实现,和实现过后的测试阶段.写代码可能组成了这个过程的绝大部分,因为正是它给了应用生命,但是这样还不够,与它同等重要的还有代码的注释和文档编写.不管代码写的有多好,如果缺少了对应的好的注释文档,很有可能在将来带来麻烦.不幸的是,许多开发者都忽视或忽略了代码文档的重要性,而这非常糟糕,因为好的程序不仅仅是好的代码.它需要更多的东西. 谈到编写注释文档,显然我不是说仅仅简单的在实现文档里添加几行注释.肯定是更多的东

UML是文档化的语言

 The UML Is a Language for Documenting A healthy software organization produces all sorts of artifacts in addition to raw executable code. These artifacts include (but are not limited to) Requirements Architecture Design Source code Project plans T

文档化说明的重要性

用通过下面的两个示例,来说明官方给出的文档化说明的重要性.一个是MSDN上给出的说明,一个是GDIView GDI泄漏检测工具官方给出的说明.以这些官方说明为线索,可以找到我们程序出问题的地方,进而将问题解决掉. 1.聊天服务器时间的本地时区和夏时令的问题 (1)TL的聊天时间使用服务器时间,TL底层的XMPP客户端需要和服务器时间进行同步,进而获取服务器时间,用于聊天信息的时间戳.服务器传递过来的是UTC+0的时间,是字符串格式的年月日时间,不是整数时间.XMPP客户端要使用时差bias.mk

Qt的自文档化工具qdoc

在<人月神话>一书中,提及了软件工程中必备的一个概念:自文档化.所谓自文档化,就是把文档和代码合二为一,既增强了文档的可维护性,又增强了代码的可读性,一举两得,何乐而不为呢? 在Qt开发中,就有这样的自文档化工具:qdoc.使用qdoc,通常分三步走. 第一步,添加QDoc注释到必要的.cpp文件或.qdoc文件,在.h文件中添加QDoc注释是无效的. 第二步,编辑.qdocconf配置文件. 第三步,运行qdoc,默认生成HTML文档,命令如下: $xxx/bin/qdoc ./config

&lt;&lt;ABP文档&gt;&gt; Web Api 控制器

文档目录 本节内容: 简介 AbpApiController 基类 本地化 其它 过滤 审计日志 授权 防伪造过滤 工作单元 结果包装和异常处理 结果缓存 验证 模块绑定器 简介 通过Abp.Web.Api的nuget包,把ABP集成到Asp.net Web Api 控制器里.你可以像之前做的一样创建平常的Asp.net Web Api控制器,依赖注入会很好地为这些平常的ApiController工作,但你要把你的控制器继承于AbpApiController,它提供了许多好处和更好地集成到ABP

&lt;&lt;ABP文档&gt;&gt; Javascript Api

文档目录 本节内容: AJAX Notification Message UI Block & Busy Event Bus Logging Other Utility Functions ABP提供了一序列的对象和功能,使javascript开发容易且标准. 此处有一个ABP里api的列表,点击标题查看明细和使用方法. AJAX 使用AJAX调用服务端服务并计算返回值,因为ABP服务端代码返回一个标准的响应给AJAX调用,所以建议使用这个方法处理标准的返回值. Notification 显示自

xml.dom——文档对象模型API

文档对象模型,或者"DOM",是一个跨语言API的World Wide Web Consortium(W3C)来访问和修改XML文档.DOM的实现提供了一个XML文档树结构,或允许客户机代码从头开始建立这样一个结构.然后给访问结构通过一组对象提供著名的接口. 模块内容 xml.dom包含以下功能: xml.dom.registerDOMImplementation(name,factory) 注册factory函数名称的名称.factory函数应该返回一个对象实现 DOMImpleme