昨天微软更新的补丁对lsass服务中的一处拒绝服务漏洞进行了修补,由于是远程拒绝服务漏洞遂决定看看(毕竟这种类型的这十几年也没出几个)。补丁解压之后可以发现这次更新修改了大量的dll(可以用expand.exe,原因么,用了就知道哈哈),lsass.exe本身没有修改

可能是运气好吧,我当时直接选了lsasrv这个dll,事实证明运气不错。

可以看到这个dll是本地密码相关的动态链接库。

通过binbiff对比可以发现确实有不少修改的地方。

因此昨天都在看这个dll的补丁对比,当时找到一些可疑的函数,其中一个函数为NegGetExpectedBufferLength,该函数是用于返回buffer长度的,补丁对比图如下。

详细的代码对比(左侧为最新的dll),可以看到红框中增加了对v8这个变量的长度校验,当获取的长度大于FFFF时,直接返回一个负值,如下所示:

如果此时返回的结果为90312,则会运行到后面的LsapAllocateLsaHeap。

在LsapAllocateLsaHeap中会通过之前获取的长度分配一个内存,如果前面没有检测的话,这个地方会因为超长size分配一段超大内存,导致失败,从而分配一个空指针,该空指针会被放到esi+44的地址中,从而后面导致空指针引用?这是昨天对这个地方的函数的想法,但是由于不知道怎么触发运行到这个函数(想要构造的话只能反复看该处的汇编代码,这可是个费时间的活儿),因此就暂停了分析。

幸运的是今天Nicolas Economou发布的一篇blog,该blog中对这次lsass服务的问题进行了精彩的阐述,并给出了相关的poc

https://www.coresecurity.com/blog/unpatched-lsass-remote-denial-service-ms16-137

该漏洞实际出现在lsasv模块的NegGetExpectedBufferLength函数中,该函数没有对发送的smb中的一个长度域做限制,当漏洞存在时,该size会作为内存分配函数LsapAllocateLsaHeap分配内存时的 size,攻击者可以将该size设置为一个大size,从而导致该处分配失败,失败后会生成一个空指针

该空指针会在NegpBuildMechListFromCreds中被引用,从而导致lssas进程重启。

运行poc之后如下,lsass崩溃。

发送的exp数据包如下,其中的f6308301即为导致漏洞触发的长度域。

可以看到漏洞触发后崩溃的地址,如kb之后发现,最后的地址即在上面NegpBuildMechListFromCreds中的RtlEnterCriticalSection之后。

直接在NegGetExpectedBufferLength下断,单步到Neg_der_read_length前如下,此时的长度变量为0。

函数运行之后可以看到此时获取的长度为f6308201,即为wireshark抓包获取的长度

最后LsapAllocateLsaHeap分配一个巨大的内存失败,返回一个空指针,并保存到esi+44的位置,该空指针会在后面被引用从而导致崩溃。

从Nicolas Economou发布的blog中可以知道实际上这个漏洞在去年的时候就补过,不过当时微软补的地方是针对NegpBuildMechListFromCreds中的空指针进行修改,而且当时补的时候对该空指针的结构也没有完全补对,直到昨天的更新中才将其中的根源NegGetExpectedBufferLength中的长度进行了限制。

时间有限,实际上我这个地方对该空指针后续的操作没有详细的调试,可能有误差,有时间后续的调试再补上吧!

参考

https://www.coresecurity.com/blog/unpatched-lsass-remote-denial-service-ms16-137

转载请注明出处

转载于:https://www.cnblogs.com/goabout2/p/6280185.html

CVE-2017-0004相关lsass拒绝服务漏洞杂谈相关推荐

  1. 绿盟科技网络安全威胁周报2017.07 请关注OpenSSL拒绝服务漏洞CVE-2017-3733

    绿盟科技发布了本周安全通告,周报编号NSFOCUS-17-07,绿盟科技漏洞库本周新增49条,其中高危24条.本次周报建议大家关注 OpenSSL拒绝服务漏洞 CVE-2017-3733 .目前Ope ...

  2. 2345内核拒绝服务漏洞(1)

    概述 已经快2个月了吧,已经忘了是什么原因突然搞起了驱动漏洞,反正就是很有兴致地想挖掘一下驱动漏洞. 在网上了解了基本的驱动漏洞挖掘方法,主要是通过ioctl接口进行挖掘,已经有很多相关fuzz工具了 ...

  3. 多个Cisco产品报文远程拒绝服务漏洞

    多个Cisco产品报文远程拒绝服务漏洞 影响版本: Cisco NX-OS Cisco Nexus 5000 Cisco IOS Software Cisco IOS-XE Software Cisc ...

  4. Apache Tomcat 拒绝服务漏洞通告

    作者 | 360CERT 来源 | https://www.oschina.net/news/164556 报告编号:B6-2021-101501 报告来源:360CERT 报告作者:360CERT ...

  5. linux ntp 'ntp_request.c'远程拒绝服务漏洞,NTP拒绝服务漏洞(CVE-2015-5146)

    NTP拒绝服务漏洞(CVE-2015-5146) 发布日期:2015-07-01 更新日期:2015-07-10 受影响系统: NTP NTP 不受影响系统: NTP NTP 4.3.25 NTP N ...

  6. Linux Kernel ‘_xfs_buf_find()’函数空指针引用拒绝服务漏洞

    漏洞名称: Linux Kernel '_xfs_buf_find()'函数空指针引用拒绝服务漏洞 CNNVD编号: CNNVD-201303-071 发布时间: 2013-03-06 更新时间: 2 ...

  7. Ruby BigDecimal库拒绝服务漏洞

    影响版本: Yukihiro Matsumoto Ruby 1.8.x 漏洞描述: BUGTRAQ ID: 35278 CVE(CAN) ID: CVE-2009-1904 Ruby是一种功能强大的面 ...

  8. Linux kernel 本地拒绝服务漏洞

    漏洞名称: Linux kernel 本地拒绝服务漏洞 CNNVD编号: CNNVD-201302-387 发布时间: 2013-02-22 更新时间: 2013-02-22 危害等级:   漏洞类型 ...

  9. linux ntp 'ntp_request.c'远程拒绝服务漏洞,NTP 'ntp_request.c'远程拒绝服务漏洞

    NTP 'ntp_request.c'远程拒绝服务漏洞 发布日期:2013-12-30 更新日期:2014-01-09 受影响系统: NTP NTP 描述: --------------------- ...

最新文章

  1. 利用openfiler建立仲裁磁盘
  2. CPQuery, 解决拼接SQL的新方法
  3. Android 搜索框 search dialog 和 search widget
  4. WINCE对USB HOST供电的控制
  5. SQL注入天书-ASP注入漏洞全接触
  6. 基于Redis的分布式锁到底安全吗(上)?
  7. 在vs2005中使用Com连接SAP系统(一)
  8. nginx https配置
  9. UWidgetBlueprintLibrary
  10. 下一代微服务Service Mesh原理及实践
  11. SqlServer数据组织结构
  12. 常用的Linux命令行文本处理工具总结
  13. 域用用户怎么允许共享_怎么设置访问WIN10共享文件夹无需验证(输入用户名和密码)?...
  14. displaytag.properties
  15. 项目实战--Ego微商小程序
  16. 创建jira sprint_如何在Excel中创建高级sprint燃尽图
  17. 依赖注入框架-dragger2
  18. 罗翔文老师——实战派内部控制与内部审计专家,上海财经大学兼职教授
  19. access文档合并
  20. “顾客至上,服务至上”??

热门文章

  1. python天天学怎么样-Python天天学_03_基础三
  2. python学精通要多久-精通python要多久
  3. python爬虫简单实例-最简单的Python爬虫案例,看得懂说明你已入门,附赠教程
  4. python项目-这4个Python实战项目,让你瞬间读懂Python!
  5. python游戏编程入门电子书-请问自学 Python 有必要买课程吗?
  6. python里面temp是啥-请问Python里temp是什么意思?
  7. 零基础学编程学java还是python-零基础学编程,Java和Python你pick谁?
  8. python解释器运行代码-Python如何运行程序
  9. python项目开发实战-给缺少Python项目实战经验的人
  10. python使用教程视频-Python入门教程视频分享