灰帽python之旅_灰帽 Python之旅10

10

Fuzzing Windows

驱动

对于

hacker

来说,攻击

Windows

驱动程序已经不再神秘。从前,驱动程序常被远程溢出,而

如今驱动漏洞越来越多的用于本地提权。

在前面我们使用

Sulley

找出了

WarFTPD

的溢出漏洞

WarFTPD

在远程的机器上由一个受限的用户启动,我们在远程溢出它之后,就会获得一个受限的权限,这个权限一般是很小的,如果似乎,很多信息都无

法获取,很多服务都访问不了。如果这时候我们拥有一个本地驱动的

exploit

,那就能够将权限提升到系统级别,

you are god now!

驱动在内核模式下运行,

而我们的程序在用户模式下运行,

为了在两种模式之间进行交互,

就要使用

IOCTLs

(

input/output controls

)

IOCTLs

处理代码有问题的时候,我们就能利用它获取系统权限。

接下来,我们首先要介绍下如何通过实现

IOCTLs

来和本地的设备进行联系,并且尝试使用

Immunity

变形

IOCTLs

数据。然后,学会使用

Immunity

提供的

driverlib

库获取驱动信息,以及从一个编译好的驱动文件中解码出重要的控制流程,设备名,和

IOCTL

代码。最后用从

drivelib

获得的数据构建测试数据,使用

ioctlizer

(我写的一个驱动

fuzzer

)进行一次

driver fuzz

10.1

驱动通信

几乎每个在

Windows

上注册了的驱动程序都有一个设备名和一个符号链接。用户模式的程序能够通过符号链接获得驱动的句柄,然后使用这

个句柄和驱动进行联系。具体函数如下:

HANDLE WINAPI CreateFileW(

LPCTSTR lpFileName,

DWORD

dwDesiredAccess,

DWORD

dwShareMode,

LPSECURITY_ATTRIBUTES lpSecurityAttribute

DWORD

dwCreationDisposition,

DWORD

dwFlagsAndAttributes,

HANDLE

hTemplateFile

);

第一个参数,填写文件名或者设备名,这里填写目标驱动的符号连接。

dwDesiredAccess

表示访问方式,读或者写(可以既读又写,也可以

不读不写)

GENERIC_READ

(0x80000000)

读,

GENERIC_WRITE

(0x40000000)

写。

dwShareMode

这里设置成

0

,表示在

CreateFileW

返回并且

安全关闭了句柄之后,

才能访问设备。

lpSecurityAttributes

设置成

NULL

表示使用默认的安全描述符,

并且不能被子进程继承。

dwCreationDisposition

参数设置成

OPEN_EXISTING (0x3)

,表示如果设备存在就打开,其余情况返回错误。最后两个参数简单的设置成

NULL

CreateFileW

成功返回一个有效的句柄之后,我们就能使用

DeviceIoControl

(由

kernel32.dll

导出)传递一个

IOCTL

给设备。

BOOL WINAPI DeviceIoControl(

HANDLE hDevice,

DWORD

dwIoControlCode,

LPVOID lpInBuffer,

DWORD

nInBufferSize,

LPVOID lpOutBuffer,

DWORD

nOutBufferSize,

LPDWORD lpBytesReturned,

LPOVERLAPPED lpOverlapped

);

第一个参数由

CreateFileW

返回的句柄。

dwIoControlCode

是要传递给设备启动的

IOCTL

代码。这个代码决定了调用驱动中的什么功能。参

lpInBuffer

指向一个缓冲区,

包含了将要传递给驱动的数据。

这个缓冲区是我们后面要重点操作的地方,

fuzz

数据将存在这。

nInBufferSize

为传

递给驱动的缓冲区的大小。

lpOutBuffer

lpOutBufferSize

,和前两个参数一样,不过是用于接收驱动返回的数据。

lpBytesReturned

为驱动实际返

回的数据的长度。最后一个参数简单的设置成

NULL

现在对于驱动的交互,大家应该不陌生了,接下来就祭出我们的

Immunity

,用它

Hook

DeviceIoControl

然后变形输入缓冲区内的数据,最

fuzzing every driver

10.2

Immunity fuzzing

驱动

我们需要使用

Immunity

强大的调试功能,挂钩住

DeviceIoControl

函数,在数据到达目标驱动之前,截获它们,这就是我们

Driver Fuzzing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值