He compartido esta info con todos vosotros en mi blog pero me gustaría hacerlo aquí tambien en la comunidad ya que gracias a esta info he codeado mi primera shellcode, muy básica, pero a veces los tutoriales son algo enrevesados y uno se pierde por la mitad. Así que espero que os sirva de ayuda a los que están interesados en aprender.
Tutoriales muy muy claros:
http://securityetalii.es/2010/04/14/exploitation-shellcodes-en-linux-i/
http://securityetalii.es/2010/04/21/exploitation-shellcodes-en-linux-ii/
http://securityetalii.es/2010/04/05/exploitation-evadiendo-nx/
Compilar un Programita en ensamblador:
Crea el binario del código compilado. (con el archivo.o generado anteriormente)
Quitar la protección del stack, para que sea ejecutable. (Sí el programita ld tambien puede hacerlo)
Desensamblar nuestro ejecutable
Desactivar core dump:
Desactivar ALSR: (por defecto está puesto a 2, nosotros lo ponemos a 0)
Bueno.. con esto ya es suficiente para empezar. Si teneis ganas de aprender estoy seguro que no os vais a perder en el camino pero recordad que a programar se aprende programando.
La shellcode que se explica en los tutoriales no es la única solución ni la mejor para lanzar una shell.
Os animo a visitar en shellstorm las shellcodes de Sagrini (seguro que ya lo conoceis todos) y Kernel_Panic para lanzar el /bin/sh:
http://shell-storm.org/shellcode/shellcode-linux.php
Tambien os animo a utilizar una máquina virtual para codear vuestras shellcodes. A mi me resulta mas cómodo y no me tengo que preocupar de los cambios que le hago al sistema operativo.
Tutoriales muy muy claros:
http://securityetalii.es/2010/04/14/exploitation-shellcodes-en-linux-i/
http://securityetalii.es/2010/04/21/exploitation-shellcodes-en-linux-ii/
http://securityetalii.es/2010/04/05/exploitation-evadiendo-nx/
Compilar un Programita en ensamblador:
Código (bash) [Seleccionar]
nasm -f elf $ShellcodeEnASM
Crea el binario del código compilado. (con el archivo.o generado anteriormente)
Código (bash) [Seleccionar]
ld archivo.o -o sc
Quitar la protección del stack, para que sea ejecutable. (Sí el programita ld tambien puede hacerlo)
Código (bash) [Seleccionar]
sudo execstack -s sc $ShellcodeEjecutable
Desensamblar nuestro ejecutable
Código (bash) [Seleccionar]
objdump -d $ShellcodeEjecutable
Desactivar core dump:
Código (bash) [Seleccionar]
ulimit -c unlimited
Desactivar ALSR: (por defecto está puesto a 2, nosotros lo ponemos a 0)
Código (bash) [Seleccionar]
echo 0 > /proc/sys/kernel/randomize_va_space
Bueno.. con esto ya es suficiente para empezar. Si teneis ganas de aprender estoy seguro que no os vais a perder en el camino pero recordad que a programar se aprende programando.
La shellcode que se explica en los tutoriales no es la única solución ni la mejor para lanzar una shell.
Os animo a visitar en shellstorm las shellcodes de Sagrini (seguro que ya lo conoceis todos) y Kernel_Panic para lanzar el /bin/sh:
http://shell-storm.org/shellcode/shellcode-linux.php
Tambien os animo a utilizar una máquina virtual para codear vuestras shellcodes. A mi me resulta mas cómodo y no me tengo que preocupar de los cambios que le hago al sistema operativo.