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

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

2011-2-25 09:58
10887
各位读者:
     大家好!
     书接上回,昨天放出了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函数来调用驱动的派遣例程,与驱动进行交互。

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

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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