Se trata de una utilidad que ejecuta una serie de exploits que se activan en el momento que un cliente se conecta a un punto de acceso controlado por karmetasploit, frecuentemente es empleado en conjunto con un punto de acceso falso inálambrico, que a su vez, tiene configurado un servicio de DHCP para proporcionar direcciones IP dinámicas en función del fichero de configuración donde se determinan las características del punto de acceso. (ver el post anterior que indica al detalle como configurar un fake access point: AQUÍ)
CREANDO UN PUNTO DE ACCESO FALSO, COMPARTIENDO LA CONEXION WIFI.
Un punto de acceso a Internet utilizando algún software o también conocido como SoftAP, permite a otros usuarios usar nuestra conexión a Internet pasando por medio de nuestras interfaces de red, de esta forma, todos los paquetes que se envíen al punto de acceso pasarán por medio de nosotros, dado que no establecemos una clave a nuestra WIFI todos los usuarios podrán conectarse a ella sin ningún tipo de restricción (aunque se podría establecer claves WEP/WPA si así lo deseamos) sin embargo, el atractivo de tener la conexión sin ningún tipo de protección es que el número de clientes que accederán a ella será mayor, lo que nos permitirá ejecutar ataques MITM con una mayor cantidad de objetivos potenciales.
ESTABLECER TABLAS ARP ESTATICAS PARA PROTEGERSE DE ENVENENAMIENTO.
Como se ha podido ver anteriormente, una de las técnicas utilizadas para realizar un ataque MITM consiste en engañar al AP y al objetivo para que el trafico pase por medio de un host determinado (normalmente la maquina del atacante) para evitar (o al menos dificultar) este tipo de ataques, pueden emplearse tablas ARP estáticas con el fin de que no puedan ser envenenadas.
En distribuciones basadas en Linux se puede ejecutar el comando arp -a para ver las IP y direcciones MAC asociadas a las conexiones de red, si vemos alguna dirección MAC repetida, algo no va bien… posiblemente se es victima u objetivo de un ataque. Por este motivo es recomendable establecer tablas ARP estáticas de la siguiente forma:
Meterpreter es un payload muy potente y el proyecto estrella de Metasploit Framework. Permite obtener una gran cantidad de información sobre un objetivo comprometido, así como también manipular ciertas características del sistema objetivo. Cuenta con un interprete que permite interactuar con el objetivo por medio de una serie de instrucciones directas que son fáciles de recordar y sirven para llevar a cabo procesos de post-explotación. La comunicación entre el interprete Meterpreter y la maquina remota es vía SSL lo que quiere decir que la información intercambiada entre las dos maquinas viaja cifrada, ademas es posible utilizar múltiples canales de ejecución, es decir, múltiples programas ejecutándose en la maquina remota y todos pueden ser manejados desde meterpreter con los comandos «channel» y «execute». Los comandos mas interesantes se listan a continuación:
background <Core>
Comando básico que permite enviar la sesión de meterpreter a segundo plano volver al interprete de msfconsole para cargar y ejecutar otros módulos o exploits.
keyscan <Stdapi User Interface Commands>
Con esta utilidad es posible saber que ha digitado el usuario en su maquina, de esta se obtiene fácilmente, claves, usuarios, direcciones, mensajes, etc.
getuid <Stdapi System Commands>
getsystem <Priv: Elevate Commands>
rev2self <stdapi System Commands>
Con el comando getuid se puede consultar la cuenta de usuario que se ha utilizado para ejecutar el proceso con Metepreter. Si se ha conseguido elevar privilegios con una utilidad como getsystem con el comando rev2self se puede volver a la cuenta de usuario no privilegiada.
migrate <Core>
Permite migrar el proceso de Meterpreter a otro proceso activo, su uso es muy simple basta con especificar un PID activo (que puede ser consultado utilizando el comando «ps» de Meterpreter).
De esta forma, cuando se cierre el proceso en ejecución anteriormente asociado al proceso de Meterpreter, la sesión no se perderá ya que ahora el payload dependerá de otro proceso existente en el sistema, al que se ha migrado. Por lo tanto, es común seleccionar procesos que sean de larga duración, como por ejemplo navegadores web o procesos core del sistema operativo.
route <Stdapi Network commands>
Funciona de un modo muy similar al conocido comando route en sistemas windows/linux, permite gestionar las tablas de enrutamiento del sistema comprometido.
cd, rm, rmdir, pwd, ls, upload, download, cat edit, del, mkdir <File System Commands>
Se trata de los comandos básicos para consulta y manipulación de ficheros, su uso es equivalente a los comandos del mismo nombre disponibles en sistemas basados en UNIX, sin embargo estos comandos se ejecutan en el sistema comprometido por medio del interprete de meterpreter
cd: Permite navegar a través de la estructura de directorios, rm y del eliminar un fichero especificado, pwd, conocer el directorio actual en donde se encuentra posicionado meterpreter,upload para subir un fichero a la maquina remota, download, descargar un fichero desde la maquina remota, mkdir crear un directorio nuevo, cat Permite visualizar un fichero remoto, mientras que edit, permite editarlo.
Como se puede apreciar, se trata de comandos de fácil uso y bastante similares a los comandos clásicos en cualquier sistema Unix.
Idletime <Stdapi User Interface Commands>
channel <core>, execute <Stdapi System Commands>, interact<core> read<core>, write<core>, close<core>
El comando idletime permite determinar cuánto tiempo ha estado el sistema comprometido sin actividad. Por otro lado, para ejecutar múltiples procesos en la maquina remota y posteriormente declararlos como canales que pueden ser manejados por meterpreter se utiliza el comando channel.
Como se ha podido apreciar, se han creado diferentes canales con un proceso asociado y posteriormente es posible consultarlos con el comando channel. Si se desea interactuar con alguno de esto canales, se utiliza el comando «write». Finalmente con el comando close, se cierra algún canal que se encuentre abierto
getdesktop
enumdesktops
setdesktop <Stdapi User Interface Commands>
Estos comandos permiten obtener el desktop del usuario actual, establecerlo y enumerar las diferentes interfaces habilitadas en la maquina objetivo, cada uno de los desktop están asociados a una sesión, una estación y un nombre de Desktop, este nombre identifica la interfaz que se enseña al usuario, por ejemplo hay una para el inicio de sesión, otra para el escritorio y otra para logoff.
Para saber en que desktop se encuentra asociada la sesión meterpreter basta con invocar el método getdesktop:
Cada uno de los desktop tiene sus propios procesos en ejecución y ademas de esto, tienen su propio buffer de teclado y dispositivos de entrada, por lo tanto cuando se realiza la captura de teclas del objetivo (keyscan), es necesario conocer el desktop actual de ejecución y también es necesario que el proceso del cual depende meterpreter se encuentre en ejecución para dicho desktop, por esta razón es posible que el mismo escaneo de teclas (utilizando keyscan_*) no funcione de la misma forma para el desktop de inicio de sesión que para el escritorio de un usuario logueado.
TIP: Una vez explicado lo anterior, una practica frecuente que utiliza un atacante cuando logra comprometer un sistema, es establecer después de un periodo corto de tiempo, el desktop asociado con el login de usuario y posteriormente iniciar el escaneo de teclas para dicho desktop, de esta forma es muy fácil capturar las credenciales del usuario que se esta logueando en el sistema.
el comando uictl permite habilitar/deshabilitar el ratón y el teclado de la maquina destino, de esta forma, se puede controlar las acciones que el usuario realiza.
El comando hashdump permite obtener los usuarios y los hashes NTLM de la maquina remota en formato, de esta forma se puede crackear la clave de un usuario determinado usando herramientas como john the ripper, hashcat o tablas rainbow online como por ejemplo las disponibles en crackstation.net
Por otro lado con timestomp se pueden modificar los atributos relacionados con las fechas de creación, modificación y último acceso de un fichero en la maquina remota.
Estos han sido los comandos básicos en una consola meterpreter, se trata de opciones muy sencillas pero a su vez bastante robustas que permiten realizar un proceso de comunicación muy completo entre un objetivo y su atacante.
Para usar la Stack y enviar argumentos a una función, es necesario conocer el funcionamiento de los registers ESP y EBP que se encargan de apuntar a la posición actual de la Stack y apuntar a los datos almacenados respectivamente.
Como se ha indicado anteriormente, la Stack en un segmento de ejecución que contiene valores de memoria Alta y Baja que se van apilando en base a una pila FIFO, cuando se almacenan valores en dicha pila, necesariamente el valor de memoria del register ESP se actualiza para apuntar a la nueva posición del ultimo elemento almacenado en la pila, de esta forma se mantiene la consistencia de la misma y se puede invocar a operaciones PUSH y POP sobre la pila de forma segura, es decir, sin tener la preocupación de que se vayan a recuperar o almacenar valores en posiciones de memoria inconsistentes.
En Assembly es posible utilizar funciones del mismo modo que se utilizan en cualquier lenguaje estructurado como C/C++ o Pascal, su funcionamiento es simple, solamente basta con definir el nombre de la función y posteriormente invocarla con la instrucción call. En este sentido es bastante similar al concepto de segmento de ejecución, sin embargo, tiene la diferencia de que se ejecuta de forma independiente del flujo principal del programa (a diferencia de un segmento de ejecución que se define en algún punto del flujo principal) por esta razón, el uso de funciones resulta conveniente para separar instrucciones del flujo de ejecución e invocarlas solamente cuando resulte conveniente.
Existen una serie de instrucciones que consisten en la ejecución de una determinada rutina dependiendo de que se cumplan ciertas condiciones para su ejecución. En Assembly, algunas de estas instrucciones están relacionadas con las Flags contenidas en el register EFLAGS, de este modo cada una de estas instrucciones verifican si dicho register tiene establecida una determinada bandera y en función de dicha verificación, ejecutar o no una rutina de código, lo que en lenguajes como Pascal, C/C++ o Java se conoce como una instrucción IF, pero aquí es un poco mas compleja.
Las instrucciones de flujo condicional basadas en las banderas del register EFLAGS son:
Las instrucciones que se encuentran en esta categoría corresponden a aquellas que no se encuentran limitadas por instrucciones condicionales para que se su ejecución se lleve a cabo.
El siguiente es el programa de ejemplo que se usará para la demostración de los tópicos relacionados con el flujo incondicional de un programa en assembly, que como en casos anteriores se depurará paso a paso para su correcto entendimiento.
Para manipular Strings en assembly, el programador dispone de los comandos MOV(X) para desplazar segmentos de memoria y valores en direcciones de memoria, sin embargo, para manipulación de Strings se cuenta con comandos MOVS(x) adicionales diseñados específicamente para el tratamiento de cadenas en Assembly, estos comandos adiciones son:
MOVSB: Mueve un byte (8 bits)
MOVSW: Mueve una palabra (16 bits)
MOVSL: Mueve una palabra doble (32 bits)
Para ofrecer las mejores experiencias, utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. El consentimiento de estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional
Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos.El almacenamiento o acceso técnico que se utiliza exclusivamente con fines estadísticos anónimos. Sin un requerimiento, el cumplimiento voluntario por parte de tu Proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarte.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en una web o en varias web con fines de marketing similares.