💿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.
Nota: Este tipo de técnicas son muy invasivas, ya que vamos a sobreescribir la memoria de un buffer y ejecutar una reverse shell, por lo que no podemos utilizar estas técnicas sin un consentimiento o aprobación por parte del objetivo
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 992. 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
0x09y 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?