Simple Overflow - Crackmes

0xH3rshel · August 29, 2023

Autor: BitFriends
Dificultad: 1.3/6

img

Intro

En este ejercicio el objetivo es sobreescribir una variable mediante un bufferoverflow.

Análisis

Lo primero que hago es abrir el binario con radare2, analizarlo y listar las funciones.

img

Main

La función main no hace nada a parte de llamar a login.

img

Login

He utilizado Cutter para decompilar esta función.

img

Como se puede ver, utiliza la función malloc() para guardar en el heap dos variables.

  • uVar1: Será donde fgets() guardará la entrada del usuario.
  • piVar2: Es la variable que debemos sobreescribir.

Vemos que despues de guardar la entrada del usuario, comprueba si la variable piVar2 es igual a 0. En caso de serlo, habremos conseguido iniciar sesión como admin.

Explotación

Con radare2 coloco un breakpoint justo después de la entrada el usurario.

img

[0x5609cba57169]> db 0x5609cba571c0

A continuación, ejecuto el programa y le paso una entrada cualquiera.

img

Como se puede ver en la imágen anterior, hay una distancia de 32 bytes entre el valor iniciar de piVar2 (01) y la entrada del usuario.

fgets()

La función que se utiliza para leer la entrada del usuario es fgets(), la cual leerá hasta que encuentre un salto de linea (\x0A). Por lo que será necesario mandarlo al final del exploit.

piVar2

Esta variable es de tipo int32_t por lo que al menos necesitaremos 4 bytes contiguos de 0 (\x00).

Exploit.py

#!/bin/python3

from pwn import *

elf = ELF("./simple_overflow")
p = process(elf.path)

payload  =  b"0" * 32       # Padding
payload +=  b"\x00" * 4     # Override piVar2
payload +=  b"\x0a"         # EOL

p.send(payload)
print(p.recvline())
print(p.recvline())

Output:

┌──(h3rshel㉿kali)-[~/Desktop/revs]
└─$ python3 exploit.py
[*] '/home/h3rshel/Desktop/revs/simple_overflow'
    Arch:     amd64-64-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      PIE enabled
[+] Starting local process '/home/h3rshel/Desktop/revs/simple_overflow': pid 64946
[*] Process '/home/h3rshel/Desktop/revs/simple_overflow' stopped with exit code 0 (pid 64946)
b'enter password: uid: 0\n'
b'you are logged in as admin\n'

Muchas gracias a BitFriends por este desafío.

Twitter, Facebook