Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Pablo González
Buffer Overflows
Índice
3. Práctica
Pila
§ En este espacio también está el Heap (MALLOC)
§ El segmento de pila guarda las variables locales y
datos de control. (La pila “decrece” en memoria)
RET
POP EIP
PUSH #1
PUSH #2
PUSH #3
PUSH EIP
CALL Suma
PUSH BP
MOV BP,SP
SUB SP,SP,#100
ADD
MOV SP,BP
POP BP
RET
POP EIP
PUSH #1
PUSH #2
PUSH #3
PUSH EIP
CALL Suma
PUSH BP
MOV BP,SP
SUB SP,SP,#100
ADD
MOV SP,BP
POP BP
RET
POP EIP
PUSH #1
PUSH #2
PUSH #3
PUSH EIP
CALL Suma
PUSH BP
MOV BP,SP
SUB SP,SP,#100
ADD
MOV SP,BP
POP BP
RET
POP EIP
PUSH #1
PUSH #2
PUSH #3
PUSH EIP
CALL Suma
PUSH BP
MOV BP,SP
SUB SP,SP,#100
ADD
MOV SP,BP
POP BP
RET
POP EIP
PUSH #1
PUSH #2
PUSH #3
PUSH EIP
CALL Suma
PUSH BP
MOV BP,SP
SUB SP,SP,#100
ADD
MOV SP,BP
POP BP
RET
POP EIP
PUSH #1
PUSH #2
PUSH #3
PUSH EIP
CALL Suma
PUSH BP
MOV BP,SP
SUB SP,SP,#100
ADD
MOV SP,BP
POP BP
POP EIP
PUSH #1
PUSH #2
PUSH #3
PUSH EIP
CALL Suma
PUSH BP
MOV BP,SP
SUB SP,SP,#100
ADD
MOV SP,BP
POP BP
POP EIP
PUSH #1
PUSH #2
PUSH #3
PUSH EIP
CALL Suma
PUSH BP
MOV BP,SP
SUB SP,SP,#100
MOV AX,BP-4
ADD AX,BP-3
ADD AX,BP-2
MOV SP,BP
POP BP
POP EIP
PUSH #1
PUSH #2
PUSH #3
PUSH EIP
CALL Suma
PUSH BP
MOV BP,SP
SUB SP,SP,#100
MOV AX,BP-4
ADD AX,BP-3
ADD AX,BP-2
MOV SP,BP
POP BP
POP EIP
PUSH #1
PUSH #2
PUSH #3
PUSH EIP
CALL Suma
PUSH BP
MOV BP,SP
SUB SP,SP,#100
MOV AX,BP-4
ADD AX,BP-3
ADD AX,BP-2
MOV SP,BP
POP BP
POP EIP
PUSH #1
PUSH #2
PUSH #3
PUSH EIP
CALL Suma
PUSH BP
MOV BP,SP
SUB SP,SP,#100
MOV AX,BP-4
ADD AX,BP-3
ADD AX,BP-2
MOV SP,BP
POP BP
POP EIP
• DEP ayuda a evitar la ejecución del código desde las páginas de datos.
Normalmente, el código no se ejecuta desde el montón (heap) predeterminado ni la pila.
DEP forzada por hardware detecta código que se está ejecutando desde estas
ubicaciones y produce una excepción cuando se lleva a cabo la ejecución. DEP forzada por
software puede ayudar a evitar que el código malintencionado.
• Por Hardware DEP XD/NX Intel o AMD (eXecute Disable o No Execute)
• Por Software
§ Modificamos el script:
§ EIP = 42356a42
– 42356A42 (Little Endian) → 426A3542 (Bj5B)
BP
SP
BP=AAAA SP
§
§POP EI para recuperar la dirección de retorno:
Pila BUFFER BP EIP #3 #2 #1
AAAAAAAAAAAAAAAAAAAAAAAA
BP=AAAA SP
§ Ahora hay que buscar este código de operación en alguno de los DLL
cargados al principio de la aplicación.
– Tiene que ser una DLL de la aplicación y no del S.O (Portabilidad)
– S “memorigen” “memdestino” “codigoop”
§ Se ha realizado el break: