Sfruttare una vulnerabilità legata al sovraccarico degli heap

1

Sto davvero cercando di capire il concetto di attacco reso possibile dal codice riportato di seguito.

Ho notato che viene utilizzato strcpy , che non esegue controlli ai limiti e pertanto abilita gli attacchi di sovraccarico del buffer. Inoltre, poiché vengono utilizzati malloc e free , so che questo codice di esempio sta cercando di illustrare il concetto di un attacco di sovraccarico dell'heap.

Ok. Cosa so sull'heap? Sembrerà in questo modo:

Etuttigliargomentidellalineadicomandopossonoessereusatipersovrascrivereciòcheseguenell'heapdopodiessi.Cosamipiacerebbesovrascrivere?Ecosadovreivolersovrascriverequestaposizionedimemoriacon?

malloc()chiamaunlink()makro,cheaccettaunelemento(unchunk)dallalistaliberadouble-linkedefree()chiamafrontlink()makro,cheaggiungeunbloccoallalistalibera.

Orasochevogliosovrascrivereunpuntatoreall'indietrooinavanti.Quale?Esattamente?

Diamoun'occhiataalfrontlink()makro:

BK=FD->bk;P->bk=BK;P->fd=FD;FD->bk=BK->fd=P;

Ognivoltachechiamiamofree(),vogliamoaggiungerePallalistalibera.Saràsemplicementemessodovemaic'èunalacunaabbastanzagrandenellalistalibera,credo.Eoradiamounosguardoall'elementosottostante(BK)Peall'elementosopraP(FD).Epoieseguiamoleazionisoprariportate,dovefdèilpuntatoreinavantiebkèilpuntatoreall'indietro.

Nonsonemmenosequestacosadifrontlink()siaimportanteperquestoattacco.Qualcunopuòspiegarmicomepuòesseresfruttatoilcodiceriportatodiseguito?Perfavore,dammiunarispostafaciledacapire,datochesonodavveronuovoinquestamateria.Grazieperiltuoaiuto!

#include<stdlib.h>#include<string.h>#include<stdio.h>voidwinner(void){printf("that wasn't too bad now, was it?\n");
}

int main(int argc, char **argv)
{
  char *a, *b, *c;

  a = malloc(512);
  b = malloc(512);
  c = malloc(512);

  strcpy(a, argv[1]);
  strcpy(b, argv[2]);
  strcpy(c, argv[3]);

  free(c);
  free(b);
  free(a);

  printf("dynamite failed?\n");
  return 0;
}
    
posta user503842 13.12.2018 - 15:53
fonte

0 risposte

Leggi altre domande sui tag