灰帽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
的
灰帽python之旅_灰帽 Python之旅10相关推荐
- python 判断类型_青少年之Python编程课程安排lt;第一季gt;
第一章 开启Python之旅 1. 你将了解什么是Python 2. 在电脑上安装并简单使用Python 3. 开始通过Python与计算机进行交流(编程) 第二章 变量 1. ...
- python len函数_知识清单Python必备的69个函数,你掌握了吗?
本文纲要 Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很 ...
- python优化网站_[练习] 用PYTHON来优化网站中的图片
我到公司以来,第一次加班,哇,加一晚上加一上午,现在还没下班的迹象,555,困. 对于网站中的一些关键的页面,多重缓存.静态化.程序代码优化--之外,为了提高用户打开页面的速度,图片是必须要优化的. ...
- python递归函数例题_递归案例python
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而对应的中文翻译 "递归" 却表达了两个意思:"递 ...
- 网易图灵学院python公开课_图灵学院 Python全系列教程全栈工程师 python视频教程下载...
大家怎么说? 老师很好,我认为,若想学好python,应该多练.多想.多看.学习资料不能仅限于老师给定的这些内容,这些毕竟是入门资料 老师讲的真不错,对于我们这种小白来说 也比较容易懂,虽然有些时候自 ...
- python列表拆包_详解python 拆包可迭代数据如tuple, list
详解python 拆包可迭代数据如tuple, list 拆包是指将一个结构中的数据拆分为多个单独变量中. 以元组为例: >>> a = ('windows', 10, 25.1, ...
- load python txt文件_详解Python中numpy.loadtxt()读取txt文件
为了方便使用和记忆,有时候我们会把 numpy.loadtxt() 缩写成np.loadtxt() ,本篇文章主要讲解用它来读取txt文件. 读取txt文件我们通常使用 numpy 中的 loadtx ...
- 文科生自学python要多久_怎么自学python,大概要多久?
都让开!本人文科生,自学Python 2年半,作为一个曾经完全0基础,啥都不懂纯靠自学学会python的文科生,有一些不成熟的小建议可以分享一下. 首先不要觉着编程难,只要你认识26个英文字母,有一点 ...
- python是什么编程教程-编程python是什么_谁的Python教程最好?
谁的Python教程最好? 建议你可以看看这里的<Python基础教程>和<Python学习手册>应该适合你的. 希望对你有用. 记得采纳呀~ Python中的9个代码小实例! ...
- python什么环境_什么是Python?(基础环境建设),NO2,搭建
1. Python语言 1.1 Python语言的基本概念 Python 是⼀种极少数能兼具 "简单" 与 "功能强⼤" 的编程语⾔.你将惊异于发现你正在使⽤的 ...
最新文章
- dede使用方法----如何自定义字段
- 顺序表循环队列:创建初始化、入队、出队、获取队列头数据、计算队列有效数据长度...
- 深度剖析目标检测算法YOLOV4
- TCP/IP的分层负载
- Jzoj5317 Func
- 需求 录入多个班级的同学成绩并分别得出平均分
- 联合主键三种实现方式
- python范围数字求和_Python范围()
- 【Struts2】〖登录功能〗Struts2框架实现登录功能
- win10桌面背景图片与锁屏背景图片提取(注册表寻找提取路径——亲测可用)
- 我的世界游戏服务器改名
- 方法重载时,需要遵循以下三条原则
- ERROR: Error while obtaining start requests
- git rebase 命令 常用_如何使用Git Rebase
- [BZOJ1208]宠物收养所
- 使用pytest 出现collected 0 items解决
- 数学形态学之腐蚀算法
- webERP 于2011年6月12日发布 4.04.4 版
- [含lw+源码等]微信小程序点餐|外卖|餐饮系统+后台管理系统[包运行成功]
- hive-create table
热门文章
- 全国省份、地级市数据库
- linux下tree指令的用法
- eclips报错如下:
- 一套关于 Django 的笔试题
- 转:Jenkins+Jmeter+ant接口自动化框架for Linux学习
- 数模混合监控,视频如何联动报警、消防、门禁?
- K8S(Kubernetes)
- 还在996?等着进ICU?程序员不服!
- 期末前端web大作业:用DIV+CSS技术设计的动漫网站
- 北京计算机非全日制研究生哪个学校最好考,这所211,因校名被隐藏得很好,考上北京二环“有车有房”不是梦...