¿Por qué añadir un sled nop al final del código de shell?

2

Estaba intentando explotar un desbordamiento de búfer de la siguiente manera:

  

Trineo NOP - > shellcode - > dirección del trineo NOP (antes de guardar el RIP)

Pero, en Desbordamiento de pila, me dijeron que también debería agregar un sled NOP a mi código de shell:

  

Trineo NOP - > shellcode - > dirección del trineo NOP - > Trineo NOP.

¿Puede alguien explicarme por qué debo agregar un sled NOP a mi código de shell?

Esta es mi publicación original en Stack Overflow:

enlace

Gracias.

EDITAR: leí otra publicación en la que alguien tuvo el mismo problema.

Solucionó esto agregando un pequeño trineo NOP después del shellcode. Dado que el código de shell se agregó a la pila al final del búfer, y empuja algunas cosas a la pila en sí, estaba sobrescribiendo su propio código.

Pero no entiendo cómo una instrucción push puede hacer que Shellcode sobrescriba su propio código.

    
pregunta S7_0 11.08.2016 - 18:28
fuente

1 respuesta

1

Por lo que sé, hay dos razones para esto

  • Es posible que la longitud del desbordamiento del búfer sea un número muy específico y que su código de shell no ocupe todo el búfer. Por ejemplo, si su búfer tiene que ser exactamente de 400 bytes pero su código de shell es solo de 312, usted insertará 88 bytes de nops para garantizar la longitud correcta.
  • Shellcode puede requerir un poco de espacio para "expandirse". Por lo general, puede salirse con solo agregar algunos nops adicionales al final del búfer, pero siempre me han enseñado que el código de shell debe tener algún relleno al final para una ejecución exitosa.
respondido por el DKNUCKLES 11.08.2016 - 19:20
fuente

Lea otras preguntas en las etiquetas