Que tal

Bueno, yo en cuestiones de Bof y de ultimas ando escaso, pero donde alojar tu shell.. pues en el stack en el caso de un Bof. Ahora, como te puse con ASLR cambian las posiciones en memoria del stack por ejemplo en el que se encuentra determinda zona de memoria reservada por x aplicacion.
Donde almacenar la shellcode ? Pues imagino que en memoria!

Imagino que te refieres a usar execve() y demas para ejecutar el Bof, pero lo importante es dar con tu shellcode en memoria. Almacenarla en EIP por ejemplo, te serviria a la hora de que RET se ejecutase ??
No se como digo, pero lo importante es encontrar tu shellcode a fin de cuentas; shellcode que esta en el buffer que le mandamos a la aplicacion con el shellcode que usa execve() como manera de ejecutar la shell ( xjm, /bin/sh ).
Es decir, la shellcode no se guarda en el parametro que apunta al array de punteros para execve(), sino que execve() se encuentra dentro de esa shellcode normlamente. Lo que hay que hacer es que EIP apunte, ya sea con jumps y calls, hacia nuestra shellcode.
EIP apunta a la proxima instruccion a ejecutar. No se como vas a almacenar algo en un registro como EIP?
Lo que se suele hacer es usar instrucciones NOP ( No operation, 0x90 intel ) justo antes de la shellcode para que a final de cuentas EIP termine ejecutando nuestra shellcode. Pero no entiendo muy bien como es eso de almacenar en EIP la shellcode ? EIP tiene que apuntar a nuestro buffer y al ret addr que le demos..
Lo que creo hay que hacer es que EIP apunte, tras el tocho de NOPs por ejemplo, hacia nuestra shellcode asi sobrescribiendo RET.
Lo del entorno como dije lo dices por execve() ? execve() se usa por y para varias cosas creo. Pero que ocurre en tu caso, que tienes poco espacio para almacenar NOPs, shellcode y ret addr??
Es lo que asumo, ya que si no temes por espacio puedes guardar tu shellcode en el buffer simplemente.
Por que guardarla en otro sitio?? ( si como digo, no temes por espacio ).
Saludos
