SlideShare una empresa de Scribd logo
GNU/Linux Exploiting
Introducción a la explotación de binarios
GNU/Linux Exploiting 2
• Manuel Blanco Parajón
• Jugador habitual de competiciones “CTF”
• w0pr
• ID-10-T
• Estudiante de Ingeniería Informática
• Autodidacta
# whoami
@manuelbp01
manuelbp01@gmail.com
GNU/Linux Exploiting 3
• ¿Qué vamos a ver en este taller?
Introducción a la explotación de vulnerabilidades en software
• Requisitos recomendados
• Nivel básico de programación en C
• Manejo sencillo de la shell GNU/Linux
• Conocimientos básicos de Ingeniería Inversa
• Fundamentos de Computadores
• Resultados
Ser capaz de desarrollar tu primer exploit
Introducción
GNU/Linux Exploiting 4
Motivación
GNU/Linux Exploiting 5
• Bug: Error de software o fallo de programación que causa un
comportamiento anómalo o desencadena un resultado inesperado en la
aplicación.
• Vulnerabilidad: Clase particular de bug que puede ser aprovechado por
un atacante para comprometer la seguridad, integridad, disponibilidad y
confidencialidad de un sistema.
• Exploit: Fragmento de software utilizado para aprovechar una
vulnerabilidad de un sistema, con el fin de conseguir un comportamiento
no deseado para el mismo.
• Payload: Efecto que se desea lograr al explotar una vulnerabilidad.
Términos
GNU/Linux Exploiting 6
• Ingeniería Inversa: Proceso llevado a cabo con el objetivo de obtener
información a partir de un producto final.
• Análisis estático
• Análisis dinámico
Ingeniería Inversa
GNU/Linux Exploiting 7
• Análisis estático: Tipo de análisis de software que se realiza sin ejecutar
el programa.
• Ejemplo: Podemos utilizar objdump como un desensamblador
(traduce código máquina a ensamblador)
Ingeniería Inversa
GNU/Linux Exploiting 8
• Análisis dinámico: Tipo de análisis de software que se realiza
ejecutando el programa.
• Ejemplo
• strace: Permite monitorear las llamadas al sistema y las señales.
• ltrace: Permite monitorear las llamadas a las librerías compartidas.
Ingeniería Inversa
GNU/Linux Exploiting 9
• IDA 7.0 Freeware Version
https://www.hex-rays.com/products/ida/support/download_freeware.shtml
Herramientas útiles
GNU/Linux Exploiting 10
• radare2
https://github.com/radare/radare2
Herramientas útiles
GNU/Linux Exploiting 11
• GDB (GNU Debugger)
Herramientas útiles
GNU/Linux Exploiting 12
• PEDA (Python Exploit Development Assistance for GDB)
https://github.com/longld/peda
Herramientas útiles
GNU/Linux Exploiting 13
• Los depuradores son muy útiles!!
Primer ejercicio
GNU/Linux Exploiting 14
• Estructuras de datos (tablas) que muestran la distribución de la
memoria
Mapa de memoria
GNU/Linux Exploiting 15
• Segmentación de memoria: División de la memoria primaria en segmentos
o secciones
• Los segmentos normalmente corresponden a las divisiones naturales de un
programa, como las rutinas o las tablas de datos.
• data: rw-
• code: r-x
• stack: rw-
• heap: rw-
Segmentación de memoria
GNU/Linux Exploiting 16
• ¿Qué sucede cuando ejecutas un archivo ELF?
• $ ./test
• Normalmente el programa estará en el disco, y el kernel será el encargado de
realizar una serie de procedimientos para el mapeo de la memoria del
programa.
Flujo de ejecución
GNU/Linux Exploiting 17
Flujo de ejecución
./test
fork()
execve(“./test”, *argv[], *envp[])
sys_execve()
do_execve() search_binary_handler()
load_elf_binary()
ld.so
_start
__libc_start_main _init
main
user mode
kernel mode
GNU/Linux Exploiting 18
Cómo se realiza el mapeo del programa a la memoria virtual
• En el encabezado del programa
• Se guardan qué segmentos se deben mapear y sus respectivas
ubicaciones
• También se guarda qué secciones pertenecen a qué segmentos
• Durante el mapeo la memoria se dividirá en distintos segmentos
dependiendo de sus respectivos permisos
• Un segmento puede contener 0 o varias secciones
Flujo de ejecución
GNU/Linux Exploiting 19
Cómo se realiza el mapeo del programa a la memoria virtual
Flujo de ejecución
GNU/Linux Exploiting 20
Cómo se realiza el mapeo del programa a la memoria virtual
Flujo de ejecución
otra sección
.data
.bss
.got.plt
.rodata
.text
.init
ELF encabezado
RW
R o RX
kernel space
DATA VMA
CODE VMA
stack
heap
En disco En memoria
GNU/Linux Exploiting 21
Registros
• Registros de propósito general
• EAX EBX ECX EDX – 32 bit
• AX BX CX DX – 16 bit
• AH BH CH DH – 8 bit (parte alta)
• AL BL CL DL – 8 bit (parte baja)
Ensamblador x86
AH AL
EAX
AX
GNU/Linux Exploiting 22
Registros
• Stack Pointer
• ESP – 32 bit
• Apunta a la cima de la pila
• Base Pointer
• EBP – 32 bit
• Apunta a la base de la pila
• La pila es una estructura de datos (cola LIFO) que permite almacenar y
recuperar datos
Ensamblador x86
GNU/Linux Exploiting 23
EBP: 0xffffcfd8
0x804871c
???
???
0x804871c
???
???
0xffffcfd8
Funcionamiento CPU
Prólogo de la función
Llamada a get_flag
RET addr
RET addr
Frame pointer
* La representación real de la pila sería al revés
GNU/Linux Exploiting 24
0x804871c
???
???
0xffffcfd8
???
???
Funcionamiento CPU
???
???
???
Stack Frame
Marco de pila: Estructura de datos que contienen la información de estado de la
subrutina, son utilizados para almacenar variables locales y cálculos.
GNU/Linux Exploiting 25
Funcionamiento CPU
Epílogo de la función
0x804871c
???
???
0xffffcfd8
0x804871c
???
???
0x804871c
???
0xffffcfd8
???
GNU/Linux Exploiting 26
Registros
• Registro contador del programa
• EIP
• Apunta a la siguiente instrucción a ejecutar
• Registro flag
• eflags
• Almacena los resultados de ejecución
• Registro de segmento
• cs ss ds es fs gs
Ensamblador x86
GNU/Linux Exploiting 27
Buffer: Espacio de memoria reservado para almacenar datos de
manera temporal.
Si se introducen más datos que los que el buffer puede almacenar,
entonces se produce un desbordamiento.
Buffer Overflow
GNU/Linux Exploiting 28
Stack Smash
gcc -fno-stack-protector stack-smash.c –o stack-smash
GNU/Linux Exploiting 29
Stack Smash
buffer (64 bytes)
variable
EBP
RET
argc
argv
envp
variable
EBP
RET
argc
argv
envp
A AA A
A A A A
A … … …
buffer (64 bytes)
AAA
A A A …
…
A A A A
Recordemos que la pila crece desde las
direcciones altas hacia las bajas, la
representación real sería al revés.
GNU/Linux Exploiting 30
Stack Smash
• r <<< $(python -c 'print "A" * 64 + "B" * 4')
GNU/Linux Exploiting 31
Stack Smash
• r <<< $(python -c 'print "A" * 64 + "xefxbexadxde"')
GNU/Linux Exploiting 32
Stack Smash
El buffer podía almacenar 64 bytes, lo hemos desbordado y a
continuación hemos sobrescrito la variable correctamente.
Recordemos que en el formato little-endian el orden es del byte
menos significativo hasta el byte más significativo.
GNU/Linux Exploiting 33
Return to Text
gcc -fno-stack-protector return-to-text.c -o return-to-text
GNU/Linux Exploiting 34
Return to Text
La representación de la pila sería:
Nuestro objetivo es sobrescribir la dirección de retorno con la dirección de la función win()
buffer (64 bytes)
EBP
RET
GNU/Linux Exploiting 35
Return to Text
Procedemos a calcular el desplazamiento necesario para llegar a
sobrescribir la dirección de retorno. Para este proceso podemos
utilizar un patrón cíclico (una secuencia única que nos permitirá
calcular dicho offset).
GNU/Linux Exploiting 36
Return to Text
Tras generar un patrón de 100 bytes, obtenemos el desplazamiento
GNU/Linux Exploiting 37
Return to Text
Procedemos pues a obtener la dirección de la función win()
objdump -M intel -D ./return-to-text
GNU/Linux Exploiting 38
Return to Text
Verificamos que podemos alterar el flujo correctamente:
GNU/Linux Exploiting 39
Return to Shellcode
gcc -fno-stack-protector -z execstack return-to-shellcode.c -o return-to-shellcode
GNU/Linux Exploiting 40
Return to Shellcode
GNU/Linux Exploiting 41
Return to Shellcode
A partir de 264 bytes, sobrescribimos el saved EBP (frame pointer) y
RET
GNU/Linux Exploiting 42
Return to Shellcode
Esta ocasión nuestro fin es lograr ejecutar código arbitrario en el
sistema, para dicha labor utilizaremos un shellcode.
GNU/Linux Exploiting 43
Return to Shellcode
Un shellcode es un conjunto de instrucciones normalmente programadas en
lenguaje ensamblador y representadas en forma de códigos de operación, su
propósito es ejecutar la operación que se haya programado.
Shellcode que ejecuta /bin/sh con execve()
GNU/Linux Exploiting 44
Return to Shellcode
El buffer podía almacenar 64 bytes, lo hemos desbordado y a
continuación hemos sobrescrito la variable correctamente.
Recordemos que en el formato little-endian el orden es del byte
menos significativo hasta el byte más significativo.
GNU/Linux Exploiting 45
Return to Shellcode
Procedemos a desactivar la ASLR:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
A continuación ponemos un punto de ruptura en la llamada a gets() y observamos
los parámetros que recibe:
GNU/Linux Exploiting 46
Return to Shellcode
Ahora que sabemos cual es la dirección de inicio de nuestro buffer, podemos
alojar nuestro shellcode en el mismo y saltar a el:
GNU/Linux Exploiting 47
Return to Shellcode
Vamos a probar a ejecutarlo fuera del depurador
Vemos que algo no va bien, habilitaremos la generación de core dumps (crasheos)
y procederemos con un análisis post mortem.
ulimit -c unlimited
GNU/Linux Exploiting 48
Return to Shellcode
Analizamos un poco el core dump y rápidamente localizamos el shellcode
gdb -q --core core
GNU/Linux Exploiting 49
Return to Shellcode
Modificamos el exploit con la nueva dirección y ejecutamos de
nuevo…
¿Dónde está mi shell?
GNU/Linux Exploiting 50
Return to Shellcode
Utilicemos strace para ver las llamadas al sistema
GNU/Linux Exploiting 51
Return to Shellcode
Parece ser que estamos perdiendo el contexto de la entrada estándar, debemos mantener stdin
abierto.
(python exploit.py; cat) | ./return-to-shellcode
cat exploit - | ./return-to-shellcode
GNU/Linux Exploiting 52
Protecciones
ASLR (Address Space Layout Randomization)
La aleatoriedad en la disposición del espacio de direcciones es una técnica que intenta mitigar o
dificultar la explotación de vulnerabilidades basadas en la corrupción de memoria (originalmente
se implementó en PaX).
En 32 bits la entropía no es muy alta pues 12 bits quedan estáticos, es posible realizar un ataque
de fuerza bruta. Luego se verán maneras de sortear esta mitigación.
En este caso tendríamos una probabilidad de
1
165 para adivinar la dirección del buffer.
GNU/Linux Exploiting 53
Protecciones
NX (No eXecute)
Normalmente las páginas de memoria suelen estar marcadas como no ejecutables gracias a la
protección NX (non-execute).
Esto significa que aunque logremos inyectar un shellcode en la memoria y logremos alterar el flujo
del programa para que salte a nuestra zona controlada, no podremos ejecutarlo.
GNU/Linux Exploiting 54
Protecciones
PIE/PIC (Position Independent Execution)
Este mecanismo de protección permite realizar una aleatorización en los segmentos de texto y
datos.
Es decir, se realiza un direccionamiento relativo, en cada ejecución se generará de manera pseudo
aleatoria una dirección base y se irán calculando el resto de direcciones mediante sumas de
desplazamientos.
Por defecto gcc no compila con PIE, para utilizar esta protección se deben utilizar las flags -fPIC -
pie
GNU/Linux Exploiting 55
Protecciones
StackGuard
Este mecanismo de protección consiste en generar un valor aleatorio (canario) en el prólogo de
una función, salvaguardarlo justo antes del frame pointer y dirección de retorno en la pila.
En el epílogo de la función realizará la operación lógica de disyunción exclusiva con el valor actual
y el generado anteriormente, de manera que detectará si ha sido modificado o no.
buffer
EBP
canario
RET
GNU/Linux Exploiting 56
PLT/GOT
La PLT (Procedure Linkage Table) es usada para llamar a
procedimientos/funciones cuya dirección no se conoce durante el
enlazado, es el enlazador dinámico el encargado de resolverla durante
la ejecución.
La GOT (Global Offsets Table) es otra tabla que contiene direcciones
absolutas los procedimientos/funciones que serán utilizados, se utiliza
de manera similar a la PLT.
GNU/Linux Exploiting 57
Enlace perezoso (Lazy Binding)
En el enlace perezoso (procesos llevado a cabo por el cargador de ELF) cuando un
binario está cargado en memoria y una función es llamada por primera vez, la PLT
realiza un salto a la GOT donde resolverá la entrada que aún no ha sido resuelta.
En ese momento el enlazador dinámico es invocado, este resolverá y almacenará
en la GOT la dirección del símbolo correspondiente a la función invocada.
Las siguientes llamadas a la función no volverán a pasar por dicho proceso, pues
su dirección ya estará resuelta en la GOT.
GNU/Linux Exploiting 58
Protecciones
RELRO (Relocation Read-Only)
RELRO Parcial: Reordena las secciones ELF de manera que las
secciones internas de datos (.got, .dtors, etc.) precedan las secciones
de datos del programa (.data y .bss), la problemática es que la GOT es
escribible.
RELRO Completo: Remapea toda la GOT como solo lectura. Es la única
manera de mitigar cualquier tipo de técnica que trate de modificar la
GOT, pues protege las secciones de datos internos en el ELF para que
no se sobrescriban (a medida que se reordenan las secciones ELF).
Flags para compilar con Full RELRO: gcc -Wl,-z,relro,-z,now
GNU/Linux Exploiting 59
GOT
Cómo encontrar la GOT
objdump -R elf
GNU/Linux Exploiting 60
GOT Hijacking
Para poder implementar el enlazado perezoso la GOT debe ser escribible.
El objetivo sería sobrescribir alguna entrada de la GOT, de manera que afecte al
flujo del programa.
…
…
call foo@plt
…
…
printf
system
…
.text
.got.plt
jmp *(foo@GOT)
push index
jmp PLT0
foo@plt
push *(GOT + 4)
jmp *(GOT + 8)
PLT0
Cuando se produce un call foo, se realizará un jmp a la
función system.
GNU/Linux Exploiting 61
Return to Library
El objetivo de esta técnica es sortear la protección NX.
Para lograr dicho fin, debemos sobrescribir la dirección de retorno con
una llamada de librería del sistema.
Uno de los problemas sería la ASLR, para poder realizar esta
metodología en dicho escenario sería necesaria alguna fuga de
información que nos permitiese calcular la dirección base de la
librería del sistema.
GNU/Linux Exploiting 62
Return to Library
gcc -fno-stack-protector return-to-library.c -o return-to-library
GNU/Linux Exploiting 63
Return to Library
Procederemos a ejecutar system("/bin/sh"), debemos situar los
argumentos en la pila de manera que cuando se ejecute system estos
sean interpretados como tal.
AAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA
AAAAAAAAAA
system
fake RET
& /bin/sh
GNU/Linux Exploiting 64
Return to Library
Procederemos a buscar las direcciones de los argumentos requeridos.
GNU/Linux Exploiting 65
Return to Library
Ponemos un punto de ruptura en la instrucción ret y verificamos que
todo se encuentra en el lugar correcto
GNU/Linux Exploiting 66
Return to Library
Podemos utilizar exit como dirección de retorno, para evitar generar
un core dump al finalizar e intentar ejecutar "0x41414141".
GNU/Linux Exploiting 67
Condición de carrera (Race Condition)
Son un tipo de error lógico donde dos flujos de código se ejecutan de
forma concurrente y el resultado final depende del orden de
ejecución, como consecuencia las acciones de uno sobre los datos
puede influir en los resultados del otro.
GNU/Linux Exploiting 68
Condición de carrera (Race Condition)
GNU/Linux Exploiting 69
Condición de carrera (Race Condition)
Nuestro objetivo será aprovecharnos del sleep, para poder leer el
fichero temporal.
GNU/Linux Exploiting 70
Condición de carrera (Race Condition)
Hemos logrado el objetivo!
GNU/Linux Exploiting 71
Format String
Este tipo de bug ocurre cuando una entrada de datos se evalúa por
una función de manera incorrecta (normalmente la función
pertenecerá a la familia *printf()).
Explotando dicha vulnerabilidad se puede lograr desde una fuga de
memoria hasta una escritura.
GNU/Linux Exploiting 72
Format String
GNU/Linux Exploiting 73
Format String
Este tipo de bug ocurre cuando una entrada de datos se evalúa por
una función de manera incorrecta (normalmente la función
pertenecerá a la familia *printf()).
Explotando dicha vulnerabilidad obtenemos una primitiva de lectura y
escritura.
GNU/Linux Exploiting 74
Format String
Procedemos pues a introducir algún testigo de formato e intentamos
volcar valores de la pila.
GNU/Linux Exploiting 75
Format String
Utilicemos un depurador, para visualizar mejor lo que sucede.
Vemos como los valores examinados coinciden con el volcado.
GNU/Linux Exploiting 76
Format String
Vamos a escribir los dos bytes inferiores (LOB) del objetivo:
• r <<< $(python -c 'print "x34xa0x04x08" + "%16701d%7$hn"')
Ahora vamos a escribir los dos bytes superiores (HOB):
• r <<< $(python -c 'print "x36xa0x04x08" + "%16701d%7$hn"')
GNU/Linux Exploiting 77
Format String
• Reglas de escritura:
• Si HOB > LOB
• [dirección+2] [dirección] [LOB - 8] [offset+1] [HOB-LOB] [offset]
• Si HOB < LOB
• [dirección+2] [dirección] [HOB - 8] [offset] [LOB-HOB] [offset+1]
GNU/Linux Exploiting 78
Format String
Vamos a aprovechar esta fuga de información (infoleak), para
bypassear el StackGuard
GNU/Linux Exploiting 79
Format String
Vamos a ver el canario que genera, poner un punto de ruptura en la
llamada al sistema y buscar dicho valor en la pila
GNU/Linux Exploiting 80
Format String
Vemos que la posición del canario es $esp + 540, como las
direcciones son de 4 bytes:
540
4
= 135. Podemos utilizar el testigo de
acceso directo: %135$p
GNU/Linux Exploiting 81
ROP (Return-oriented programming)
Esta técnica comúnmente nos permitirá evadir la protección NX.
El objetivo consiste en lograr ejecutar una secuencia de instrucciones
máquina llamadas gadgets (presentes en la memoria de la máquina)
con el fin de lograr ejecutar operaciones arbitrarias en la máquina.
Cada gadget generalmente termina en una instrucción de retorno y se
suelen encontrar en subrutinas del programa y/o bibliotecas
compartidas.
Utilizaremos una herramienta para localizar los gadgets fácilmente:
• https://github.com/sashs/Ropper
GNU/Linux Exploiting 82
ROP
gcc -static -fno-stack-protector rop.c -o rop
GNU/Linux Exploiting 83
ROP
http://syscalls.kernelgrok.com/
GNU/Linux Exploiting 84
ROP
Nuestro objetivo será hacer ejecutable el stack, para esta labor
utilizaremos la syscall mprotect:
GNU/Linux Exploiting 85
ROP
Ahora que sabemos los argumentos que recibe, buscaremos los
gadgets necesarios para controlar los registros y efectuar la llamada al
sistema.
La instrucción int 0x80 provoca una interrupción software (llamada al
sistema), es una instrucción especial que causa que el procesador
transfiera el control a un código privilegiado (núcleo).
GNU/Linux Exploiting 86
ROP
Desactivemos la ASLR y veamos cual es la dirección del stack:
Ahora tracearemos nuestro rop-chain y verifiquemos que la pila
queda con permisos de ejecución.
GNU/Linux Exploiting 87
ROP
Automatizaremos un poquito el proceso
GNU/Linux Exploiting 88
ROP
Vemos que controlamos perfectamente la pila
GNU/Linux Exploiting 89
ROP
Y finalmente hemos logrado nuestro fin
Ahora que tenemos control de la pila, podemos alojar nuestro
shellcode al inicio del buffer y hacer un exploit en condiciones
GNU/Linux Exploiting 90
ROP
GNU/Linux Exploiting 91
ROP
Verifiquemos que la shellcode se ejecuta correctamente
r < <(python exploit.py)
GNU/Linux Exploiting 92
ROP
Habilitamos los core dumps y ajustamos el exploit con la dirección del
buffer fuera del depurador.
Y finalmente hemos logrado nuestro objetivo!
GNU/Linux Exploiting 93
Feel like a pirate

Más contenido relacionado

La actualidad más candente

Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]
Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]
Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]
RootedCON
 
Mariano Palomo - Taller de reversing en sistemas Windows aplicado a CTFs [ro...
Mariano Palomo  - Taller de reversing en sistemas Windows aplicado a CTFs [ro...Mariano Palomo  - Taller de reversing en sistemas Windows aplicado a CTFs [ro...
Mariano Palomo - Taller de reversing en sistemas Windows aplicado a CTFs [ro...
RootedCON
 
Jose M Mejia - Usando computación paralela GPU en malware y herramientas de h...
Jose M Mejia - Usando computación paralela GPU en malware y herramientas de h...Jose M Mejia - Usando computación paralela GPU en malware y herramientas de h...
Jose M Mejia - Usando computación paralela GPU en malware y herramientas de h...
RootedCON
 
Elías Grande & Jorge Nuñez - Medusa, El nacimiento de los ICS [rooted2019]
Elías Grande & Jorge Nuñez - Medusa, El nacimiento de los ICS [rooted2019]Elías Grande & Jorge Nuñez - Medusa, El nacimiento de los ICS [rooted2019]
Elías Grande & Jorge Nuñez - Medusa, El nacimiento de los ICS [rooted2019]
RootedCON
 
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]
RootedCON
 
CPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto SalgadoCPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto Salgado
Websec México, S.C.
 
Pablo sanemeteriovalencia
Pablo sanemeteriovalenciaPablo sanemeteriovalencia
Pablo sanemeteriovalencia
Pablo San Emeterio Lopez
 
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]RootedCON
 
Pentesting 101 por Paulino Calderon
Pentesting 101 por Paulino CalderonPentesting 101 por Paulino Calderon
Pentesting 101 por Paulino Calderon
Websec México, S.C.
 
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
RootedCON
 
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]RootedCON
 
Javier Saez - Una panorámica sobre la seguridad en entornos web [rootedvlc2]
Javier Saez - Una panorámica sobre la seguridad en entornos web [rootedvlc2]Javier Saez - Una panorámica sobre la seguridad en entornos web [rootedvlc2]
Javier Saez - Una panorámica sobre la seguridad en entornos web [rootedvlc2]
RootedCON
 
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
RootedCON
 
procesos
procesosprocesos
David López Paz - Global Warfare [RootedCON 2011]
David López Paz - Global Warfare [RootedCON 2011]David López Paz - Global Warfare [RootedCON 2011]
David López Paz - Global Warfare [RootedCON 2011]RootedCON
 
Técnicas de escaneo masivo - 11/2013
Técnicas de escaneo masivo - 11/2013Técnicas de escaneo masivo - 11/2013
Técnicas de escaneo masivo - 11/2013
Websec México, S.C.
 
Joaquín Moreno Garijo – Forense a bajo nivel en Mac OS X [Rooted CON 2014]
Joaquín Moreno Garijo – Forense a bajo nivel en Mac OS X [Rooted CON 2014]Joaquín Moreno Garijo – Forense a bajo nivel en Mac OS X [Rooted CON 2014]
Joaquín Moreno Garijo – Forense a bajo nivel en Mac OS X [Rooted CON 2014]RootedCON
 
José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]RootedCON
 
Understanding Advanced Buffer Overflow
Understanding Advanced Buffer OverflowUnderstanding Advanced Buffer Overflow
Understanding Advanced Buffer OverflowConferencias FIST
 
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]RootedCON
 

La actualidad más candente (20)

Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]
Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]
Eduardo Sanchez & Rafael Sojo - Taller de CTF [rooted2018]
 
Mariano Palomo - Taller de reversing en sistemas Windows aplicado a CTFs [ro...
Mariano Palomo  - Taller de reversing en sistemas Windows aplicado a CTFs [ro...Mariano Palomo  - Taller de reversing en sistemas Windows aplicado a CTFs [ro...
Mariano Palomo - Taller de reversing en sistemas Windows aplicado a CTFs [ro...
 
Jose M Mejia - Usando computación paralela GPU en malware y herramientas de h...
Jose M Mejia - Usando computación paralela GPU en malware y herramientas de h...Jose M Mejia - Usando computación paralela GPU en malware y herramientas de h...
Jose M Mejia - Usando computación paralela GPU en malware y herramientas de h...
 
Elías Grande & Jorge Nuñez - Medusa, El nacimiento de los ICS [rooted2019]
Elías Grande & Jorge Nuñez - Medusa, El nacimiento de los ICS [rooted2019]Elías Grande & Jorge Nuñez - Medusa, El nacimiento de los ICS [rooted2019]
Elías Grande & Jorge Nuñez - Medusa, El nacimiento de los ICS [rooted2019]
 
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]
David Reguera & Yago Jesus - Rootkit Busters ES [rooted2019]
 
CPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto SalgadoCPMX5 - Hacking like a boss por Roberto Salgado
CPMX5 - Hacking like a boss por Roberto Salgado
 
Pablo sanemeteriovalencia
Pablo sanemeteriovalenciaPablo sanemeteriovalencia
Pablo sanemeteriovalencia
 
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
 
Pentesting 101 por Paulino Calderon
Pentesting 101 por Paulino CalderonPentesting 101 por Paulino Calderon
Pentesting 101 por Paulino Calderon
 
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
 
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
Alberto García de Dios - Virus, el arte no debería ser negocio [Rooted CON 2011]
 
Javier Saez - Una panorámica sobre la seguridad en entornos web [rootedvlc2]
Javier Saez - Una panorámica sobre la seguridad en entornos web [rootedvlc2]Javier Saez - Una panorámica sobre la seguridad en entornos web [rootedvlc2]
Javier Saez - Una panorámica sobre la seguridad en entornos web [rootedvlc2]
 
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
Jose Selvi - Adaptando exploits para evitar la frustración [RootedSatellite V...
 
procesos
procesosprocesos
procesos
 
David López Paz - Global Warfare [RootedCON 2011]
David López Paz - Global Warfare [RootedCON 2011]David López Paz - Global Warfare [RootedCON 2011]
David López Paz - Global Warfare [RootedCON 2011]
 
Técnicas de escaneo masivo - 11/2013
Técnicas de escaneo masivo - 11/2013Técnicas de escaneo masivo - 11/2013
Técnicas de escaneo masivo - 11/2013
 
Joaquín Moreno Garijo – Forense a bajo nivel en Mac OS X [Rooted CON 2014]
Joaquín Moreno Garijo – Forense a bajo nivel en Mac OS X [Rooted CON 2014]Joaquín Moreno Garijo – Forense a bajo nivel en Mac OS X [Rooted CON 2014]
Joaquín Moreno Garijo – Forense a bajo nivel en Mac OS X [Rooted CON 2014]
 
José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]José Ramón Palanco - NoSQL Security [RootedCON 2011]
José Ramón Palanco - NoSQL Security [RootedCON 2011]
 
Understanding Advanced Buffer Overflow
Understanding Advanced Buffer OverflowUnderstanding Advanced Buffer Overflow
Understanding Advanced Buffer Overflow
 
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]
Hugo Teso - Inguma 0.5 Red Wagon [Rooted CON 2012]
 

Similar a Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]

Transcripcion (jackeline chillogalli
Transcripcion (jackeline chillogalliTranscripcion (jackeline chillogalli
Transcripcion (jackeline chillogalli
jackeline_chillogalli
 
Ronald
RonaldRonald
Ronald
Ronald Jumbo
 
Como instalar unix ...lili
Como instalar unix ...liliComo instalar unix ...lili
Como instalar unix ...lili
jassley 2000
 
Mary cervantes
Mary cervantesMary cervantes
Mary cervantes
maria12cervantes
 
Transcripcion yamy
Transcripcion yamyTranscripcion yamy
Transcripcion yamy
Yomaira_Anzules
 
Viviana medina MATERIA
Viviana medina MATERIAViviana medina MATERIA
Viviana medina MATERIA
viviana12medina
 
Viviana medina
Viviana medinaViviana medina
Viviana medina
viviana12medina
 
Genesis campos
Genesis camposGenesis campos
Genesis campos
GENESISCAMPOS123
 
Miranda castillo UNIX
Miranda castillo UNIXMiranda castillo UNIX
Miranda castillo UNIX
miranda696
 
Sandra saldaña instalarunix
Sandra saldaña instalarunixSandra saldaña instalarunix
Sandra saldaña instalarunix
sandrasal23
 
Instalar unixElvis Urquizo
Instalar unixElvis UrquizoInstalar unixElvis Urquizo
Instalar unixElvis Urquizo
elvisitourquizo12
 
Sandra saldaña instalarunix
Sandra saldaña instalarunixSandra saldaña instalarunix
Sandra saldaña instalarunix
sandrasal23
 
Jadira palta
Jadira paltaJadira palta
Jadira palta
jadira23palta
 
Cristian medina Instalar unix
Cristian medina Instalar unixCristian medina Instalar unix
Cristian medina Instalar unix
CRISTIAN23MEDINA
 
Ambar galeas
Ambar galeasAmbar galeas
Ambar galeas
ambar108galeas
 
Instalar unix Euller Yugsan 108 bb72
Instalar unix Euller Yugsan 108 bb72Instalar unix Euller Yugsan 108 bb72
Instalar unix Euller Yugsan 108 bb72
Euller108BB72
 
Clase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfClase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdf
odryemeliGomez
 
Cómo crear una distribución Linux
Cómo crear una distribución LinuxCómo crear una distribución Linux
Cómo crear una distribución Linux
Mauro Parra-Miranda
 

Similar a Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018] (20)

Transcripcion (jackeline chillogalli
Transcripcion (jackeline chillogalliTranscripcion (jackeline chillogalli
Transcripcion (jackeline chillogalli
 
Ronald
RonaldRonald
Ronald
 
Curso básico linux
Curso básico linuxCurso básico linux
Curso básico linux
 
Como instalar unix ...lili
Como instalar unix ...liliComo instalar unix ...lili
Como instalar unix ...lili
 
Mary cervantes
Mary cervantesMary cervantes
Mary cervantes
 
Nicolle
NicolleNicolle
Nicolle
 
Transcripcion yamy
Transcripcion yamyTranscripcion yamy
Transcripcion yamy
 
Viviana medina MATERIA
Viviana medina MATERIAViviana medina MATERIA
Viviana medina MATERIA
 
Viviana medina
Viviana medinaViviana medina
Viviana medina
 
Genesis campos
Genesis camposGenesis campos
Genesis campos
 
Miranda castillo UNIX
Miranda castillo UNIXMiranda castillo UNIX
Miranda castillo UNIX
 
Sandra saldaña instalarunix
Sandra saldaña instalarunixSandra saldaña instalarunix
Sandra saldaña instalarunix
 
Instalar unixElvis Urquizo
Instalar unixElvis UrquizoInstalar unixElvis Urquizo
Instalar unixElvis Urquizo
 
Sandra saldaña instalarunix
Sandra saldaña instalarunixSandra saldaña instalarunix
Sandra saldaña instalarunix
 
Jadira palta
Jadira paltaJadira palta
Jadira palta
 
Cristian medina Instalar unix
Cristian medina Instalar unixCristian medina Instalar unix
Cristian medina Instalar unix
 
Ambar galeas
Ambar galeasAmbar galeas
Ambar galeas
 
Instalar unix Euller Yugsan 108 bb72
Instalar unix Euller Yugsan 108 bb72Instalar unix Euller Yugsan 108 bb72
Instalar unix Euller Yugsan 108 bb72
 
Clase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfClase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdf
 
Cómo crear una distribución Linux
Cómo crear una distribución LinuxCómo crear una distribución Linux
Cómo crear una distribución Linux
 

Más de RootedCON

Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro VillaverdeRooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
RootedCON
 
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
RootedCON
 
Rooted2020 hunting malware-using_process_behavior-roberto_amado
Rooted2020 hunting malware-using_process_behavior-roberto_amadoRooted2020 hunting malware-using_process_behavior-roberto_amado
Rooted2020 hunting malware-using_process_behavior-roberto_amado
RootedCON
 
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
RootedCON
 
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
RootedCON
 
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
RootedCON
 
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
RootedCON
 
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguerRooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
RootedCON
 
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
RootedCON
 
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemyRooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemy
RootedCON
 
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
RootedCON
 
Rooted2020 virtual pwned-network_-_manel_molina
Rooted2020 virtual pwned-network_-_manel_molinaRooted2020 virtual pwned-network_-_manel_molina
Rooted2020 virtual pwned-network_-_manel_molina
RootedCON
 
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
RootedCON
 
Rooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopezRooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopez
RootedCON
 
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valeroRooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
RootedCON
 
Rooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jaraRooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jara
RootedCON
 
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
RootedCON
 
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
RootedCON
 
Rooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yusteRooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yuste
RootedCON
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
RootedCON
 

Más de RootedCON (20)

Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro VillaverdeRooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
 
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
 
Rooted2020 hunting malware-using_process_behavior-roberto_amado
Rooted2020 hunting malware-using_process_behavior-roberto_amadoRooted2020 hunting malware-using_process_behavior-roberto_amado
Rooted2020 hunting malware-using_process_behavior-roberto_amado
 
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
Rooted2020 compliance as-code_-_guillermo_obispo_-_jose_mariaperez_-_
 
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
Rooted2020 the day i_ruled_the_world_deceiving_software_developers_through_op...
 
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
Rooted2020 si la-empresa_ha_ocultado_el_ciberataque,_como_se_ha_enterado_el_r...
 
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
Rooted2020 wordpress-another_terror_story_-_manuel_garcia_-_jacinto_sergio_ca...
 
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguerRooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
Rooted2020 Atacando comunicaciones-de_voz_cifradas_-_jose_luis_verdeguer
 
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
 
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemyRooted2020 stefano maccaglia--_the_enemy_of_my_enemy
Rooted2020 stefano maccaglia--_the_enemy_of_my_enemy
 
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
 
Rooted2020 virtual pwned-network_-_manel_molina
Rooted2020 virtual pwned-network_-_manel_molinaRooted2020 virtual pwned-network_-_manel_molina
Rooted2020 virtual pwned-network_-_manel_molina
 
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
Rooted2020 van a-mear_sangre_como_hacer_que_los_malos_lo_paguen_muy_caro_-_an...
 
Rooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopezRooted2020 todo a-siem_-_marta_lopez
Rooted2020 todo a-siem_-_marta_lopez
 
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valeroRooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
Rooted2020 roapt evil-mass_storage_-_tu-ya_aqui_-_david_reguera_-_abel_valero
 
Rooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jaraRooted2020 live coding--_jesus_jara
Rooted2020 live coding--_jesus_jara
 
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
Rooted2020 legalidad de-la_prueba_tecnologica_indiciaria_cuando_tu_papi_es_un...
 
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
Rooted2020 hackeando el-mundo_exterior_a_traves_de_bluetooth_low-energy_ble_-...
 
Rooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yusteRooted2020 evading deep-learning_malware_detectors_-_javier_yuste
Rooted2020 evading deep-learning_malware_detectors_-_javier_yuste
 
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_moralesRooted2020 encontrando 0days-en_2020_-_antonio_morales
Rooted2020 encontrando 0days-en_2020_-_antonio_morales
 

Último

proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
raquelariza02
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
cdraco
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
vazquezgarciajesusma
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
ItsSofi
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
coloradxmaria
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
CesarPazosQuispe
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
sarasofiamontezuma
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
DanielErazoMedina
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
IsabellaRubio6
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
Leidyfuentes19
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
marianabz2403
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
Fernando Villares
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
cofferub
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
DiegoCampos433849
 

Último (20)

proyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmusproyecto invernadero desde el departamento de tecnología para Erasmus
proyecto invernadero desde el departamento de tecnología para Erasmus
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informática
 
Estructuras básicas_ conceptos básicos de programación.pdf
Estructuras básicas_  conceptos básicos de programación.pdfEstructuras básicas_  conceptos básicos de programación.pdf
Estructuras básicas_ conceptos básicos de programación.pdf
 
Conceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. TecnologíaConceptos Básicos de Programación. Tecnología
Conceptos Básicos de Programación. Tecnología
 
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
Semana 10_MATRIZ IPER_UPN_ADM_03.06.2024
 
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
ACTIVIDAD DE TECNOLOGÍA AÑO LECTIVO 2024
 
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdfEstructuras Básicas_ Conceptos Basicos De Programacion.pdf
Estructuras Básicas_ Conceptos Basicos De Programacion.pdf
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptxleidy fuentes - power point -expocccion -unidad 4 (1).pptx
leidy fuentes - power point -expocccion -unidad 4 (1).pptx
 
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdfDESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
DESARROLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Posnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativaPosnarrativas en la era de la IA generativa
Posnarrativas en la era de la IA generativa
 
Conceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación ProyectoConceptos Básicos de Programación Proyecto
Conceptos Básicos de Programación Proyecto
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Diagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestreDiagrama de flujo - ingenieria de sistemas 5to semestre
Diagrama de flujo - ingenieria de sistemas 5to semestre
 

Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]

  • 1. GNU/Linux Exploiting Introducción a la explotación de binarios
  • 2. GNU/Linux Exploiting 2 • Manuel Blanco Parajón • Jugador habitual de competiciones “CTF” • w0pr • ID-10-T • Estudiante de Ingeniería Informática • Autodidacta # whoami @manuelbp01 manuelbp01@gmail.com
  • 3. GNU/Linux Exploiting 3 • ¿Qué vamos a ver en este taller? Introducción a la explotación de vulnerabilidades en software • Requisitos recomendados • Nivel básico de programación en C • Manejo sencillo de la shell GNU/Linux • Conocimientos básicos de Ingeniería Inversa • Fundamentos de Computadores • Resultados Ser capaz de desarrollar tu primer exploit Introducción
  • 5. GNU/Linux Exploiting 5 • Bug: Error de software o fallo de programación que causa un comportamiento anómalo o desencadena un resultado inesperado en la aplicación. • Vulnerabilidad: Clase particular de bug que puede ser aprovechado por un atacante para comprometer la seguridad, integridad, disponibilidad y confidencialidad de un sistema. • Exploit: Fragmento de software utilizado para aprovechar una vulnerabilidad de un sistema, con el fin de conseguir un comportamiento no deseado para el mismo. • Payload: Efecto que se desea lograr al explotar una vulnerabilidad. Términos
  • 6. GNU/Linux Exploiting 6 • Ingeniería Inversa: Proceso llevado a cabo con el objetivo de obtener información a partir de un producto final. • Análisis estático • Análisis dinámico Ingeniería Inversa
  • 7. GNU/Linux Exploiting 7 • Análisis estático: Tipo de análisis de software que se realiza sin ejecutar el programa. • Ejemplo: Podemos utilizar objdump como un desensamblador (traduce código máquina a ensamblador) Ingeniería Inversa
  • 8. GNU/Linux Exploiting 8 • Análisis dinámico: Tipo de análisis de software que se realiza ejecutando el programa. • Ejemplo • strace: Permite monitorear las llamadas al sistema y las señales. • ltrace: Permite monitorear las llamadas a las librerías compartidas. Ingeniería Inversa
  • 9. GNU/Linux Exploiting 9 • IDA 7.0 Freeware Version https://www.hex-rays.com/products/ida/support/download_freeware.shtml Herramientas útiles
  • 10. GNU/Linux Exploiting 10 • radare2 https://github.com/radare/radare2 Herramientas útiles
  • 11. GNU/Linux Exploiting 11 • GDB (GNU Debugger) Herramientas útiles
  • 12. GNU/Linux Exploiting 12 • PEDA (Python Exploit Development Assistance for GDB) https://github.com/longld/peda Herramientas útiles
  • 13. GNU/Linux Exploiting 13 • Los depuradores son muy útiles!! Primer ejercicio
  • 14. GNU/Linux Exploiting 14 • Estructuras de datos (tablas) que muestran la distribución de la memoria Mapa de memoria
  • 15. GNU/Linux Exploiting 15 • Segmentación de memoria: División de la memoria primaria en segmentos o secciones • Los segmentos normalmente corresponden a las divisiones naturales de un programa, como las rutinas o las tablas de datos. • data: rw- • code: r-x • stack: rw- • heap: rw- Segmentación de memoria
  • 16. GNU/Linux Exploiting 16 • ¿Qué sucede cuando ejecutas un archivo ELF? • $ ./test • Normalmente el programa estará en el disco, y el kernel será el encargado de realizar una serie de procedimientos para el mapeo de la memoria del programa. Flujo de ejecución
  • 17. GNU/Linux Exploiting 17 Flujo de ejecución ./test fork() execve(“./test”, *argv[], *envp[]) sys_execve() do_execve() search_binary_handler() load_elf_binary() ld.so _start __libc_start_main _init main user mode kernel mode
  • 18. GNU/Linux Exploiting 18 Cómo se realiza el mapeo del programa a la memoria virtual • En el encabezado del programa • Se guardan qué segmentos se deben mapear y sus respectivas ubicaciones • También se guarda qué secciones pertenecen a qué segmentos • Durante el mapeo la memoria se dividirá en distintos segmentos dependiendo de sus respectivos permisos • Un segmento puede contener 0 o varias secciones Flujo de ejecución
  • 19. GNU/Linux Exploiting 19 Cómo se realiza el mapeo del programa a la memoria virtual Flujo de ejecución
  • 20. GNU/Linux Exploiting 20 Cómo se realiza el mapeo del programa a la memoria virtual Flujo de ejecución otra sección .data .bss .got.plt .rodata .text .init ELF encabezado RW R o RX kernel space DATA VMA CODE VMA stack heap En disco En memoria
  • 21. GNU/Linux Exploiting 21 Registros • Registros de propósito general • EAX EBX ECX EDX – 32 bit • AX BX CX DX – 16 bit • AH BH CH DH – 8 bit (parte alta) • AL BL CL DL – 8 bit (parte baja) Ensamblador x86 AH AL EAX AX
  • 22. GNU/Linux Exploiting 22 Registros • Stack Pointer • ESP – 32 bit • Apunta a la cima de la pila • Base Pointer • EBP – 32 bit • Apunta a la base de la pila • La pila es una estructura de datos (cola LIFO) que permite almacenar y recuperar datos Ensamblador x86
  • 23. GNU/Linux Exploiting 23 EBP: 0xffffcfd8 0x804871c ??? ??? 0x804871c ??? ??? 0xffffcfd8 Funcionamiento CPU Prólogo de la función Llamada a get_flag RET addr RET addr Frame pointer * La representación real de la pila sería al revés
  • 24. GNU/Linux Exploiting 24 0x804871c ??? ??? 0xffffcfd8 ??? ??? Funcionamiento CPU ??? ??? ??? Stack Frame Marco de pila: Estructura de datos que contienen la información de estado de la subrutina, son utilizados para almacenar variables locales y cálculos.
  • 25. GNU/Linux Exploiting 25 Funcionamiento CPU Epílogo de la función 0x804871c ??? ??? 0xffffcfd8 0x804871c ??? ??? 0x804871c ??? 0xffffcfd8 ???
  • 26. GNU/Linux Exploiting 26 Registros • Registro contador del programa • EIP • Apunta a la siguiente instrucción a ejecutar • Registro flag • eflags • Almacena los resultados de ejecución • Registro de segmento • cs ss ds es fs gs Ensamblador x86
  • 27. GNU/Linux Exploiting 27 Buffer: Espacio de memoria reservado para almacenar datos de manera temporal. Si se introducen más datos que los que el buffer puede almacenar, entonces se produce un desbordamiento. Buffer Overflow
  • 28. GNU/Linux Exploiting 28 Stack Smash gcc -fno-stack-protector stack-smash.c –o stack-smash
  • 29. GNU/Linux Exploiting 29 Stack Smash buffer (64 bytes) variable EBP RET argc argv envp variable EBP RET argc argv envp A AA A A A A A A … … … buffer (64 bytes) AAA A A A … … A A A A Recordemos que la pila crece desde las direcciones altas hacia las bajas, la representación real sería al revés.
  • 30. GNU/Linux Exploiting 30 Stack Smash • r <<< $(python -c 'print "A" * 64 + "B" * 4')
  • 31. GNU/Linux Exploiting 31 Stack Smash • r <<< $(python -c 'print "A" * 64 + "xefxbexadxde"')
  • 32. GNU/Linux Exploiting 32 Stack Smash El buffer podía almacenar 64 bytes, lo hemos desbordado y a continuación hemos sobrescrito la variable correctamente. Recordemos que en el formato little-endian el orden es del byte menos significativo hasta el byte más significativo.
  • 33. GNU/Linux Exploiting 33 Return to Text gcc -fno-stack-protector return-to-text.c -o return-to-text
  • 34. GNU/Linux Exploiting 34 Return to Text La representación de la pila sería: Nuestro objetivo es sobrescribir la dirección de retorno con la dirección de la función win() buffer (64 bytes) EBP RET
  • 35. GNU/Linux Exploiting 35 Return to Text Procedemos a calcular el desplazamiento necesario para llegar a sobrescribir la dirección de retorno. Para este proceso podemos utilizar un patrón cíclico (una secuencia única que nos permitirá calcular dicho offset).
  • 36. GNU/Linux Exploiting 36 Return to Text Tras generar un patrón de 100 bytes, obtenemos el desplazamiento
  • 37. GNU/Linux Exploiting 37 Return to Text Procedemos pues a obtener la dirección de la función win() objdump -M intel -D ./return-to-text
  • 38. GNU/Linux Exploiting 38 Return to Text Verificamos que podemos alterar el flujo correctamente:
  • 39. GNU/Linux Exploiting 39 Return to Shellcode gcc -fno-stack-protector -z execstack return-to-shellcode.c -o return-to-shellcode
  • 41. GNU/Linux Exploiting 41 Return to Shellcode A partir de 264 bytes, sobrescribimos el saved EBP (frame pointer) y RET
  • 42. GNU/Linux Exploiting 42 Return to Shellcode Esta ocasión nuestro fin es lograr ejecutar código arbitrario en el sistema, para dicha labor utilizaremos un shellcode.
  • 43. GNU/Linux Exploiting 43 Return to Shellcode Un shellcode es un conjunto de instrucciones normalmente programadas en lenguaje ensamblador y representadas en forma de códigos de operación, su propósito es ejecutar la operación que se haya programado. Shellcode que ejecuta /bin/sh con execve()
  • 44. GNU/Linux Exploiting 44 Return to Shellcode El buffer podía almacenar 64 bytes, lo hemos desbordado y a continuación hemos sobrescrito la variable correctamente. Recordemos que en el formato little-endian el orden es del byte menos significativo hasta el byte más significativo.
  • 45. GNU/Linux Exploiting 45 Return to Shellcode Procedemos a desactivar la ASLR: echo 0 | sudo tee /proc/sys/kernel/randomize_va_space A continuación ponemos un punto de ruptura en la llamada a gets() y observamos los parámetros que recibe:
  • 46. GNU/Linux Exploiting 46 Return to Shellcode Ahora que sabemos cual es la dirección de inicio de nuestro buffer, podemos alojar nuestro shellcode en el mismo y saltar a el:
  • 47. GNU/Linux Exploiting 47 Return to Shellcode Vamos a probar a ejecutarlo fuera del depurador Vemos que algo no va bien, habilitaremos la generación de core dumps (crasheos) y procederemos con un análisis post mortem. ulimit -c unlimited
  • 48. GNU/Linux Exploiting 48 Return to Shellcode Analizamos un poco el core dump y rápidamente localizamos el shellcode gdb -q --core core
  • 49. GNU/Linux Exploiting 49 Return to Shellcode Modificamos el exploit con la nueva dirección y ejecutamos de nuevo… ¿Dónde está mi shell?
  • 50. GNU/Linux Exploiting 50 Return to Shellcode Utilicemos strace para ver las llamadas al sistema
  • 51. GNU/Linux Exploiting 51 Return to Shellcode Parece ser que estamos perdiendo el contexto de la entrada estándar, debemos mantener stdin abierto. (python exploit.py; cat) | ./return-to-shellcode cat exploit - | ./return-to-shellcode
  • 52. GNU/Linux Exploiting 52 Protecciones ASLR (Address Space Layout Randomization) La aleatoriedad en la disposición del espacio de direcciones es una técnica que intenta mitigar o dificultar la explotación de vulnerabilidades basadas en la corrupción de memoria (originalmente se implementó en PaX). En 32 bits la entropía no es muy alta pues 12 bits quedan estáticos, es posible realizar un ataque de fuerza bruta. Luego se verán maneras de sortear esta mitigación. En este caso tendríamos una probabilidad de 1 165 para adivinar la dirección del buffer.
  • 53. GNU/Linux Exploiting 53 Protecciones NX (No eXecute) Normalmente las páginas de memoria suelen estar marcadas como no ejecutables gracias a la protección NX (non-execute). Esto significa que aunque logremos inyectar un shellcode en la memoria y logremos alterar el flujo del programa para que salte a nuestra zona controlada, no podremos ejecutarlo.
  • 54. GNU/Linux Exploiting 54 Protecciones PIE/PIC (Position Independent Execution) Este mecanismo de protección permite realizar una aleatorización en los segmentos de texto y datos. Es decir, se realiza un direccionamiento relativo, en cada ejecución se generará de manera pseudo aleatoria una dirección base y se irán calculando el resto de direcciones mediante sumas de desplazamientos. Por defecto gcc no compila con PIE, para utilizar esta protección se deben utilizar las flags -fPIC - pie
  • 55. GNU/Linux Exploiting 55 Protecciones StackGuard Este mecanismo de protección consiste en generar un valor aleatorio (canario) en el prólogo de una función, salvaguardarlo justo antes del frame pointer y dirección de retorno en la pila. En el epílogo de la función realizará la operación lógica de disyunción exclusiva con el valor actual y el generado anteriormente, de manera que detectará si ha sido modificado o no. buffer EBP canario RET
  • 56. GNU/Linux Exploiting 56 PLT/GOT La PLT (Procedure Linkage Table) es usada para llamar a procedimientos/funciones cuya dirección no se conoce durante el enlazado, es el enlazador dinámico el encargado de resolverla durante la ejecución. La GOT (Global Offsets Table) es otra tabla que contiene direcciones absolutas los procedimientos/funciones que serán utilizados, se utiliza de manera similar a la PLT.
  • 57. GNU/Linux Exploiting 57 Enlace perezoso (Lazy Binding) En el enlace perezoso (procesos llevado a cabo por el cargador de ELF) cuando un binario está cargado en memoria y una función es llamada por primera vez, la PLT realiza un salto a la GOT donde resolverá la entrada que aún no ha sido resuelta. En ese momento el enlazador dinámico es invocado, este resolverá y almacenará en la GOT la dirección del símbolo correspondiente a la función invocada. Las siguientes llamadas a la función no volverán a pasar por dicho proceso, pues su dirección ya estará resuelta en la GOT.
  • 58. GNU/Linux Exploiting 58 Protecciones RELRO (Relocation Read-Only) RELRO Parcial: Reordena las secciones ELF de manera que las secciones internas de datos (.got, .dtors, etc.) precedan las secciones de datos del programa (.data y .bss), la problemática es que la GOT es escribible. RELRO Completo: Remapea toda la GOT como solo lectura. Es la única manera de mitigar cualquier tipo de técnica que trate de modificar la GOT, pues protege las secciones de datos internos en el ELF para que no se sobrescriban (a medida que se reordenan las secciones ELF). Flags para compilar con Full RELRO: gcc -Wl,-z,relro,-z,now
  • 59. GNU/Linux Exploiting 59 GOT Cómo encontrar la GOT objdump -R elf
  • 60. GNU/Linux Exploiting 60 GOT Hijacking Para poder implementar el enlazado perezoso la GOT debe ser escribible. El objetivo sería sobrescribir alguna entrada de la GOT, de manera que afecte al flujo del programa. … … call foo@plt … … printf system … .text .got.plt jmp *(foo@GOT) push index jmp PLT0 foo@plt push *(GOT + 4) jmp *(GOT + 8) PLT0 Cuando se produce un call foo, se realizará un jmp a la función system.
  • 61. GNU/Linux Exploiting 61 Return to Library El objetivo de esta técnica es sortear la protección NX. Para lograr dicho fin, debemos sobrescribir la dirección de retorno con una llamada de librería del sistema. Uno de los problemas sería la ASLR, para poder realizar esta metodología en dicho escenario sería necesaria alguna fuga de información que nos permitiese calcular la dirección base de la librería del sistema.
  • 62. GNU/Linux Exploiting 62 Return to Library gcc -fno-stack-protector return-to-library.c -o return-to-library
  • 63. GNU/Linux Exploiting 63 Return to Library Procederemos a ejecutar system("/bin/sh"), debemos situar los argumentos en la pila de manera que cuando se ejecute system estos sean interpretados como tal. AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA AAAAAAAAAA system fake RET & /bin/sh
  • 64. GNU/Linux Exploiting 64 Return to Library Procederemos a buscar las direcciones de los argumentos requeridos.
  • 65. GNU/Linux Exploiting 65 Return to Library Ponemos un punto de ruptura en la instrucción ret y verificamos que todo se encuentra en el lugar correcto
  • 66. GNU/Linux Exploiting 66 Return to Library Podemos utilizar exit como dirección de retorno, para evitar generar un core dump al finalizar e intentar ejecutar "0x41414141".
  • 67. GNU/Linux Exploiting 67 Condición de carrera (Race Condition) Son un tipo de error lógico donde dos flujos de código se ejecutan de forma concurrente y el resultado final depende del orden de ejecución, como consecuencia las acciones de uno sobre los datos puede influir en los resultados del otro.
  • 68. GNU/Linux Exploiting 68 Condición de carrera (Race Condition)
  • 69. GNU/Linux Exploiting 69 Condición de carrera (Race Condition) Nuestro objetivo será aprovecharnos del sleep, para poder leer el fichero temporal.
  • 70. GNU/Linux Exploiting 70 Condición de carrera (Race Condition) Hemos logrado el objetivo!
  • 71. GNU/Linux Exploiting 71 Format String Este tipo de bug ocurre cuando una entrada de datos se evalúa por una función de manera incorrecta (normalmente la función pertenecerá a la familia *printf()). Explotando dicha vulnerabilidad se puede lograr desde una fuga de memoria hasta una escritura.
  • 73. GNU/Linux Exploiting 73 Format String Este tipo de bug ocurre cuando una entrada de datos se evalúa por una función de manera incorrecta (normalmente la función pertenecerá a la familia *printf()). Explotando dicha vulnerabilidad obtenemos una primitiva de lectura y escritura.
  • 74. GNU/Linux Exploiting 74 Format String Procedemos pues a introducir algún testigo de formato e intentamos volcar valores de la pila.
  • 75. GNU/Linux Exploiting 75 Format String Utilicemos un depurador, para visualizar mejor lo que sucede. Vemos como los valores examinados coinciden con el volcado.
  • 76. GNU/Linux Exploiting 76 Format String Vamos a escribir los dos bytes inferiores (LOB) del objetivo: • r <<< $(python -c 'print "x34xa0x04x08" + "%16701d%7$hn"') Ahora vamos a escribir los dos bytes superiores (HOB): • r <<< $(python -c 'print "x36xa0x04x08" + "%16701d%7$hn"')
  • 77. GNU/Linux Exploiting 77 Format String • Reglas de escritura: • Si HOB > LOB • [dirección+2] [dirección] [LOB - 8] [offset+1] [HOB-LOB] [offset] • Si HOB < LOB • [dirección+2] [dirección] [HOB - 8] [offset] [LOB-HOB] [offset+1]
  • 78. GNU/Linux Exploiting 78 Format String Vamos a aprovechar esta fuga de información (infoleak), para bypassear el StackGuard
  • 79. GNU/Linux Exploiting 79 Format String Vamos a ver el canario que genera, poner un punto de ruptura en la llamada al sistema y buscar dicho valor en la pila
  • 80. GNU/Linux Exploiting 80 Format String Vemos que la posición del canario es $esp + 540, como las direcciones son de 4 bytes: 540 4 = 135. Podemos utilizar el testigo de acceso directo: %135$p
  • 81. GNU/Linux Exploiting 81 ROP (Return-oriented programming) Esta técnica comúnmente nos permitirá evadir la protección NX. El objetivo consiste en lograr ejecutar una secuencia de instrucciones máquina llamadas gadgets (presentes en la memoria de la máquina) con el fin de lograr ejecutar operaciones arbitrarias en la máquina. Cada gadget generalmente termina en una instrucción de retorno y se suelen encontrar en subrutinas del programa y/o bibliotecas compartidas. Utilizaremos una herramienta para localizar los gadgets fácilmente: • https://github.com/sashs/Ropper
  • 82. GNU/Linux Exploiting 82 ROP gcc -static -fno-stack-protector rop.c -o rop
  • 84. GNU/Linux Exploiting 84 ROP Nuestro objetivo será hacer ejecutable el stack, para esta labor utilizaremos la syscall mprotect:
  • 85. GNU/Linux Exploiting 85 ROP Ahora que sabemos los argumentos que recibe, buscaremos los gadgets necesarios para controlar los registros y efectuar la llamada al sistema. La instrucción int 0x80 provoca una interrupción software (llamada al sistema), es una instrucción especial que causa que el procesador transfiera el control a un código privilegiado (núcleo).
  • 86. GNU/Linux Exploiting 86 ROP Desactivemos la ASLR y veamos cual es la dirección del stack: Ahora tracearemos nuestro rop-chain y verifiquemos que la pila queda con permisos de ejecución.
  • 88. GNU/Linux Exploiting 88 ROP Vemos que controlamos perfectamente la pila
  • 89. GNU/Linux Exploiting 89 ROP Y finalmente hemos logrado nuestro fin Ahora que tenemos control de la pila, podemos alojar nuestro shellcode al inicio del buffer y hacer un exploit en condiciones
  • 91. GNU/Linux Exploiting 91 ROP Verifiquemos que la shellcode se ejecuta correctamente r < <(python exploit.py)
  • 92. GNU/Linux Exploiting 92 ROP Habilitamos los core dumps y ajustamos el exploit con la dirección del buffer fuera del depurador. Y finalmente hemos logrado nuestro objetivo!