Sommaire

Cas concret : BlazeDVD 5.1 Professional

Nous allons étudier ici une vulnérabilité découverte en 2009 et disponible à l’adresse : https://packetstormsecurity.org/files/82927/BlazeDVD-5.1-PLF-Buffer-Overflow.html

Cet exploit pourra être effectif en utilisant un fichier plf que nous ouvrirons avec l’application. 

Commençons par déterminer combien d’arguments nous devons envoyer (écrire dans le fichier plf) afin d’écraser la structure SE.

Nous travaillerons sur un système Windows Vista.

obFichier = open(’blazesploit.plf’,’w’) 
obFichier.write("A"*608+"BBBBCCCC") 
obFichier.close()
images/10EP308.png

Nous voyons ici que nous avons deux solutions : soit un accès direct à EIP car on retrouve 41414141 dans EIP, soit en passant par le SEH puisque nous avons 43434343 dans le SE handler et 42424242 dans le next SEH.

Nous avons aussi ESP qui pointe sur notre buffer.

Regardons maintenant dans la table ASLR (!ASLRdynamicbase qui se trouve dans les plug-ins).

images/10EP309.png

Beaucoup de modules semblent ne pas utiliser l’ASLR ("randomization" des adresses), nous pourrions par exemple utiliser skinscrollbar.dll.

Nous écrasons EIP après 260 arguments. Nous pourrions donc utiliser un jmp esp, un call esp ou push esp/ret.

En recherchant dans les DLL, nous trouvons :

  • blazedvd.exe : 79 adresses (mais des null bytes !)

  • skinscrollbar.dll : 0 adresses

  • configuration.dll : 2 adresses, pas de null bytes

  • epg.dll : 20 adresses, ...