2015-04-10 3 views
-2

J'étudie la vulnérabilité GHOST ou CVE-2015-0235. Je découvre que mon système est vulnérable. J'écris un programme de test pour voir l'effet de ceci. mais je ne vois rien. entendre est mes tentatives:gethostbyname buffer overflow

[email protected]:~$ uname -a 
    Linux debian 3.2.0-4-686-pae #1 SMP Debian 3.2.57-3 i686 GNU/Linux 
    [email protected]:~$ ./GHOST 
    vulnerable 
    [email protected]:~$ cat ghost-example.c 
    #include <string.h> 
    #include <stdio.h> 
    #define len 2000000 

    struct{ 
    char buf[len]; 
    char canary[32]; 
    }buffer; 

    void main() 
    { 
     memset(buffer.buf,'9',len); 
     buffer.buf[len-1]='\0'; 
     strcpy(buffer.canary,"the vulnerable part of program\n"); 
     gethostbyname(buffer.buf); 
     printf(buffer.canary); 
    } 
    [email protected]:~$ gcc ghost-example.c -o ghost-example 
    [email protected]:~$ ./ghost-example 
    the vulnerable part of program 

Je ne peux pas savoir ce qui se passe? Quelle est la différence entre gethostbyname(), gethostbyname_r(), gethostbyname2() ou gethostbyname2_r. J'ai beaucoup d'études à ce sujet. quelqu'un peut-il m'aider? merci.

+0

Pourriez-vous préciser en quoi exactement vous avez des problèmes? – Scis

+0

'char buf [2000000];' êtes-vous sûr? il semble trop grand –

+0

quand j'appelle gethostbyname_r dans le programme GHOST il provoque l'écrasement sur la mémoire dans la variable canary mais pas dans ce cas. hear est GHOST.c source: https://webshare.uchicago.edu/orgs/ITSec/itsec/Downloads/GHOST.c – elahe

Répondre

0

Peut-être que vous n'utilisez pas un tampon suffisamment grand? Je trouve cela difficile à croire, car 2000000 est énorme dans le monde des débordements de tampon.

Alternativement, par coïncidence une adresse ret de 0x39393939 ou 0x3939393939393939 est parfaitement valide. Je trouve cela difficile à croire. Vous devriez voir un segfault avec une trace qui se termine quelque part autour de cette adresse. Il est très probable que gethostbyname ne déborde pas. Votre diagnostic est peut-être incorrect et votre machine n'est plus sensible.

+0

merci pour votre réponse! Je m'interroge à ce sujet aussi. – elahe