36
Jaime Peñalba @NighterMan

1100101001001110

Embed Size (px)

Citation preview

Page 1: 1100101001001110

Jaime Peñalba @NighterMan

Page 2: 1100101001001110

WHO AM I?

OGT OFFENSIVE LABS & -D--I

CISSP EN FRIGORIFICOS

CERTIFIED CALDERATOR

NIVEL 101 EN BF3

Page 3: 1100101001001110

WHY EXPLOITING?

INTRODUCCION

DESMITIFICARLO (NO ES DIFICIL)

BECAUSE IT'S PHUN

PROTECCIONES ACTUALES

ESTO NO ES UNA GUIA COMPLETA

Page 4: 1100101001001110

WHAT DO I NEED TO KNOW TO EXPLOIT?

FUNCIONAMIENTO BASICO DE UN PROCESADOR

ORGANIZACION DE LA MEMORIA

FUNCIONAMIENTO DE LA PILA (STACK)

PROTECCIONES

Page 5: 1100101001001110

HOW CPU WORKS

Page 6: 1100101001001110

HOW CPU WORKS

Page 7: 1100101001001110

HOW CPU WORKS

Page 8: 1100101001001110

HOW CPU WORKS

Page 9: 1100101001001110

MEMORY LAYOUT

.RODATA

.BSS

.DATA

[STACK]

[STACK]

[HEAP]

Page 10: 1100101001001110

MEMORY LAYOUT

Page 11: 1100101001001110

MEMORY LAYOUT

Page 12: 1100101001001110

FUNCION DEL STACK

CONTROL DEL FLUJO DE EJECUCION

ALMACENAMIENTO DE LOCAL VARS

PASAR ARGS A FUNCIONES

(DEPENDE DE LA ARCH Y EL CALLING CONVENTION)

Page 13: 1100101001001110

STACK

%EBP (BASE DEL FRAME)

PUNTERO AL EBP ANTERIOR

%ESP (CIMA DE LA PILA)

PUSH (ESP = ESP-4)

POP (ESP = ESP+4)

Page 14: 1100101001001110

STACK

Page 15: 1100101001001110

STACK

Page 16: 1100101001001110

MOST COMMON FLAWS

OVERFLOWDYNAMIC ALLOCATION

FORMAT STRING

STACK HEAP

USE AFTER FREENULL POINTER

Page 17: 1100101001001110

BASIC EXPLOIT

Page 18: 1100101001001110

BASIC EXPLOIT

OVERWRITES FULL FRAME

OVERWRITES SAVED EBP

OVERWRITES SAVED RET

NEW EIP POINTS TO JMP %ESP

JUMPS TO SHELLCODE

OVERWRITES FULL FRAME

OVERWRITES SAVED EBP

OVERWRITES SAVED RET

NEW EIP POINTS TO JMP %ESP

JUMPS TO SHELLCODE

Page 19: 1100101001001110

BASIC EXPLOIT

Page 20: 1100101001001110

COUNTERMEASURES VS EXPLOITATION

Stack Smashing

StackCanary

StackCanary Bypass

HeapExploitation

GOTOverwrite

PositionIndependent

CodeASLR

Return ToLibrary No eXecute Bit

RELocationRead-Only

Return OrientedProgramming

(ROP)

PositionIndepenentExecutable

(PIE)

MemoryDisclosure

Page 21: 1100101001001110

ASLR

Page 22: 1100101001001110

No eXecute Bit

Page 23: 1100101001001110

Return Oriented Programming

Page 24: 1100101001001110

ROP

RET

POP EIP

LEAVE

ESP = EBP

POP EBP

Page 25: 1100101001001110

ROP GADGETS

Page 26: 1100101001001110

UNALIGNED VS ALIGNED

Page 27: 1100101001001110

SIMPLE ROP

Page 28: 1100101001001110

SIMPLE ROP

Page 29: 1100101001001110

BASIC EXPLOIT

Page 30: 1100101001001110

STACK PIVOTING

mov eax 0xfff

xchg esp eax

ret

CREAMOS UNA PILA EN OTRA ZONA DE MEMORIA DONDE TENGAMOS MEJOR CONTROL

SALTAMOS A LA NUEVA PILA

Page 31: 1100101001001110

COMPLEX ROP

Creamos una zona de memoria con permisos de ejecucion mmap()

Copiamos nuestro shellcode a la nueva zona memcpy()

Saltamos a nuestro shellcode

Page 32: 1100101001001110

COMPLEX ROP

mmap() no esta importada pero dlsym() si lo esta

Sacamos la direccion de mmap() llamando a dlsym

Necesitamos la direccion de nuestro shellcode y no tenemos gadgets (stack pivoting)

mmap() y dlsym() utilizan argumentos con null bytes (stack pivoting)

Page 33: 1100101001001110

COMPLEX ROP

Page 34: 1100101001001110

BASIC EXPLOIT

Page 35: 1100101001001110

CUIDADO CON LA BEBIDA!!!

Page 36: 1100101001001110

THE END