Esto será específico del objetivo (por ejemplo, un servicio o protocolo). La mayoría de las veces necesitarás una oportunidad para:
- copiar la carga útil final (más grande)
- copia el código de búsqueda de huevos (más pequeño)
- desencadenar el exploit
En un desbordamiento de pila típico, los pasos segundo y tercero probablemente se combinarán. Tenga en cuenta que el código de búsqueda de huevos debe aterrizar en algún lugar ejecutable, pero la carga útil no lo es, si la búsqueda de huevos es lo suficientemente inteligente.
Imagina un programa hipotético. Esto podría ser una implementación de un protocolo de red (como HTTP, SMTP, LDAP, etc.) o un código de análisis de archivos (tal vez una imagen o un analizador XML).
El proceso sería algo así como:
- iniciar una sesión: abra una nueva conexión o comience a analizar una secuencia
- envíe información que copie datos en masa: tal vez una primera solicitud HTTP o unos pocos kilobytes de datos de imagen
- desencadenar una vulnerabilidad: tal vez una segunda solicitud HTTP canalizada o una estructura rota en el formato de imagen
- búsqueda de huevos en todas las regiones de memoria, luego salte a la carga útil (tal vez asignando memoria, copiando y configurando los permisos correctos primero)
Durante el proceso de escribir el exploit, se pasará mucho tiempo enviando información y entendiendo dónde termina en la memoria (y por cuánto tiempo). Estas habilidades son directamente transferibles a otras tareas como fuzzing.