Zusammenfassung der Ressource
"Smashing the stack
for fun and profit"
- El código con este objetivo
causa "vuelta" de turina
para ir en dirección
aleatoria
- Basura de la pila
- Garabatear la pila
- Destrozar la píla
- Fandango en el núcleo
- Pérdida de memoria
- Precedence lossage
- Organización de
memoria
- Tenemos procesos, que se dividen en tres...
- Pila
- Tipo de dato abstracto
- Dos funciones
importantes: PUSH Y POP
- Ejecutadas por la CPU
- Usada para asignar
dinámicamente variables locales
- Bloque contiguo de datos de memoria
- Tamaño ajustado dinámicamente
por el kernel durante la ejecución
- Tiene un marco de pila
- Contiene los parámetros
de una función
- Contiene las variables
locales de una función
- Datos necesarios para recuperar el
marco de pila anterior
- Generalmente crece "hacía abajo"
- Texto
- Datos
- Desbordamiento de buffer
- Buffer: bloque contiguo de memoria en la computadora,
contiene instancias del mismo tipo de datos
- Resultado de relleno de más datos en una
memoria de los que puede manejar
- Se da al copiar datos sin comprobar límites
- Genera una violación de segmentación
- Nos permite cambiar la dirección de retorno de una función
- Cambio en el flujo de ejecución del programa
- No sabemos el lugar en memoria donde está el programa a explotar
- Usando funciones JMP y CALL puede evitarse
- Se puede utilizar IP direccionamiento relativo
- Hay varios escenarios para ocasionarse
- Rellenar la parte delantera del buffer con instrucciones NOP
- Aumentar en 100 bytes el tamaño del buffer,
en relación a la memoria intermedia
- Particularidad en lenguaje C, puede ocasionarse con:
- Escribir más allá del final de un array de caracteres,
con funciones como
- strcat()
- strcpy()
- sprintf()
- vsprintf()
- Emparejar una secuencia de
caracteres que no son de
espacio en blanco
- scanf()
- Uso de bucle while() para leer un
caractér a la vez en un buffer de la
entrada estándar hasta alcanzar un
delimitador
- getc()
- fgetc()
- getchar()