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:
nasm -f elf $ShellcodeEnASM
Crea el binario del código compilado. (con el archivo.o generado anteriormente)
ld archivo.o -o sc
Quitar la protección del stack, para que sea ejecutable. (Sí el programita ld tambien puede hacerlo)
sudo execstack -s sc $ShellcodeEjecutable
Desensamblar nuestro ejecutable
objdump -d $ShellcodeEjecutable
Desactivar core dump:
ulimit -c unlimited
Desactivar ALSR: (por defecto está puesto a 2, nosotros lo ponemos a 0)
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.phpTambien 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.