Categorías
Hacking Web Applications

Funcionamiento de W3AF Introducción al Framework -Parte II

En la entrada anterior sobre W3AF, se han mencionado conceptos básicos de funcionamiento y configuración, en esta entrada, intentaré explicar como funcionan los plugins, exploits y perfiles en W3AF.

PLUGINS W3AF

Los plugins en W3AF son la base del framework, ya que separa de forma lógica las 3 categorías de acciones llevadas a cabo, que son Descubrimiento, Auditoria y Explotación o Ataque, cada uno de los plugins disponibles en W3AF corresponden a una de las 3 categorías anteriormente mencionadas, y cada uno de estos a su vez, tienen subplugins que pueden ser activados o desactivados dependiendo de las necesidades de la ejecución del escaneo/ataque. En este punto, los plugins que se encuentran en la jerarquía mas alta en W3AF se pueden listar de la siguiente forma:

Categorías
Hacking Web Applications

Funcionamiento de W3AF Introducción al Framework – Parte I

Como ya se ha indicado en el post anterior sobre la instalación de W3AF, este tiene ciertos requerimientos que deben ser cumplidos antes de poder utilizar este framework, sin embargo una vez se configura el entorno, utilizar esta herramienta es muy provechoso para realizar diferentes tipos de tareas relacionadas con penetración en aplicaciones web.

Para entender el funcionamiento de W3AF es necesario en primer lugar, entender como se encuentra subdividido en 3 tipos de Plugins que son: Discovery (Descubrimiento), Audit (Auditoria) y Attack (Ataque) los 3 interactuan con el fin de detectar vulnerabilidades sobre un objetivo dado y finalmente atacar dicha vulnerabilidad con el fin de inyectar un payload u obtener acceso no autorizado a los recursos del objetivo

Categorías
Hacking Web Applications

Conceptos Básicos sobre W3AF – Web Application Attack and Audit Framework

CONCEPTOS BASICOS – W3AF PENTESTING EN APLICACIONES WEB.

Se trata de un framework que permite realizar diferentes tipos de pruebas contra aplicaciones web para determinar que vulnerabilidades puede tener dicha aplicación detallando niveles de criticidad en función al impacto que puedan llegar a tener estas sobre la infraestructura web o sobre sus clientes, en algunos casos se ha dicho que este framework es “El metasploit para aplicaciones web” dado que se trata de un framework bastante completo y con unas capacidades que difícilmente se encuentran en otras herramientas de la misma índole (open source o comerciales).

Por otro lado, se trata de un framework libre, licenciado bajo la GNU/GPLv2 lo que quiere decir que su código se encuentra disponible al publico, ademas de que se puede usar, modificar y redistribuir si es lo que le interesa al usuario.

A continuación se indica como es el proceso de instalación:

Categorías
Hacking MetaSploit Web Applications

Utilizando XSSF en MetaSploit Framework – Explotando XSS

Xssf Framework permite administrar victimas de ataques XSS genéricos y persiste una conexión con dichas victimas por medio de un “loop” en javascript, el cual se encarga de enviar peticiones reversas en intervalos definidos de tiempo con el fin de ejecutar exploits contra la victima.

Para usar xssf en metasploit es necesario localizar una aplicación vulnerable a ataques XSS, para probar y mejorar habilidades en el campo de la seguridad en aplicaciones web, existe un proyecto llamado DVWA (Damn Vulnerable Web Application), se trata de una aplicación escrita en PHP y MySQL que tiene habilitadas una serie de vulnerabilidades que permite a un profesional en seguridad, interactuar con la aplicación y comprender mejor los posibles ataques que pueden llevarse a cabo en aplicaciones web.

Categorías
Hacking MetaSploit Web Applications

Utilizando Plugin WMAP de MetaSploit Framework – Escaneando Aplicaciones Web.

Wmap es un framework para ejecutar escaneos contra aplicaciones Web, diseñado para ser utilizado como un plugin de MetaSploit Framework, cuenta con una arquitectura simple y no obstante sumamente potente en comparación con otras alternativas open source o comerciales que se encuentran actualmente en el mercado, la simplicidad de este plugin radica en que no depende de ningún navegador web o motor de búsqueda para capturar datos y manipularlos.

Esta herramienta es principalmente utilizada con fines de recolección de información, su funcionamiento consiste en la captura y almacenamiento de trafico por medio del uso de módulos Wmap y escaners Wmap que sirven de apoyo a un ataque sobre un sitio web o un proxy, la información recolectada es posteriormente utilizada con el fin de lanzar diferentes pruebas implementadas como módulos, dado que se trata de módulos MetaSploit, estos pueden ser fácilmente implementados y ejecutados de forma manual o de forma automática por medio de Wmap

Categorías
Hacking Web Applications

Integrando Herramientas del Arsenal: Beef y MetaSploit Framework

Integrando Beef y MetaSploit Framework

Tal vez algunos que vengáis siguiendo este blog, ya conocéis las posibilidades que brinda MetaSploit para una fácil integración con otras herramientas relacionadas con pruebas de penetración, en este caso, Beef puede ser integrada y extendida con la potencia que lleva consigo MetaSploit Framework, partiendo de este punto, es posible ejecutar exploits y payloads contra victimas de ataques XSS administradas por Beef, la forma de integrar Beef y MetaSploit es muy sencilla y se basa en el uso del plugin xmlrpc de MetaSploit Framework, ya que permite crear un servicio que se encontrará en estado de “escucha” esperando a que nuevos clientes intenten conectarse a él (de una forma muy similar a como se hace con Nikto). Los pasos a seguir son los siguientes:

Categorías
Hacking Web Applications

Automatizando Ataques XSS utilizando BEEF

BEEF

Beef es una herramienta bastante útil y completa para automatizar ataques XSS contra clientes de aplicaciones web vulnerables, consiste en el uso de vectores de ataque XSS clásicos de forma automatizada, donde Beef, controla a todas las víctimas de este tipo de ataques y permite ejecutar diferentes tipos de payloads contra el objetivo, ademas de capturar información sobre la víctima, tales como sistema operativo utilizado, navegador, dirección IP, cookies, entre otra información valiosa.

Unas de las potencialidades que tiene esta herramienta es que se instala muy fácilmente ademas de que se integra con una serie de exploits manejados directamente por MetaSploit con el fin de conseguir penetrar en la maquina del objetivo, aunque este mecanismo de instalación es el mas sencillo, también se encuentra obsoleto, actualmente esta herramienta se encuentra en constante desarrollo y se ha migrado completamente a Ruby, a continuación se indica como instalar Beef de ambas formas.

Categorías
Hacking Web Applications

Explotando vulnerabilidades XSS en aplicaciones Web

Una vez comprendidos los conceptos indicados en la entrada anterior (ver aquí) se procede a indicar casos prácticos de como un ataque XSS puede ser llevado a cabo sobre una aplicación web vulnerable. Para realizar algunas pruebas sobre XSS, es necesario en primer lugar tener una aplicación web vulnerable, para esto es necesario seguir la entrada anterior correspondiente a entornos de pruebas en (ver aquí)

Categorías
Hacking Web Applications

Conceptos Básicos sobre Vulnerabilidades XSS en Aplicaciones Web

CONCEPTOS BÁSICOS VULNERABILIDADES XSS EN APLICACIONES WEB

Se trata de una de las vulnerabilidades más comunes en aplicaciones web, también unas de las mas antiguas, sin embargo este tipo de ataques frecuentemente son los mas exitosos y con mayor nivel de evolución dado que con bastante continuidad surgen técnicas cada vez mas elaboradas para conseguir alguna forma de XSS sobre una aplicación Web.

Los ataques XSS se diferencian en varias categorías, cada una con sus propias características, no obstante conocerlas todas amplia el espectro de ataque ya que algunas aplicaciones web, son más vulnerables a unas que a otras. Las categorías de dichas vulnerabilidades son las siguientes.

Categorías
Cracking

Uso práctico de John The Ripper

ACTUALIZADO A DÍA 01/02/2021

USANDO JOHN THE RIPPER PARA ROMPER HASHES

En la primera parte, se ha explicado el funcionamiento de John para la obtención de claves por medio de diferentes técnicas de crackeo, lo que en John se conoce como «Modos». Posteriormente se ha explicado cada uno de ellos y sus características, también se ha descrito el uso del fichero de configuración que utiliza John para establecer opciones globales, finalmente se ha indicado como un programador puede utilizar sus conocimientos en C para escribir funciones que utilizara John en el proceso de creackeo (ver entrada anterior aquí)

Ahora, se dedicaran unas cuantas líneas a ver cómo los conocimientos adquiridos en la etapa teórica anteriormente mencionada son aplicables al comando john, por este motivo existen diferentes opciones con sus respectivos parámetros que John utiliza cuando es invocado, las opciones por línea de comandos que John soporta se detallaran a continuación y como ya se ha dicho, los conceptos teóricos tomaran sentido práctico en esta sección.

Opciones de linea de comandos John

–single «single crack» mode

Indica que John utilizará el modo de crackeo Single explicado anteriormente usando las reglas definidas en el fichero de configuración de John correspondientes a la sección [List:Rules:Single]

–wordlist=FILE –stdin wordlist mode, read words from FILE or stdin

Ambas opciones indican que John utilizará el modo de crackeo Diccionario explicado anteriormente.

–rules enable word mangling rules for wordlist mode

Con esta opción se habilitan las reglas para el modo Diccionario ubicadas en el fichero de configuración de John en la sección [List:Rules:Worldlist]

–incremental[=MODE] «incremental» mode [using section MODE]

Indica a John que se debe utilizar el modo incremental para el proceso de crackeo, la opción MODE indica que se debe tomar la definición declarada en el fichero de configuración de John, tal como se ha indicado anteriormente, se pueden declarar varias secciones de modos incrementales en dicho fichero de configuración con una etiqueta que identifica dicha sección, en esta opción, se indica dicha etiqueta para asumir los valores de configuración definidos en ella.

–external=MODE external mode or word filter

Indica a John que se debe utilizar el modo externo, donde MODE indica la etiqueta declarada en el fichero de configuración de John, de esta forma MODE tiene el mismo significado que el que tiene opción –incremental

–stdout[=LENGTH] just output candidate passwords [cut at LENGTH]

Indica a John que debe sacar en la salida estándar los password candidatos que se generan en lugar de intentar utilizarlos en el hash de passwords objetivo, junto con esta opción no se puede especificar la opción –wordlist y no se puede utilizar en conjunto con el modo de crackeo simple (Single). Si se especifica un valor para la longitud, John solamente producirá aquellos passwords que tengan dicha longitud.

–restore[=NAME] restore an interrupted session [called NAME]

Indica a John que debe restablecer una sesión anteriormente interrumpida, si no se especifica un nombre de sesión, John asumirá que la sesión esta en el fichero john.rec, si se establece el nombre de la sesión, debe ser NOMBRE_SESION.rec

–session=NAME give a new session the NAME

Indica a John que la sesión tendrá un nombre definido, solamente es valida cuando se trata de una nueva sesión y no se puede especificar cuando se restablece una sesión interrumpida, de esta forma, si esta sesión se interrumpe por algún motivo, John intentara crear un fichero con extensión .rec con el nombre de la sesión indicado.

–status[=NAME] print status of a session [called NAME]

Indica el estado de una sesión interrumpida o en ejecución para conocer su progreso.

–make-charset=FILE make a charset, FILE will be overwritten

Genera un fichero de juego de caracteres basado en las frecuencias definidas en el fichero john.pot.

–show show cracked passwords

Cuando se ha conseguido una password desde el hash objetivo se muestra por consola.

–test[=TIME] run tests and benchmarks for TIME seconds each

Indica a John que debe probar todos algoritmos de Hash compilados para verificar su correcto funcionamiento, en el caso de que solamente se desee probar algunos de algoritmos soportados se debe emplear la opción –format

–users=[-]LOGIN|UID[,..] [do not] load this (these) user(s) only

Permite seleccionar un listado de usuarios contenidos en el fichero de hash, de este modo no se intentara crackear todas las cuentas y contraseñas, sino que solamente se intentaran aquellas que se encuentren listadas en esta opción, pero obviamente, se debe conocer de antemano que una cuenta de usuario determinada existe en el fichero de hash que John intentará romper. Si se especifica el símbolo (-) se realizara la acción contraria, es decir, las cuentas de usuario listadas en esta opción se omitirán.

–groups=[-]GID[,..] load users [not] of this (these) group(s) only

Permite seleccionar un listado de grupos de usuarios contenidos en el fichero de hash, funciona de la misma forma que la opción –users con la diferencia que se definen grupos de usuarios en lugar de cuentas únicas de usuarios.

–shells=[-]SHELL[,..] load users with[out] this (these) shell(s) only

Esta opción es sumamente útil para cargar solamente aquellas cuentas de usuario que tienen un tipo de consola valida, o no cargar una serie de cuentas con un tipo de consola invalida para el atacante, en esta opción los argumentos pueden ser la ruta completa de la consola o simplemente el nombre de la consola, de este modo si se especifica –shells=sh existirá una coincidencia en la consola /bin/sh y /usr/bin/shell si se especifica la ruta completa, por ejemplo –shells=/bin/sh solamente existirá una única coincidencia. Como se ha dicho anteriormente se pueden indicar varias consolas, por ejemplo:
–shells=/bin/sh,csh,-/bin/ksh,bash

–salts=[-]COUNT load salts with[out] at least COUNT passwords only

Permite especificar los saltos que tendrá John en el proceso de crackeo, lo que en algunos casos llevará a un mejor desempeño de la ejecución del programa.

–format=NAME force hash type NAME: DES/BSDI/MD5/BF/AFS/LM/crypt

Permite definir el tipo de hash que utilizara John para romper un hash determinado, esta opción sobreescribe la característica que tiene John por defecto de auto detectar el tipo de hash utilizado en un determinado objetivo. John en ningún caso puede utilizar mas de un hash en una única ejecución, por este motivo, si un sistema tiene mas de un mecanismo de hash determinado es necesario ejecutarse una vez por cada uno de los mecanismos definidos.

–save-memory=LEVEL enable memory saving, at LEVEL 1..3

Esta opción permite que John no utilice mucha memoria y no afecte demasiado a otros procesos que se encuentren en ejecución en el sistema. Existen 3 niveles diferentes para determinar el uso de memoria de John, en el nivel 1 se le indica que no invierta memoria en nombres de login, solamente soportada cuando el modo de crackeo es simple (“Single”), el único impacto que tendrá esta opción es que no se podrán ver los nombres de login mientras se ejecuta el proceso de crackeo, los niveles 2 y 3 son niveles altos y probablemente no deberían ser empleados a menos que el uso de memoria de la maquina sea critico y john no funcione de forma adecuada en dichas condiciones.

Utilidades Adicionales incluidas en John

El paquete completo de John incluye algunas utilidades adicionales que apoyan las actividades de crackeo llevadas a cabo por John, estas utilidades son independientes al comando John y son las siguientes:

UNSHADOW

Esta utilidad combina el fichero de passwords de usuarios y el fichero de shadow típico en sistemas basados en GNU/Linux, para que posteriormente la salida de este comando pueda ser utilizada por John, su sintaxis es muy simple:

unshadow PASS-FILE SHADOW-FILE

UNAFS

Extrae los hashes de una base de datos binaria AFS y produce una salida útil para John, la salida debe de ser enviada a un fichero

unafs DATABASE-FILE NOMBRE-CELL

UNIQUE

Elimina palabras duplicadas de un diccionario sin cambiar el orden de las entradas

unique FICHERO_SALIDA

Ejemplos Prácticos usando John

Uso básico

En primer lugar, para utilizar John como crackeador de sistemas de archivos, es posible utilizar la utilidad unshadow mencionada anteriormente, en un sistema GNU/Linux encontraremos los ficheros /etc/passwd y /etc/shadow, con estos dos ficheros se puede extraer la información correspondiente a los hashes de las cuentas del sistema operativo y posteriormente utilizar John con la información que nos facilite el comando unshadow.

Con el comando anterior los hashes se almacenaran en un fichero llamado /tmp/hashes que después puede ser utilizado por John. Por otro lado, si se intenta crackear passwords en Kerberos o una base de datos binaria se debe utilizar la utilidad unafs.

Tomando como base el fichero generado por comando anterior, John puede intentar crackearlo. la forma mas simple sería la siguiente con:

Con este comando, John intentara ejecutarse en primera instancia en modo Single, posteriormente en modo diccionario y finalmente en modo incremental. Por defecto, el fichero de configuración de John tiene definido un fichero de contraseñas que se utilizará en modo diccionario, se trata de uno pequeño, por lo tanto se aconseja utilizar uno mas extenso que permita aumentar las probabilidades de éxito.

Con la opción –show se enseñan en pantalla los passwords crackeados del fichero de hashes, esta información es almacenada automáticamente por john en el fichero john.pot, donde se encuentran los hashes crackeados, por esta razón, si se vuelve a ejecutar el comando anterior, con la opción –show la salida sera la siguiente:

Por otro lado también se puede declarar la opción –shells con el fin de cargar solamente aquellos hashes que tengan una consola (o que no tengan con el símbolo “-”)

./john –shells=-/bin/bash 
./john –shells=/etc/bin
./john –shells=/etc/bin,ksh,-/bin/sh

En el primer comando se han excluido aquellas cuentas que no tengan la consola /etc/bin, existen dos coincidencias, dado que las dos cuentas validas que existen en el fichero de hashes cuentan con la consola /bin/bash por lo tanto para el primer comando se cargan ambos hashes, mientras que en el segundo solamente se intentan incluir las cuentas que tenga una consola en /etc/bin dado que no hay ninguna que cumpla con dicho filtro, no se carga ningún hash, en el tercer comando, se incluyen cuentas que tengan la consola /etc/bin, la consola ksh (que se puede localizar en cualquier ruta) y se excluye la consola /bin/sh, no se cargan hashes dado que no hay cuentas que cumplan con dicho filtro.

Por otra parte, los siguientes comandos intentan determinar si el fichero de hashes se encuentra la cuenta del usuario root con UID = 0 o con username=root y también se realiza un chequeo si existen grupos privilegiados.

El uso de las opciones –status, –session y –restore se encargan de definir y consultar el estado de las sesiones que se inician en John, el concepto de sesión, no es otro que el contexto de una ejecución del comando, es decir, cuando se ejecuta el comando John, automáticamente se crea una sesión que puede ser abortada, restablecida y consultada, para definir el nombre una sesión personalizada se puede utilizar la opción –session=Nombre_Session, si esta es abortada se puede restablecer con la opción –restore, si se desea consultar el estado de ejecución se utiliza –status

Se inicia la sesión «IncrementalSession» y posteriormente se aborta.Se inicia la sesión BackGround y se establece el proceso en background, posteriormente se consulta su progreso

./john –incremental=ascii –session=BackGround hash &
./john –status=BackGround guesses: 0 time: 0:00:00:01 c/s: 0.00

En el caso de que no se haya establecido un nombre para la sesión por medio del uso de la opción –session para consultar el estado de la ejecución de la sesión ejecutada en Background no hace falta especificar ningún parámetro a la opción –status.

Para reestablecer la sesion BackGround anteriormente abortada:

./john –restore=BackGround
Loaded 2 password hashes with 2 different salts (generic crypt(3) [?/64])

El mecanismo que utiliza John para almacenar las sesiones que se inician en cada ejecución, consiste simplemente en la creación de un fichero cuyo nombre sera el que se ha especificado en la opción –session y la extensión será .rec, en el caso de que no se indique un nombre de sesión, el nombre del fichero sera john.rec. Por otro lado, además del fichero .rec también se genera otro fichero con extensión .log y con el nombre de la sesión (john.log si no se ha establecido un nombre a la sesión) de esta forma es posible ver las operaciones que se han llevado a cabo por John, lo que en algunos casos puede resultar muy útil.

Especificando modos de ejecución

Por medio de opciones por línea de comandos es posible indicar a la ejecución de John qué modos interesa que ejecute, de este modo se elimina la ejecución por defecto que indica que la precedencia es: Single, Wordlist e Incremental.

Para indicar a john que utilice el modo Single se especifica la opción –single o -si (forma abreviada)

john –single hashes
./john –si hash hashes

Con la ejecución anterior John intentará solamente ejecutar el modo Single, que como ya se ha indicado, no utiliza ningún diccionario, sino que se basa simplemente en la información contenida en los hashes empleados.

Para habilitar el modo Wordlist, es necesario indicar la opción –wordlist especificando como parámetro el diccionario, por otro lado también se aconseja habilitar las reglas para manejo de palabras.

Como en el caso del modo Simple, también se pueden emplear las opciones abreviadas:

./john –w=password.lst –ru hashes

Por otro lado, también es aconsejable enviar un diccionario sin palabras repetidas, por este motivo es recomendable utilizar la utilidad unique que permite filtrar un diccionario de palabras y eliminar las repetidas, un ejemplo de su uso podría ser:

Con el comando anterior, se generar un nuevo diccionario de palabras con solamente aquellas palabras que no se encuentran duplicadas en el diccionario. Sin embargo, con el uso de la opción –stdout se generará un diccionario un poco mas compacto y preciso. Suponiendo que se sabe que una o varias contraseñas utilizan un numero fijo de caracteres, se puede indicar que las palabras del nuevo diccionario solamente tengan una longitud máxima de X caracteres:

john –wordlist=dictionary .lst –rules –stdout=5 | ./unique uniques.lst

En el ejemplo anterior, en el diccionario de palabras, cada entrada contendrá una longitud máxima de 5 caracteres

También se puede utilizar el modo incremental especificando la opción –incremental o -i que es la forma abreviada de la opción, simplemente especificando esta opción causará que John utilice las opciones incrementales por defecto definidas en el fichero de configuración de John, en concreto en la sección [Incremental:All]. Dado que para definir el modo incremental se pueden establecer secciones personalizadas, la opción –incremental también recibe como parámetro el nombre de dicha sección.

john -i hashes
john –incremental hashes
john –i=Alpha hashes
john –incremental=Alpha hashes

Finalmente, solo resta indicar el modo external, que se especifica con el uso de la opción –external cuyo parámetro es la sección donde se encuentra definida la función programada, por ejemplo en el fichero de configuración por defecto de John, se definen algunas rutinas predefinidas para cada uno de los métodos aceptados por John:

./john –external=LanMan hashes

De esta forma se tomaran las funciones definidas en la sección [List.External:LanMan]

Charsets

Una vez se ha conseguido una o varias contraseñas, estas son almacenadas en el fichero john.pot, almacenando de esta forma los juegos de caracteres que las contraseñas contienen, algunas veces, algunas contraseñas consisten de caracteres especiales o palabras en diferentes lenguajes que no se incluyen en los charsets por defecto que vienen incluidos en John, por esta razon existe la opcion –make-charset que permite añadir o crear un nuevo charset en base a los caracteres almacenados en el fichero john.pot, esto es útil para posteriores ejecuciones de John utilizando el modo incremental.
Creando un nuevo juego de caracteres en función de contraseñas almacenadas en el fichero john.pot

 

John The Ripper o JTR, es una herramienta de conocimiento y uso casi obligatorio por parte de cualquier persona que se dedique al pentesting, por ese motivo este post ha sido lo más detallado posible con el objetivo de aportar una referencia en castellano que sirva como guia para aprender a usarlo. Se invita al lector que explore por su cuenta las diferentes opciones que contiene esta genial herramienta.

Un saludo y Happy Hack!
Adastra.