[转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)
Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)
https://www.freebuf.com/vuls/197309.html MS17- 再现的感觉。。。
一 漏洞背景
2月12日,微软发布2月份月度例行安全公告,修复了多个高危漏洞,其中包括Windows DHCP Server远程代码执行漏洞CVE-2019-0626。当攻击者向DHCP服务器发送精心设计的数据包并成功利用后,就可以在DHCP服务中执行任意代码,漏洞影响范围较大。针对此漏洞,启明星辰ADLab第一时间对其进行了详细分析。
二 漏洞影响版本
Windows 7
Windows 8.1
Windows 10
Windows Server 2008
Windows Server 2012
Windows Server 2016
Windows Server 2019
三 协议简介
DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议。DHCP通常用于集中管理分配IP地址,使client动态地获得IP地址、Gateway地址、DNS服务器地址等信息。DHCP客户端和DHCP服务端的交互过程如下图所示。

传输的DHCP协议报文需遵循以下格式:

DHCP包含许多类型的Option,每个Option由Type、Length和Data三个字段组成。

Type取值范围1~255,部分Type类型如下图所示。

DHCP服务在处理VendorSpecific 类型(Type=43)的Option结构存在安全漏洞。首先看下DHCP服务程序对Option的处理过程, ProcessMessage函数负责处理收到的DHCP报文,调用ExtractOptions函数处理DHCP的Option字段,传入函数ExtractOptions的参数1(v7)为DHCP报文指针,参数3(*(unsigned int *)(v5 + 16))对应指针偏移位置+16的数据,即Len字段。

ExtractOption函数如下所示。 v6 = (unsigned__int64)&a1[a3 - 1];指向报文末尾位置;v10=a1+240;指向报文中Option结构。在for循环中处理不同类型的Option结构,当type=43(Vendor Specific Information),传入指针v10和指针v6作为参数,调用ParseVendorSpecific函数进行处理。


ParseVendorSpecific函数内部调用UncodeOption函数。UncodeOption函数参数a1指向option起始位置,a2指向报文的末尾位置。UncodeOption函数存在安全漏洞,下面结合POC和补丁比对进行分析。
四 漏洞分析
构造一个DHCP Discovery报文,POC如下所示,POC包含两个vendor_specific类型的Option结构。vendor_specific1是合法的Option结构,Length取值0x0a等于Data的实际长度(0x0a),vendor_specific2是不合法的Option结构, Length取值0x0f大于Data的实际长度(0x0a)。

(1)DHCP服务器收到Discovery请求报文,对数据包进行处理。首先执行ExtractOptions处理Options,当处理vendor_specific类型的Option时,进入到ParseVendorSpecific进行处理。POC中构造一个合法的vendor_specific1,目的是为了绕过84~85行的校验代码,使程序顺利执行到ParseVendorSpecific函数。

(2)ParseVendorSpecific调用UncodeOption函数。
a. 32~43行在do-while循环中计算Option结构的 Length值之和,保存到v13,作为分配堆内存长度。POC中包含两个vendor_specific结构,首先处理vendor_specific1,计算v13,即vendor_specific1长度a,并且使v12指向下一个Option结构vendor_specific2,当进入43行while条件判断,由于vendor_specific2长度不合法,do-while循环结束。
b. 48行调用HeapAlloc分配堆内存,分配的内存大小v13=a。
c. 51~58行在for循环中依次将vendor_specific结构中的Data拷贝到分配的堆内存中。进入第一次循环时,v1指向vendor_specific1,v8指向末尾位置,满足条件v1<v8,55行调用memcpy将vendor_specific1的Data字段拷贝到分配的堆内存,拷贝长度Length=a。进入第二次循环,v1指向vendor_specific2,v8指向末尾位置,仍然满足条件v1<v8,再次调用memcpy将vendor_specific2的Data字段拷贝到分配的堆内存,拷贝长度Length=0xf。由于分配的堆内存大小只有a个字节,而拷贝的总长度=0x0a+0x0f,从而导致堆溢出。

五 补丁比对
补丁后的版本添加了对Length字段的有效性判断。

六 安全建议
及时安装安全补丁:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2019-0626
[转帖]Windows DHCPServer远程代码执行漏洞分析(CVE-2019-0626)的更多相关文章
- CVE-2012-0003 Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞 分析
[CNNVD]Microsoft Windows Media Player ‘winmm.dll’ MIDI文件解析远程代码执行漏洞(CNNVD-201201-110) Microsoft Wi ...
- CVE-2012-1876Microsoft Internet Explorer Col元素远程代码执行漏洞分析
Microsoft Internet Explorer是微软Windows操作系统中默认捆绑的WEB浏览器. Microsoft Internet Explorer 6至9版本中存在漏 ...
- Spring框架的反序列化远程代码执行漏洞分析(转)
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- thinkphp5.0.22远程代码执行漏洞分析及复现
虽然网上已经有几篇公开的漏洞分析文章,但都是针对5.1版本的,而且看起来都比较抽象:我没有深入分析5.1版本,但看了下网上分析5.1版本漏洞的文章,发现虽然POC都是一样的,但它们的漏洞触发原因是不同 ...
- Nexus Repository Manager 3(CVE-2019-7238) 远程代码执行漏洞分析和复现
0x00 漏洞背景 Nexus Repository Manager 3是一款软件仓库,可以用来存储和分发Maven,NuGET等软件源仓库.其3.14.0及之前版本中,存在一处基于OrientDB自 ...
- CVE-2017-7269—IIS 6.0 WebDAV远程代码执行漏洞分析
漏洞描述: 3月27日,在Windows 2003 R2上使用IIS 6.0 爆出了0Day漏洞(CVE-2017-7269),漏洞利用PoC开始流传,但糟糕的是这产品已经停止更新了.网上流传的poc ...
- CVE-2018-7600 Drupal核心远程代码执行漏洞分析
0x01 漏洞介绍 Drupal是一个开源内容管理系统(CMS),全球超过100万个网站(包括政府,电子零售,企业组织,金融机构等)使用.两周前,Drupal安全团队披露了一个非常关键的漏洞,编号CV ...
- phpMoadmin CVE-2015-2208 远程代码执行漏洞分析
原文:http://www.thinkings.org/2015/03/05/cve-2015-2208-phpmoadmin-exec-vul.html phpMoAdmin 是一个用PHP 开发的 ...
- Thinkphp5-0-X远程代码执行漏洞分析(2019-1-11)
周五下午爆洞能不能让人们好好休个周末! 分析过程 本次漏洞关键位置:/thinkphp/library/think/Request.php,lines:501由图可以看到在method函数中引入了可控 ...
随机推荐
- 10.scrapy框架简介和基础应用
今日概要 scrapy框架介绍 环境安装 基础使用 今日详情 一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被 ...
- Django-rest-framework 接口实现 限制:(Throttle)
限制:(Throttle) 主要用来限制 单独一个用户的 访问次数 自定义一个 限制类 创建一个Throttle.py(截流)文件 注意 一定要写两个方法 def allow_request(self ...
- Web开发人员vs网页设计师
Web开发人员vs网页设计师 我们都遇到过,但实际的区别是什么?如果您是该领域的新手,请阅读详细内容,这些内容比您想象的更重要. 经过几周(或几个月)的规划和准备,进行市场调查,与其他企业家交谈,现在 ...
- 7.01-beautiful_soup2
# pip install beautifulsoup4 from bs4 import BeautifulSoup html_doc = """ <html> ...
- poj2635
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/chaoweilanmao/article/details/33417423 这道题一看是大数题就知道 ...
- java实现随机四则运算
使用JAVA编程语言,独立完成一个包含3到5个数字的四则运算练习,软件基本功能要求如下: 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个 ...
- vue.js 二维码生成组件
安装 通过NPM安装 npm install vue-qart --save 插件应用 将vue-qart引入你的应用 import VueQArt from 'vue-qart' new Vue({ ...
- 初学Python——列表生成式、生成器和迭代器
一.列表生成式 假如现在有这样一个需求:快速生成一个列表[1,2,3,4,5,6,7,8,9,10],该如何实现? 在不知道列表生成式的情况下,可能会这样写: a=[1,2,3,4,5,6,7,8,9 ...
- 初学Python——装饰器
一.什么是装饰器 当我们做好一个产品之后,需要对它进行不断地维护,对某些函数增加一些功能.这个时候如果去修改源代码将是非常不合适的.(原因:1.原则上已经写好的函数尽量不去修改它,因为一旦修改可能会导 ...
- 环境部署(三):Linux下安装Git
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理,是目前使用范围最广的版本管理工具. 这篇博客,介绍下Linux下安装Git的步骤,仅供参考,当然,还是yum安装 ...
2019-03-15共23605人围观 ,发现 4 个不明物体