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

灰帽python之旅_灰帽 Python之旅10相关推荐

  1. python 判断类型_青少年之Python编程课程安排lt;第一季gt;

    第一章    开启Python之旅 1.   你将了解什么是Python 2.   在电脑上安装并简单使用Python 3.   开始通过Python与计算机进行交流(编程) 第二章    变量 1. ...

  2. python len函数_知识清单Python必备的69个函数,你掌握了吗?

    本文纲要 Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很 ...

  3. python优化网站_[练习] 用PYTHON来优化网站中的图片

    我到公司以来,第一次加班,哇,加一晚上加一上午,现在还没下班的迹象,555,困. 对于网站中的一些关键的页面,多重缓存.静态化.程序代码优化--之外,为了提高用户打开页面的速度,图片是必须要优化的. ...

  4. python递归函数例题_递归案例python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而对应的中文翻译 "递归" 却表达了两个意思:"递 ...

  5. 网易图灵学院python公开课_图灵学院 Python全系列教程全栈工程师 python视频教程下载...

    大家怎么说? 老师很好,我认为,若想学好python,应该多练.多想.多看.学习资料不能仅限于老师给定的这些内容,这些毕竟是入门资料 老师讲的真不错,对于我们这种小白来说 也比较容易懂,虽然有些时候自 ...

  6. python列表拆包_详解python 拆包可迭代数据如tuple, list

    详解python 拆包可迭代数据如tuple, list 拆包是指将一个结构中的数据拆分为多个单独变量中. 以元组为例: >>> a = ('windows', 10, 25.1, ...

  7. load python txt文件_详解Python中numpy.loadtxt()读取txt文件

    为了方便使用和记忆,有时候我们会把 numpy.loadtxt() 缩写成np.loadtxt() ,本篇文章主要讲解用它来读取txt文件. 读取txt文件我们通常使用 numpy 中的 loadtx ...

  8. 文科生自学python要多久_怎么自学python,大概要多久?

    都让开!本人文科生,自学Python 2年半,作为一个曾经完全0基础,啥都不懂纯靠自学学会python的文科生,有一些不成熟的小建议可以分享一下. 首先不要觉着编程难,只要你认识26个英文字母,有一点 ...

  9. python是什么编程教程-编程python是什么_谁的Python教程最好?

    谁的Python教程最好? 建议你可以看看这里的<Python基础教程>和<Python学习手册>应该适合你的. 希望对你有用. 记得采纳呀~ Python中的9个代码小实例! ...

  10. python什么环境_什么是Python?(基础环境建设),NO2,搭建

    1. Python语言 1.1 Python语言的基本概念 Python 是⼀种极少数能兼具 "简单" 与 "功能强⼤" 的编程语⾔.你将惊异于发现你正在使⽤的 ...

最新文章

  1. dede使用方法----如何自定义字段
  2. 顺序表循环队列:创建初始化、入队、出队、获取队列头数据、计算队列有效数据长度...
  3. 深度剖析目标检测算法YOLOV4
  4. TCP/IP的分层负载
  5. Jzoj5317 Func
  6. 需求 录入多个班级的同学成绩并分别得出平均分
  7. 联合主键三种实现方式
  8. python范围数字求和_Python范围()
  9. 【Struts2】〖登录功能〗Struts2框架实现登录功能
  10. win10桌面背景图片与锁屏背景图片提取(注册表寻找提取路径——亲测可用)
  11. 我的世界游戏服务器改名
  12. 方法重载时,需要遵循以下三条原则
  13. ERROR: Error while obtaining start requests
  14. git rebase 命令 常用_如何使用Git Rebase
  15. [BZOJ1208]宠物收养所
  16. 使用pytest 出现collected 0 items解决
  17. 数学形态学之腐蚀算法
  18. webERP 于2011年6月12日发布 4.04.4 版
  19. [含lw+源码等]微信小程序点餐|外卖|餐饮系统+后台管理系统[包运行成功]
  20. hive-create table

热门文章

  1. 全国省份、地级市数据库
  2. linux下tree指令的用法
  3. eclips报错如下:
  4. 一套关于 Django 的笔试题
  5. 转:Jenkins+Jmeter+ant接口自动化框架for Linux学习
  6. 数模混合监控,视频如何联动报警、消防、门禁?
  7. K8S(Kubernetes)
  8. 还在996?等着进ICU?程序员不服!
  9. 期末前端web大作业:用DIV+CSS技术设计的动漫网站
  10. 北京计算机非全日制研究生哪个学校最好考,这所211,因校名被隐藏得很好,考上北京二环“有车有房”不是梦...