Explotación de una vulnerabilidad de saturación del montón

1

Realmente estoy tratando de entender el concepto del ataque hecho posible por el código que figura a continuación.

Observo que se está utilizando strcpy , que no realiza ninguna verificación de límites y, por lo tanto, habilita los ataques de saturación del búfer. Además, dado que se están utilizando malloc y free , sé que este código de ejemplo está tratando de ilustrar el concepto de un ataque de saturación del montón.

Ok. ¿Qué sé sobre el montón? Se verá algo así:

Ytodoslosargumentosdelalíneadecomandossepuedenusarparasobrescribirloquesigueenelmontóndespuésdeellos.¿Quémegustaríasobreescribir?¿Yconquéquisierasobrescribirestaubicacióndememoria?

malloc()llamaalunlink()makro,quetomaunelemento(unfragmento)delalistalibrededobleenlace,yfree()llamaalfrontlink()makro,queagregaunfragmentoalalistalibre.

Ahora,séquequierosobrescribirunpunterohaciaatrásohaciaadelante.¿Cuálexactamente?

Echemosunvistazoalfrontlink()makro:

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

Siemprequellamemosfree(),queremosagregarPalalistalibre.Simplementesepondrádondequieraquehayaunespaciolosuficientementegrandeenlalistalibre,creo.Yahoraechamosunvistazoalelementodebajo(BK)PyalelementoarribaP(FD).Yluegorealizamoslasaccionesindicadasanteriormente,dondefdeselpunterohaciaadelanteybkeselpunterohaciaatrás.

Nisiquierasésiestacosafrontlink()esimportanteparaesteataque.¿Alguienpuedeexplicarmecómosepuedeexplotarelcódigoquefiguraacontinuación?Porfavor,dameunarespuestafácildeentender,yaquesoyrealmentenuevoenesteasunto.Graciasportuayuda!

#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;
}
    
pregunta user503842 13.12.2018 - 15:53
fuente

0 respuestas

Lea otras preguntas en las etiquetas