ROP Attack: obliga al programa a manipular una instrucción como un gadget

1

Estoy haciendo una prueba de explotación básica en un programa simple con líneas de código de vista. Tengo la intención de explotar una vulnerabilidad de desbordamiento de búfer para realizar un ataque de ROP. Para reunir los gadgets disponibles utilizo la herramienta ROPgadget. Encontré un gadget muy útil en la dirección, digamos addr , esta dirección es el comienzo de otra instrucción legítima para el programa.

¿Es posible usar este gadget o no? En caso afirmativo, ¿cómo ejecutará el procesador el gadget y no la instrucción legítima a sabiendas de que ambos comienzan en la misma dirección addr

    
pregunta Ahmed 24.05.2018 - 11:08
fuente

1 respuesta

3

Respuesta corta: sí .

Respuesta larga:

Las instrucciones en los procesadores x86 varían en su longitud entre 1 y muchos bytes. (Esto funciona porque ninguna instrucción puede ser un prefijo de otra instrucción. Al igual que los números de teléfono. Consulte este tipo para ver la teoría detrás it.)

La CPU ve todo como bytes y no sabe lo que pretendía el compilador, por lo que si apunta el puntero de la instrucción a alguna memoria ejecutable, la CPU no se preocupa mientras descifre una instrucción válida. Luego continuará ejecutándose hasta que encuentre cualquier tipo de error.

Ejemplo:

  

89 EB FE 40 C3

Si saltas al primer byte, obtienes:

  

89 EB FE 40 C3: mov EAX, 0xC340FEEB

Si saltas en el segundo byte, obtienes:

  

EB FE: jmp $ , bucle sin fin, girará para siempre

Si saltas al tercer byte, obtienes:

  

FE 40 C3: INC BYTE [EAX-0x30]

Si saltas en el cuarto byte, obtienes:

  

40: INC EAX
  C3: RET

Mira, un gadget ROP! Incrementa EAX y luego regresa.

¿Cuál es la instrucción "real" que pretendía el programador? ¿A quien le importa?

Todo este concepto es lo que hace que ROP sea tan fácil para los procesadores x86. P.ej. MIPS, donde no puedes saltar en medio de instrucciones, es mucho más difícil encontrar buenos gadgets.

    
respondido por el manduca 24.05.2018 - 13:28
fuente

Lea otras preguntas en las etiquetas