为什么会有这个需求就不用我多说了吧:)

目前在驱动中提权我知道的有三种办法

1.

该方法来源于stoned bootkit,主要原理是把services.exe的EPROCESS中的Token值取出来,直接赋值给需要提权的应用程序,

这种方法需要硬编码,并且有较大的机率蓝屏。主要是因为Token值会被释放和DeReference

2.

在进程创建时,使用

ZwOpenProcess、ZwOpenProcessTokenEx、ZwDuplicateToken和ZwSetInformationProcess(ProcessAccessToken)来把具有管理员权限

的token赋值给需要提权的程序

遗憾的是,在vista以后,微软限制了这种方法,会返回0xc00000bb,即STATUS_NOT_SUPPORTED

具体原因还需进一步分析

3.

第三种方法是前面两种的结合,主要原理是先把token duplicate出来,然后再通过硬编码偏移,把token赋值给需要提权的程序

Token在EPROCESS中定义为

    //
    // Security.
    //

    EX_FAST_REF Token;

EX_FAST_REF的定义如下:

typedef struct _EX_FAST_REF {
    union {
        PVOID Object;
#if defined (_WIN64)
        ULONG_PTR RefCnt : 4;
#else
        ULONG_PTR RefCnt : 3;
#endif
        ULONG_PTR Value;
    };
} EX_FAST_REF, *PEX_FAST_REF;

从这个结构体当中取Object,可以参考如下的函数

NTKERNELAPI
PVOID
FORCEINLINE
ExFastRefGetObject (
    __in EX_FAST_REF FastRef
    )
/*++

Routine Description:

    This routine allows the caller to obtain the object pointer from a fast
    reference structure.

Arguments:

    FastRef - Fast reference block to be used

Return Value:

    PVOID - The contained object or NULL if there isn't one.

--*/
{
    return (PVOID) (FastRef.Value & ~MAX_FAST_REFS);
}

MAX_FAST_REFS值为7

在win7 sp1下面,调用NtSetInformationProcess(ProcessAccessToken)会走到如下的代码

在PspAssignPrimaryToken函数中,在如下代码处跳走了,导致返回status_not_supported错误码

edi是EPROCESS, 这里是判断EPROCESS的PrimaryTokenFrozen字段值是否为真,如果为真,则出错

这个标志位是在PspUserThreadStartup函数中设置的,如下

驱动中如何给ring3层应用程序提权的更多相关文章

  1. ring0 与 ring3 层之间的交互

    在进行Windows的ring0层开发时,必不可免的要与 ring3 层进行交互.进行数据间的相互传输.可用的方法有DeviceIoCntrol,ReadFile.我平常都是用的DeviceIoCon ...

  2. LINQ To SQL在N层应用程序中的CUD操作、批量删除、批量更新

    原文:LINQ To SQL在N层应用程序中的CUD操作.批量删除.批量更新 0. 说明 Linq to Sql,以下简称L2S.    以下文中所指的两层和三层结构,分别如下图所示: 准确的说,这里 ...

  3. Windows x86/ x64 Ring3层注入Dll总结

    欢迎转载,转载请注明出处:http://www.cnblogs.com/uAreKongqi/p/6012353.html 0x00.前言 提到Dll的注入,立马能够想到的方法就有很多,比如利用远程线 ...

  4. Linux设备驱动中的阻塞和非阻塞I/O

    [基本概念] 1.阻塞 阻塞操作是指在执行设备操作时,托不能获得资源,则挂起进程直到满足操作所需的条件后再进行操作.被挂起的进程进入休眠状态(不占用cpu资源),从调度器的运行队列转移到等待队列,直到 ...

  5. windows 驱动开发入门——驱动中的数据结构

    最近在学习驱动编程方面的内容,在这将自己的一些心得分享出来,供大家参考,与大家共同进步,本人学习驱动主要是通过两本书--<独钓寒江 windows安全编程> 和 <windows驱动 ...

  6. 病毒木马查杀实战第020篇:Ring3层主动防御之基本原理

    前言 假设说我们的计算机中安装有杀毒软件,那么当我们有意或无意地下载了一个恶意程序后.杀软一般都会弹出一个对话框提示我们,下载的程序非常可能是恶意程序,建议删除之类的.或者杀软就不提示.直接删除了:或 ...

  7. Linux设备驱动中的IO模型---阻塞和非阻塞IO【转】

    在前面学习网络编程时,曾经学过I/O模型 Linux 系统应用编程——网络编程(I/O模型),下面学习一下I/O模型在设备驱动中的应用. 回顾一下在Unix/Linux下共有五种I/O模型,分别是: ...

  8. Ring0层创建事件,Ring3层接收

    在学习驱动过程中,一个很重要的内容就是Ring3层与Ring0层的通信,方法有很多种,互斥体,信号量,文件等等,用的比较普遍的,还是事件.所以在学习的过程中,做了一个简单的Demo,主要是体会一下方法 ...

  9. Linux设备驱动中的阻塞和非阻塞I/O <转载>

    Green 博客园 首页 新随笔 联系 订阅 管理 Linux设备驱动中的阻塞和非阻塞I/O   [基本概念] 1.阻塞 阻塞操作是指在执行设备操作时,托不能获得资源,则挂起进程直到满足操作所需的条件 ...

随机推荐

  1. 【Swift】图文混排,ios开发中在textfield或textView中插入图片

    在ios开发中,我们一般都是在textfield或者textView中输入文字.当我们需要插入图片的时候其实也是很简单的 我们需要利用的textfield,textView的属性化文本,将图片以附件的 ...

  2. python-文件操作和集合

    1.打开文件 如果文件不存在会报错 f = open('information.txt','r+') 2.读取文件 read 读取文件 readline 读取文件的一行内容 readlines 读取文 ...

  3. Redis安装与卸载

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.它支持丰富的数据类型,和高速的内存读写.正在逐步取代memca ...

  4. [USACO 12JAN]Mountain Climbing

    Description Farmer John has discovered that his cows produce higher quality milk when they are subje ...

  5. hdu 5885 FFT

    XM Reserves Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)T ...

  6. 【网络流】【BZOJ1001】狼抓兔子

    继续网络流的学习.... 题意简析:就是给你张图,叫你求最小割. 解题思路:最小割=最大流,按题意见图跑一次就好了. 附代码: #include<cstdio> #include<i ...

  7. ●BZOJ 3931 [CQOI2015]网络吞吐量

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3931 题解: 在最短路图上跑网络流,要开long long(无奈 BZOJ AC 不了,洛谷 ...

  8. POJ2774 很长的信息

    Description Little cat在Byterland的首都读物理专业.这些天他收到了一条悲伤地信息:他的母亲生病了.担心买火车票花钱太多(Byterland是一个巨大的国家,因此他坐火车回 ...

  9. dva-quickstart 与 create-react-app 比较(一)

    最近在学习 React ,  现对 dva-quickstart   与  create-react-app 比较 1. 安装, 两个都需要安装工具包:npm install -g create-re ...

  10. MyBatis 传入参数之parameterType

      在MyBatis的select,insert,update,delete这些元素中都提到了parameterType这个属性.MyBatis现在使用parameterType有基本类型和JAVA复 ...