jueves, 22 de diciembre de 2016

¡¡Da igual que te escondas!!

Hace tiempo analizando un archivo con extensión con ".js", se encontró que aunque la forma de actuar del archivo era la típica de un lanzador (lanzamiento de un script en powershell que se intenta conectar con algún recurso en Internet), no se descubría la URL completa  porque la resolución DNS no se producía por la inexistencia del dominio dentro de los servidores DNS.

Añadir que además, el código del propio archivo ".js" daba un grado de codificación impropio de un archivo de esa extensión, por lo que se impedía de un manera rápida obtener la URL completa.

Código del archivo con extensión ".js"

Código ejecutado tras lanzar el archivo con extensión ".js"

Por lo anterior, se procedió a extraer la línea de comando anterior para analizar su contenido.


Contenido de la línea extraída anteriormente

Tras realizar al análisis del código se pudo ver dos secciones distintas:

1.- Definición de variables.
2.- Expresión que es invocada y que está formada por la un conjunto de las variables anteriormente definidas


Secciones anteriormente comentadas

Para saber el código que se esconde tras la expresión, se procedió a desarrollar un código HTML que ejecutase código javascript y que mostrara la expresión buscada, por pantalla.

Primeras líneas de código HTML desarrollado
Últimas líneas de código HTML desarrollado

El resultado de tal código fue.


 ¡¡¡Eureka!!!


Lo que hagas con la información es cosa tuya, no mía ... pero ten conciencia.

lunes, 19 de diciembre de 2016

Me sigue faltando espacio de almacenamiento para mi diccionario.

Hace tiempo, realizado una auditoria web se encontraron pistas sobre la política manejada para usuarios y contraseñas.

Más concretamente:

1.- El usuario debía de tener hasta 8 caracteres.

Definición del campo Usuario.

2.- La contraseña debía de tener hasta 8 caracteres.

Definición del campo Password.

Revisando aún más en profundidad, se encontró código para comprobar la validación de los anteriores campos. Más concretamente:

1.- El usuario debe contener entre 3 y 8 caracteres, que además debe manejar un juego de caracteres que admite números, letras mayúsculas y el carácter "_"

Llamada a una función que debe chequear la longitud del usuario introducido

Llamada a una función que debe chequear los caracteres del usuario introducido
.
Diccionario utilizado para los caracteres del usuario introducido

2.- La contraseña debe contener entre 1 y 8 caracteres, que debe manejar un juego de caracteres que admite números, letras mayúsculas y minúsculas.

Llamada a una función que debe chequear los caracteres de la contraseña  introducida

Diccionario utilizado para los caracteres de la contraseña  introducida

En vista de estos datos, lo más seguro es que pensemos en elaborar un diccionario para realizar un ataque con el objetivo de averiguar usuarios/contraseñas. Pero, si hacemos eso, obtendremos un "pequeño problema" ...

El problema es que el diccionario -archivo que contiene todos los posibles patrones en función de la política de usuario/contraseñas encontrados-  es terriblemente grande como para tenerlo almacenarlo en una máquina.

Veamos la generación de los dos diccionarios que necesitaríamos en el anterior caso mediante la herramienta: Crunch.

1.- Para ello comprobamos y/o creamos los juegos de caracteres con los que vamos a crear los diccionarios que necesitamos. Para ello revisamos el archivo que "Crunch" posee para la definición de los susodichos juegos de caracteres y crearemos los juegos de caracteres que necesitamos.

Conjuntos de caracteres almacenados en la ubicación: /usr/share/crunch

Creación del conjunto de caracteres almacenados para generar el diccionario de los posibles usuarios y contraseñas.

Conjunto de caracteres cargados en el archivo de caracteres manejados por Crunch

NOTA: La creación de juegos de caracteres en el archivo que trae por defecto "crunch" implica trabajar con un usuario con permisos de administración. Añadir que los conjuntos de caracteres, si van a ser definidos con un nombre compuesto, NO pueden ir separados por el espacio en blanco.

2.- Creamos los diccionarios en función de los juegos de caracteres creados y en función del conocimiento que tenemos de la política de usuarios y contraseñas encontrados.

Espacio necesario para almacenar el diccionario para el campo "Usuario"

Espacio necesario para almacenar el diccionario para el campo "Contraseña"

¡Qué suerte el que tenga tal tamaño de almacenamiento!

Para el resto, tendremos que concretar la política de generación del diccionario a utilizar mediante el uso de un patrón para asíi obtener un diccionario que necesite menos espacio de disco, o utilizar cualquier otra herramienta que permitan lanzar ataques de diccionario previa definición de la política del diccionario a utilizar (número de caracteres, juego de caracteres, patrón, etc.)


Lo que hagas con la información es cosa tuya, no mía ... pero ten conciencia.

jueves, 1 de diciembre de 2016

Script: CazandoSMB.sh

Hace tiempo desarrolle un pequeño script en bash para obtener información vía protocolo SMB, además de parsear la información relativa a recursos compartidos y comprobar si tenemos lo que hay para acceder para acceder a los mismos sin necesidad de credenciales.

El script se basa en:

1.- Nmap
2.- SmbClient

Entre otras cosas el script obtiene información sobre:

1.- Sistema Operativo
2.- Recursos compartidos
3.- Usuarios
4.- Procesos
5.- Dominios
6.- Grupos
7.- Sesiones

De la información obtenida, y mediante el script: "Parsea-SMB.sh", se parsea/trata la información relativa al Sistema Operativo y a los recursos compartidos. Además de intentar acceder remotamente a los recursos compartidos para los que el "nmap" determina que tenemos permiso de R (read) y/o R/W (read/write) , mediante el uso del programa: "smbclient".

Información obtenida:

1.- Información aportada por el Nmap en formato "xml" y que poseen el formato: <IP>-SMB.xml.

2.- Informe parseado con toda la información obtenida respecto al sistema operativo y los recursos compartidos por cada dirección IP encontrada con los puertos vinculados al protocolo SMB abiertos. El archivo posee el nombre: InformacionSMB.info.

3.- Informe parseado con toda la información obtenida respecto al sistema operativo y los recursos compartidos sobre los que se tiene permisos de R y R/W por cada IP encontrada con los puertos vinculados al protocolo SMB. El archivo posee el nombre: InformacionSMB-DeInteres.info.

4.- Informe parseado con toda la información obtenida respecto al sistema operativo y los recursos compartidos sobre los que se tiene permisos de R y R/W, y que además se ha podido acceder remotamente, por cada IP encontrada con los puertos vinculados al protocolo SMB. El archivo posee el nombre: InformacionSMB-Accedidos.info.

Código del script: CazandoSMB.sh
 
   
 
Código del script: Parsea-SMB.sh

Lo que hagas con la información es cosa tuya, no mía ... pero ten conciencia.