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