Shellcode

From FdIwiki ELP
Jump to: navigation, search

Se trata de un código preparado con el fin de ser inyectado y ejecutado directamente en la memoria durante la ejecución de un problema haciendo uso de alguna vulnerabilidad encontrada en el software.

Cuando programamos una shellcode, debemos prestar especial atención a su optimización y tamaño ya que el espacio que tendremos para alojarlo suele ser bastante limitado.

Generalmente, es utilizado con el objetivo de ejecutar una shell con suid root (administrador), manipular archivos de usuarios y contraseñas (modificar contraseñas, añadir usuarios con privilegios...), etc...

Tipos de shellcode

  • Shellcode local: se define como aquel que no establece ninguna conexión, por lo que su uso está restringido para uso local en la máquina afectada. Un ejemplo serían las múltiples shellcode que permiten escalado de privilegios.
  • Shellcode remoto: código que tras su ejecución origina una conexión desde o hacia la máquina del atacante. Un ejemplo sería la generación de una shell inversa desde la máquina explotada hacia la máquina atacante.

Problemas al programar shellcode

Además del espacio que ocupa la shellcode, hay dos puntos que debemos tener en cuenta. Los bytes nulos (Null Byte Problem) y el direccionamiento de memoria (Addressing Problem).

  • Null Byte Problem: La manera más común de inyectar nuestro shellcode es a través de funciones usadas para el manejo de strings. Estas funciones finalizan la ejecución si encuentran un byte nulo (0x00), por lo que tendremos que tener cuidado de evitar que nuestra shellcode contenga uno de estos bytes ya que la ejecución concluirá y no alcanzaremos nuestro objectivo.
  • Addressing problem:Este problema se debe a que queremos inyectar nuestro código en un programa durante su ejecución, por lo que debemos conocer de antemano las direcciones de memoria de los elementos que usaremos.

Herramientas de interés

Enlaces externos

Dejo por aqui un enlace a la wikipedia donde teneis ejemplos de shellcode para ser mas didactico. Shellcode