首页
社区
课程
招聘
[原创]《0day安全第二版》样章发布3:第22章 内核漏洞利用技术
2011-2-25 09:58 10729

[原创]《0day安全第二版》样章发布3:第22章 内核漏洞利用技术

2011-2-25 09:58
10729
各位读者:
     大家好!
     书接上回,昨天放出了21章的样章,今天放出“第22章 内核漏洞利用技术”的样章。如果说21章过于基础,是因为要照顾一些初学者,那么从第22章起,就真正开始讨论内核漏洞的原理,如何利用,利用的思路和方法,以及利用程序的编写等。本章会通过一个例子exploitme.sys来逐步展开这些内容。

第22章  内核漏洞利用技术 1
22.1  利用实验之exploitme.sys 1
22.2  内核漏洞利用思路 4
22.3  内核漏洞利用方法 5
22.4  内核漏洞利用实战与编程 5
22.5  Ring0 Shellcode的编写 5

22  内核漏洞利用技术
22.1  利用实验之exploitme.sys

为了浅显易懂的介绍内核漏洞利用技术,本节首先编写一个有漏洞的驱动(exploitme.sys)作为引子,逐步展开内核漏洞的利用思路和方法。
前面21.6.1节,helloworld.sys驱动的IoControl派遣例程没有处理任何IoControlCode,仅仅设置了IRP的完成状态和IRP的操作字节数,然后调用了IoCompleteRequest函数完成了IRP的处理,可以把这些理解为必做的工作。
这里我们在helloworld.c的基础上,修改其中的派遣例程DrvDispatch函数,并添加几个宏,如下代码所示。
/********************************************************************
    created:        2010/12/06
    filename:   D:\0day\ExploitMe\exploitme.c
    author:     shineast
    purpose:        Exploit me driver demo
*********************************************************************/
#define DEVICE_NAME L"\\Device\\ExploitMe"
#define DEVICE_LINK L"\\DosDevices\\ExploitMe"
#define FILE_DEVICE_EXPLOIT_ME 0x00008888
#define IOCTL_EXPLOIT_ME (ULONG)CTL_CODE(\
FILE_DEVICE_EXPLOIT_ME,0x800,METHOD_NEITHER,FILE_WRITE_ACCESS)
/**********************************************************************
驱动派遣例程函数
    输入:驱动对象的指针,pIrp指针
    输出:NTSTATUS类型的结果
**********************************************************************/
NTSTATUS DrvDispatch(IN PDEVICE_OBJECT driverObject,IN PIRP pIrp)
{
    PIO_STACK_LOCATION pIrpStack;//当前的pIrp
    PVOID Type3InputBuffer;//用户态输入地址
    PVOID UserBuffer;//用户态输出地址
    ULONG inputBufferLength;//输入缓冲区的大小
    ULONG outputBufferLength;//输出缓冲区的大小
    ULONG ioControlCode;//DeviceIoControl的控制号
    PIO_STATUS_BLOCK IoStatus;//pIrpIO状态指针
    NTSTATUS ntStatus=STATUS_SUCCESS;//函数返回值

    //获取数据
    pIrpStack = IoGetCurrentIrpStackLocation(pIrp);
    Type3InputBuffer = pIrpStack->Parameters.DeviceIoControl.Type3InputBuffer;
    UserBuffer = pIrp->UserBuffer;
    inputBufferLength = pIrpStack->Parameters.DeviceIoControl.InputBufferLength;
    outputBufferLength = pIrpStack->Parameters.DeviceIoControl.OutputBufferLength;
    ioControlCode = pIrpStack->Parameters.DeviceIoControl.IoControlCode;
    IoStatus=&pIrp->IoStatus;
    IoStatus->Status = STATUS_SUCCESS;// Assume success
    IoStatus->Information = 0;// Assume nothing returned

    //根据ioControlCode 完成对应的任务
    switch(ioControlCode)
    {
    case IOCTL_EXPLOIT_ME:
        if ( inputBufferLength >= 4 && outputBufferLength >= 4 )
        {
            *(ULONG *)UserBuffer = *(ULONG *)Type3InputBuffer;
            IoStatus->Information = sizeof(ULONG);
        }
        break;
    }   
    //返回
    IoStatus->Status = ntStatus;
    IoCompleteRequest(pIrp,IO_NO_INCREMENT);
    return ntStatus;
}
从上面的代码可以看出,exploitme.sys驱动创建的设备名称为“\Device\ExploitMe”,符号链接名称为“\DosDevices\ExploitMe”。根据21.6.3节,在Ring3就可以通过设备名称“\\.\ExploitMe”打开设备,并得到设备句柄,进而使用DeviceIoControl函数来调用驱动的派遣例程,与驱动进行交互。

。。。。。。(详见附件中的样章)

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (11)
雪    币: 678
活跃值: (101)
能力值: ( LV2,RANK:150 )
在线值:
发帖
回帖
粉丝
StudyRush 3 2011-2-25 10:02
2
0
继续期待接下来的样章。
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
dwboy 2011-2-25 10:05
3
0
先占位再细读
雪    币: 322
活跃值: (113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
高军 2011-2-25 10:20
4
0
认真听课!!!
雪    币: 70
活跃值: (64)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
yiyiguxing 1 2011-2-25 10:31
5
0
顶东辉,啥时候出书。。我去买本
雪    币: 955
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nemesis进 2011-2-25 10:48
6
0
现在工作了 买大件买不起  但是看雪的书我是一定支持的  期待第二版
雪    币: 146
活跃值: (182)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
instruder 4 2011-2-25 11:58
7
0
啥时候放书哈~~
希望可以有更多的新漏洞利用技术
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nwgao 2011-2-25 13:16
8
0
过来顶啊!!!!哈哈
雪    币: 2321
活跃值: (4028)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
熊猫正正 9 2011-2-25 22:22
9
0
大哥,别忽悠我们这些小菜了,老是调我们的味口
~~赶紧上架吧~~~一定支持!为了傻傻的理想,一个字“买”,砸锅卖铁也要买!期待!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hqxly 2011-2-27 10:41
10
0
学习 , 支持
雪    币: 1149
活跃值: (783)
能力值: ( LV13,RANK:260 )
在线值:
发帖
回帖
粉丝
ycmint 5 2011-2-27 10:51
11
0
看到正正大大,这句话,这个月,不吃盖饭,省钱也得买这本书。。。。。
雪    币: 7670
活跃值: (148)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guobing 2011-2-27 10:56
12
0
快点上架吧。。。等不及了。。。
游客
登录 | 注册 方可回帖
返回