Page cover

💿Buffer Overflow en Linux

Es una vulnerabilidad de seguridad en la que un programa, al escribir datos en un buffer de memoria, sobrepasa los límites del buffer y sobreescribe la memoria, pudiendo, por ejemplo, ejecutar código.

Buffer Overflow en Linux


Nos conectamos por SSH al host

gdb -q leave_msg # O programa que contenga el host
run $(python -c "print '\x55' * 1200")

1. Subir el 1200 hasta que de un error

(gdb) info registers 

eax            0x1	1
ecx            0xffffd6c0	-10560
edx            0xffffd06f	-12177
ebx            0x55555555	1431655765
esp            0xffffcfd0	0xffffcfd0
ebp            0x55555555	0x55555555	# <---- EBP overwritten
esi            0xf7fb5000	-134524928
edi            0x0	0
eip            0x55555555	0x55555555	# <---- EIP overwritten
eflags         0x10286	[ PF SF IF RF ]
cs             0x23	35
ss             0x2b	43
ds             0x2b	43
es             0x2b	43
fs             0x0	0
gs             0x63	99

2. Saber el número exacto en el que da el fallo

  • Aproximarnos lo máximo que podamos

  • En el número 2100 falla lo más cercano

  • Usamos Metasploit Tools para generar un pattern

Lo ejecutamos con python en GDB:

  • Vemos el offset con Metasploit Tools:

Encontramos el offset en 2060

3. Determinar la longitud del shellcode

4. Identificar Bad Characters:

  • Calcular buffer de nuevo:

5. GDB Breakpoint:

  • Hemos alcanzado el breakpoint.

6. Ver el Stack:

  • Vemos que se sobreescribe el buffer donde terminan los 0x55

  • Empieza por 0x01 en vez de 0x00, nos mostró un error de null byte ignored

  • Eliminamos el 0x00 de la ecuación, por lo que será 1 byte menos:

  • Ajustamos el buffer de nuevo sin el x00:

  • Eliminamos también de la ecuación el 0x09 y lo volvemos a enviar:

  • Repetir este proceso hasta que no aparezca ningún null byte 0x00

Código final sin ningún null byte:

Los Bad Characters detectados son:

7. Generando el shellcode:

  • Editarlo en oneliner siguiendo el siguiente esquema:

8. Dirección de memoria donde queremos escribir nuestro payload:

Donde empiezan los 0x90:

Editamos el buffer de nuevo para agregar esta dirección en el EIP:

9. Exploit final:

10. Recibimos la shell:

Última actualización

¿Te fue útil?