¿Qué es un exploit?
Un 'exploit' es un programa o técnica que aprovecha una vulnerabilidad. Los exploits dependen de los sistemas operativos y sus configuraciones, de las configuraciones de los programas que se están ejecutando en un ordenador y de la LAN donde están. Vale , pero ¿qué es una vulnerabilidad? Una 'vulnerabilidad' es "algo" de un sistema informático que evitará que se pueda usar correctamente, o que permitirá que lo controlen personas no autorizadas. Hay muchos tipos de vulnerabilidades. Puede haber un error en la configuración del servicio o bien un error en la programación del servicio (leáse overflow :P). Pueden estar creados en cualquier lenguaje. Los exploit para windows suelen estar hechos en C y/o ensamblador, mientras que los de unix pueden estar hechos también en perl por ejemplo, aunque suelen estar hechos en C.


¿Alguna otra definición de exploit?

Término con el que se denomina en el entorno "hacker" a un método concreto de usar un error de algún programa (bug) para entrar en un sistema informático. Generalmente, un exploit suele ser un programa que se aprovecha de algún error del sistema operativo, por ejemplo, para obtener los privilegios del administrador y así tener un control total sobre el sistema. Aunque como decíamos, un exploit no tiene por que ser un programa, por definición es simplemente una forma de sacar provecho de un error en un programa (explotar un error).

Recuerda que la utilización de un "exploit" sin la supervisión/aprobación del administrador del sistema puede ser considerado (y lo es) un delito y está penado con fuertes multas y/o cárcel. "elhacker.net" no se hace responsable del MAL USO de estos exploits. Úsalos siempre bajo tu propia responsabilidad, con moderación y para auditar/testear tus propios sistemas o investigar tus propias máquinas.

¿Cómo se usan?

Dado que no se puede establecer una regla general porque cada uno ataca un problema diferente es una buena costumbre leer el código fuente para saber como compilarlo y ejecutarlo con éxito.

Además a menudo vienen con algún texto explicativo tipo leeme o similar.

nano exploit.c
pico exploit.c
more exploit.c
cat exploit.c
etc...

En un entorno unix/linux lo normal será bajar el código fuente y luego compilarlo. Para ello se sigue el procedimiento habitual de la compilación de un programa en unix/Linux. Esto es:
gcc exploit.c -o exploit

y luego para ejecutarlo:
./exploit parámetro1 parámetro2 ... parámetro n

Pero si el exploit estaba en perl
perl exploit.pl parámetro1 parámetro 2 ... parámetro n

Si el exploit está en shell script
./sh exploit.sh parámetro1 parámetro 2 ... parámetro n

Si deseas compilarlo en windows tendrás que tener la herramienta apropiada para manejarlo en windows. Si está en C Dev c/c++ o LCCWIN 32 por ejemplo. Si está en perl necesitarás un emulador de perl para windows

¿Qué clases de exploit hay?

Se puede diferenciar a los exploit en locales y remotos. Los exploits locales actúan en la máquina en la que están. Por tanto si deseo atacar otro ordenador primero tendré que subir ese código y luego conseguir ejecutarlo para que funcione allí. Si lo ejecuto aquí actuará aquí.

Los exploit remotos se ejecutan desde aquí, pero actúan en otra máquina víctima de manera que utilizas algún servicio conectado a la red que tenga una vulnerabilidad para poder obtener un tipo de beneficio como puede ser acoplar una red a un puesto no privilegiado (p. ej. el 1024).

¿Qué es un puerto no privilegiado?


Los puertos no privilegiados son los puertos mayores de 1024.
Los anteriores están reservados al sistema y al usuario root. Solo podrás usar un puerto privilegiado si el exploit consigue ser root o funcionar en el GDT del kernel.

 

¿Qué es una shellcode?

Una shellcode es basicamente una serie de ordenes en ensamblador que hace algo de la cual sacamos provecho; ejecutar /bin/sh para obtener una shell, copiar una shell y setearla con suid root, etc. Tiene unas características de programacion un tanto especiales.

Se usa para conseguir ejecutar un codigo despues de haber sobreescrito la direccion de retorno de un programa/función mediante un overflow, o mediante cualquier otro método válido. Es decir, el valor de la dirección de retorno que se sobreescribira será la de nuestra shellcode. Simplemente decir que cuando se produzca el desbordamiento y el salto se ejecutará nuestra shellcode.

 

Advisories de elhacker.net