Exploits
¿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.