Equilibrio Inestable

2010/07/13

XCampo y Hackbar, volviendo a programar

Filed under: Firefox, PHP, Security, XSS — Pedro Laguna @ 12:46 PM

Buenas tardes!!! Vamos a contar por aqui para que quede constancia, algunas cosas que he hecho y que puede que alguien llegue a interesarle :)

Para empezar contar un proyecto que se me ocurrio en el avion de vuelta de la RootedCon. Venia dandole vueltas a un articulo que habia leido sobre como lograr que la gente viese el XSS como algo peligroso y no solamente como algo para mostrar un alert() en las capturas de los informes. Como era una idea que llevaba tiempo barruntandome decidi que ya era hora de hacer algo. Y ese algo es XCampo (leido Cruzcampo ;) )

Basicamente es un generador de payloads XSS para incluir en demos, informes o charlas. Ni que negar tiene que tambien se podrian usar en algun ataque real, pero no es la idea principal. Como los ataques XSS nunca son iguales (unas veces te filtran una serie de caracteres, otras tienes que “escapar” de una zona de codigo HTML que te molesta para incluir tu codigo, etc.) me he limitado a generar el Javascript mas parco y generalista que he podido/sabido y que luego habra que adaptar a las necesidades de la vulnerabilidad. Por ahora genera los siguientes ataques:

  • Fake login: Genera un div sobre el resto de la pagina con un campo de login falso. Los datos se envian al sitio web que nosotros queramos y ya ahi somos responsables de hacer lo que queramos con el usuario.
  • hax0r defacement: Intenta poner un div sobre toda la pagina, incluir un texto e incluso reproducir una cancion. Este modulo tengo que mejorarlo, pero creo que es el que menos usara la gente………… o no ;)
  • Form redirection: Muy util en ataques XSS que se encuentran en las paginas de login. Cambia el evento action de todos los forms a la direccion que le digamos. Ademas elimina cualquier tipo de Javascript de validacion que existiera, por si acaso!
  • Password managers: La idea es, haciendo uso de Javascript, robar la informacion que los navegadores autocompletan cuando hemos guardado el usuario y contraseña en una pagina. Por ahora solo esta implementado el de Internet Explorer, pero el de Firefox no seria dificil de hacer.
  • Session cookies: Lo mas tipico! Podemos enviar las cookies de un navegador hacia el dominio que queramos. Ademas existen tres maneras de hacerlo:
    • iframe
    • img
    • pop-up

Ademas cada uno de estos payloads, cuando es posible, puede usar la funcion de eliminar las comillas, evitando los filtros que pudiera haber a costa de ampliar el tamaño del codigo generado.

Yo creo que es un buen proyecto para mejorar esas capturas de los informes y yo ya lo he usado en un par y debo decir que el resultado es mucho mas espectacular que una ventana de alerta. Podeis descargar XCampo desde Google Code o probarlo online en http://www.equilibrioinestable.com/xcampo/ (a veces no esta subida la ultima version).

Y como ya me habia puesto a programar (de nuevo) le propuse hace un par de semanas al creador de Hackbar, segun mi opinion, la mejor extension de Firefox, el ayudarlo a mejorar la herramienta, pues hacia tiempo que el proyecto andaba parado y yo tenia algunas ideas para añadirle. Y acepto encantado!

Por ahora hemos subido la nueva version con algunas nuevas mejoras a Google Code desde donde os podeis descargar esta nueva version de Hackbar y andamos pensando en como podriamos mejorarla y añadirle nuevas funcionalidades para seguir auditando sin salir del navegador y sin usar proxys externos. Ahora mismo, novedades sobre la version “oficial” teneis:

  • Reverse(): Manera rapida de darle la vuelta a una cadena. No sabeis las maneras de cifrar que uno se encuentra por ahi ;)
  • Buffer overflow: Permite generar cadenas de caracteres A extra largas para probar servidores contra errores 414 y aplicaciones que no controlen bien el largo de los parametros.
  • Oracle: Ya que ultimamente me he visto las caras con un par de Oracles me vi en la necesidad de incluir la funcion CHR() y la concatenacion mediante doble barra en HackBar.
  • Y como siempre algunos pequeños cambios internos para mejorar el codigo y el desarrollo futuro.

Estamos pensando en que cosas podemos añadirle y como mejorarla. Yo ya tengo pensado ampliar el numero de funciones en los menus de MSSQL y Oracle, añadir mas opciones en encoding y mejorar el sistema de tabs, que ahora mismo tiene algunos fallos (no se pueden reordenar las pestañas, por ejemplo)

Y…. creo que no me dejo nada! Si teneis alguna sugerencia/propuesta podeis dejarlas en los comentarios, por correo o mejor incluso, usando el sistema de reportes de fallos de ambos proyectos.

2010/05/13

Auditoria de paginas ASP.Net

Filed under: ASP.Net, Seguridad Informatica — Pedro Laguna @ 1:04 PM

Despues de unos cuantos años ya auditando paginas web he de decir que las paginas que siempre me dan mas dolores de cabezas (de primeras, luego hay algunas que…) son las paginas en ASP.Net. Cuando veo una tengo que respirar hondo, concienciarme y armarme de paciencia.

Por defecto ASP.Net tiene algunas caracteristicas de seguridad que haran nuestros primeros ataques infructuosos, empezando por el codigo HTML que genera. El primer paso de toda auditoria que hago es leer el codigo HTML e intentar pensar como el desarrollador ha generado aquello. Ni que decir tiene que comentarios e indentaciones ayudan a la imaginacion ;) Pero es que con ASP.Net se le quitan a uno las ganas… Nombres de variables como ctl00$divPrincipal$TextLabel1 y multitud de llamadas a WebResource.axd hacen que sea un poco mas coñazo analizarlas con un un proxy local.

Ademas esta el “problema” del VIEWSTATE y sus amigos EVENTTARGET, EVENTARGUMENT, etc. Cuando se ponen de acuerdo para salir a paseo por tu proxy puedes olvidarte de muchas cosas (CSRF) pero sobre todo de limpieza en las peticiones. Lidiar con un campo oculto que a veces me ha llegado a ocupar mas de 500 Kb en cada peticion (auditamos seguridad, no rendimiento, pero se les podrian decir un par de cosas…) es algo poco agradable, por no decir algo peor.

Luego claro esta olvidate de base de los ataques XSS. Si se te ocurre meter algo que parezca una etiqueta HTML la aplicacion lo va a parar. Aqui solo tienes dos esperanzas:

  • La aplicacion no tiene controlados los errores y muestra un bonito mensaje de debug con algo de informacion y una captura para añadir al informe.
  • Encuentras un texto que se incluye dentro de una etiqueta HTML por lo que no necesitas añadir los simbolos > y <

Pero aun con esas si la aplicacion usa autenticacion por formulario tenemos que todas las cookies van a estar marcadas como httpOnly por defecto, asi que nos olvidamos del robo de sesion :(

Y hablando de formularios! ASP.Net proporciona una serie de componentes para autenticacion, recuperacion de contraseña y registro donde, no hace falta decirlo, no hay manera de inyectar. No podeis dejar a los desarrolladores que se hagan sus propios formularios de login?

Para terminar con las cosas que Microsoft hace bien en ASP.Net es el tema de los privilegios y roles de usuarios. Si los programadores son cuidadosos (en las ultimas he encontrado un par de sitios donde no lo habian sido ;) ) y hacen uso de las funciones de ASP.Net, podemos estar seguros de que las fugas de informacion o escaladas de privilegios van a ser las minimas.

En fin, que estoy deseando que la proxima auditoria sea un PHP……….. se nota mucho? :P

2010/04/14

En la variedad esta el gusto…

Filed under: Personal — Pedro Laguna @ 10:03 AM

Como? Ahora en español de nuevo? Pues si, ya ves… Resulta que ahora estoy escribiendo en ingles en el blog de la empresa en la que trabajo ahora y claro, tengo morriña y añoranza y tengo ganas de escribir cosas con ñ :P

Intentare hacer versiones en español de lo que publique en ingles o, si veo que es muy largo o me va a llevar demasiado os lo pongo en ingles y os apañais :P . Eso si, estos posts van escritos desde teclado ingles, asi que no espereis muchas aperturas de signos de interrogacion, exclamacion, acentos y un numero reducido de ñs.

Ademas me he animado a crear una cuenta de delicious donde poner links que considere interesantes relacionados con la seguridad. No espereis actualizaciones diarias, solo posts y paginas que yo crea que en algun momento voy a necesitar porque comentan algun truco concreto sobre como saltar algun tipo de proteccion. Lo mismo de antes, igual os toca algo en ingles que algo en español.

Y para terminar y abrir boca, una captura de un ficherito XML que me encontre por ahi el otro dia enrredando con una aplicacion Silverlight, para que luego digan que las aplicaciones Flash son muy inseguras:

Quizas en el proximo post de mas detalles y si, la contraseña del FTP esta en texto claro ;)

2010/02/10

Reading Geek Night #4

Filed under: Firefox, Geek, Security — Tags: , — Pedro Laguna @ 9:31 AM

Yesterday I did a talk about how use Firefox as pentesting tool at the Reading Geek Night event. It was a short talk showing only a few extensions to test the web security without other tool rather than a browser.

I’m not going to post the slides because I really didn’t use them but I’m going to post the links to the extensions I used in my presentation:

Moreover I spend a good time listening other three interesting talks and chatting with the people after the show. Thank you :)

2009/12/08

The danger of default files

Filed under: Security — Pedro Laguna @ 11:04 AM

During my current research I have found some default files that some web frameworks includes into their installations that can compromise the security of a website. It also can allow an attacker to determine which framework a web page is using.

The first of these files is from the symfony framework. They offer to the developers a useful script called frontend_dev.php which show internal information about the current install and the server. As you can see in the following screenshot the information can be very useful…

symponydebug

It’s deactivated by default and can be activated changing the “lib\config\config\settings.yml” file:

# Logging and debugging settings

web_debug: false # Enable the web debug toolbar

By default the framework is configure not to show the toolbar, but a lot of web pages (indexed by Google) have activate it and allow to any user to read the private data of their websites.

googlesympony

Moreover another default files that I found researching into the default Zend Server installation are the alias /server-info and /server-status. These are part of the mod_info module and, hopefully, in Zend Server, are configured to be access only from localhost:

<Location /server-info>

SetHandler server-info

Order deny,allow

Deny from all

Allow from 127.0.0.1

</Location>

<Location /server-status>

SetHandler server-status

Order deny,allow

Deny from all

Allow from 127.0.0.1

</Location>

This is a secure default configuration that other domains using this Apache module should adopt for the security of their web pages. This is a problem discussed sometimes ago with the revelation of the /server-status file in twitter.com. It’s also known that other servers like Apache.org are offering his status and his info, but you can also found a lot of websites sharing their server-status and server-info pages.

I have found that these default files are not include in the wordlist of wfuzz or even Wikto. I don’t know why are they ignoring these files, but I’m going to add these to my default dictionaries files :)

Cheers!

2009/08/11

Shorty Authentication Bypass

Filed under: PHP, Security, cookies — Pedro Laguna @ 10:11 PM

Today, reading some stuff at internet I have found an article about 7 PHP scripts to generate shorts URLs. This kind of links are very common today with a lot of controversy about the security risk that they implied. I’m not here (now) to discuss about shorting URL’s services but to talk about a stupid bug that I have found in the first (!!!) software that WebResourcesDepot recommend today.

Shorty is a script very old… From 2006. Why are they recommending it in the first place? Second: Did they try to install it? A lot of errors appears when you try a fresh install and some pain until you can fix it. Buggy from the scratch.

I then decided to read some source code. I have found that in functions.php is some bug that we can use to bypass the login form. Let’s go to read some php code:

function authenticate(){
    $cookie = @$_COOKIE['snickerdoodle'];
    if($cookie == "polarbears"){
        //
    } else {
        exit("Not logged in.");
    }
}

function verify(){
    if(@$_COOKIE['snickerdoodle']){
        $cookie = $_COOKIE['snickerdoodle'];
    } else {
        $cookie = '';
    }
    if($cookie == "polarbears"){
        return 1;
    } else {
        return 0;
    }
}

As you can read this code generates a cookie with the name “snickerdoodle” and the value “polarbears” to determine if you are authenticated or not. Its very easy to create a new cookie into your browser with this data with some Firefox extension. If you are using a browser without extensions like Google Chrome you can try to write the next javascript sentence into your URL:

javascript:document.cookie=”snickerdoodle=polerbears”;

If you don’t want to install Shorty (and mess around with all the hacks you have to do use it) you can always use the search intitle:”Shorty (Beta)” to found some places to test it.

Have fun!

2009/04/08

WordPress.com permanent XSS vulnerability

Filed under: Seguridad Informatica, XSS — Pedro Laguna @ 9:54 AM

UPDATE: Drew Strojny, Vigilance theme creator ask me to hide the post until a he publish a fixed version. He did yesterday so I put this post online again.

Friday 3 I discovered XSS vulnerability into WordPress.com. A malicious attacker can insert Javascript into the “Alert Box” feature of theme Vigilance. It was a permanent XSS vulnerability that can be used to make a XSS worm around WordPress.com or to spam all blogs with some kind of Russian or Chinese malicious links.

I send an email to WordPress.com support Saturday 4 knowing they about the vulnerability. They (well, Anthony) reply me asking about what king of Javascript I was able to insert:

To: me@email.com
Subject: [WordPress #282419]: General – I discover that i can insert javascript without p
Date: Sat, 04 Apr 2009 11:49:32 +0000
From: “Anthony – WordPress.com” support@wordpress.com
Reply-To: support@wordpress.com
Content-Type: text/plain; charset=”UTF-8″
Content-Transfer-Encoding: 8bit

Hi,

What specific javascript code did you enter?

Best,

Anthony

Automattic | WordPress.com

I answered with more specific technical detail:

In-Reply-To: khkrik.hlo0f3@help.automattic.com
Date: Sat, 4 Apr 2009 13:52:13 +0200
Delivered-To: me@email.com
Subject: Re: [WordPress #282419]: General – I discover that i can insert javascript without pr
From: Pedro Laguna me@email.com
To: support@wordpress.com
Content-Type: multipart/mixed; boundary=0016e6ddfed2d012cc0466b94bfd
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit

I attach three pics. I try only some simple javascript, but I’m sure I’ll be able to put anything there.

Pedro Laguna

The three pictures I send are these ones that demonstrate that I can insert anything I want:

Vigilance Options Vigilance Options with some simple Javascript

Equilibrio Inestable with XSS!!

This blog was XSSed!!!

Page code

The Javascript code without being filtered

After this email I started to think about how an evil person could be do with this vulnerability. The first step is to determine how WordPress.com users can be affected. We have two kind of WordPress.com users:

  • Users with the Vigilance Theme activated
  • Users with other theme

The first target is easy. We can use AJAX to generate every HTTP connection we need so we can copy the XSS worm code into the Alert Box feature of blogs who have this theme activated:

POST /wp-admin/themes.php?page=functions.php HTTP/1.1
Host: <blogname>.wordpress.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 234
V_pages_to_exclude=&V_background_css=Disabled
&V_background_color=dcdfc2&V_border_color=d7dab9
&V_link_color=772124&V_hover_color=58181b
&V_alertbox_state=On&V_alertbox_title=Title
&V_alertbox_content=Message
&save=Save+changes&action=save

We will change the Message value to insert our Javascript code and change the state to On to display it in the front page.

The other group of users can host our evil XSS code too. They need first to activate the Vigilance theme. It can be easily done with the following HTTP request:

GET /wp-admin/themes.php?action=activate&template=pub%2Fvigilance&stylesheet=pub%2Fvigilance&_wpnonce=a4c05c7d1d HTTP/1.1

As you can see its a GET request that can be achieve with a simple CSRF request. Really? No! They are using a _wpnonce var to block this king of attacks. But it is not a problem when we are able to insert Javascript inside the domain because the cookie domain is defined as .wordpress.com. This means that we can generate an AJAX request to retrieve the wp-admin/themes.php page, extract the _wpnonce value and generate a valid theme changing request.

Ok, now we have the transmission part under control. But… how we start all this mess? We can create a blog, with some proxy, fake mails, public AP, etc but this is not part of this post. The real interesting thing is that we can use Google to find new victims to our XSS worm. In the front page of Vigilance active theme blogs we can see the text “Theme: Vigilance by Jestro”. This text and some Google skills allow us to determine that at least 500,000 blogs are using this theme:

Google search

Some spam to these blogs with the URL of our XSS worm blog and the party start! But we need people visit the infected blogs. In this part we need some social engineering skills and tricks. As we can interact with all the admin interface of logged users we can also post into his blogs. We can write a post about the new theme (to incite  people who reads blogs by RSS to go to the real blog)

As we can see the process to make a XSS worm is a bit complex and required some Javascript skills. In this case the anti-xss filter was not activated so we don’t need to worry about evasion techniques.

Finally, at Monday 6, WordPress.com (Nick) contact me to give me the thanks to advise they about the vulnerability and confirming me that the vulnerability has been patched.

To: me@email.com
Subject: [WordPress #282419]: General – I discover that i can insert javascript without pr
Date: Mon, 06 Apr 2009 14:46:21 +0000
Message-ID: <khop19.56t9h3@help.automattic.com>
From: “Nick – WordPress.com” support@wordpress.com
Reply-To: support@wordpress.com

Hi,
Thanks for letting us know about this! It’s been patched up now so the JS can’t be used.

Nick
Automattic | WordPress.com

Today I post it to public to warn people about the risk of XSS vulnerabilities and congratulate WordPress.com team for the quick response. Have a nice day!

2009/02/15

El dia de los enamorados

Filed under: Firefox — Tags: — Pedro Laguna @ 10:40 PM

Si, se que la pantomima de los enamorados fue ayer, pero ha sido hoy cuando he caido en las redes de Cupido (si, tambien se que Cupido lo que tiran son flechas, pero en un post sobre internet queda mejor decir redes :P )

Andaba desde hacia una semana mas o menos mi Firefox dando problemas, no se abria la mitad de las veces, el Javascript no me funcionaba bien, alguna extension desaparecio sin darme muchas explicaciones… y barajaba la posibilidad de reinstalarlo. Ya sabeis, algo que no llevaria mas de 3 minutos pero que alargas dias. Hoy sin embargo a la tercera vez que abria una pestaña nueva sin saber muy bien a donde navegar y que hacer, me anime a hacerlo. Despues de desinstalarlo ha habido momentos de panico en mi cabeza: “Bueno, ya esta desinstalado, voy a bajarmelo de nuev… ¡¿Pero como lo bajo ahora si no tengo navegador?!” Si, habia desinstalado antes de bajar, menos mal que me quedaban el Chrome y el Internet Explorer. Con esto de que tengo Chrome 2 Beta y Internet Explorer 8 Beta 2 pues he pensado que instalarme la beta de Firefox 3.1 seria lo logico, ¿no?

Confieso que apenas lo habre probado mas de dos horas, pero ya me esta dando muy buenas sensaciones, tiene dos o tres detalles que me han llamado la atencion y que me han hecho olvidar rapidamente los problemas que tuve durante la semana pasado con Firefox 3.0

Para empezar, lo primero que hice (palabrita del niño Jesus), fue comprobar el tema de los certificados extralargos que comente el otro dia. Y aqui esta la captura:

url

Luego otro detalle que me ha gustado mucho es el poder borrar el historial y los datos privados de navegacion en un rango de tiempo determinado, algo muy muy util ;)

historial

Y para terminar, la guinda, la caracteristica que me ha motivado a escribir este post, mi fantasia hecha feature… La navegacion entre paginas desde links en la vista del codigo fuente de las paginas!!!! Ahora el visor de codigo fuente muestra las referencias a ficheros (directos e indirectos) como enlaces sobre los que podemos navegar para ya ni siquiera tener que ver los colorines de la pagina. Ademas podemos pulsar la tecla de borrado para navegar hacia atras. Lo que ya no se puede es tener pestañas de codigo fuente, lo cual seria ya apoteosico. De todas maneras como es una beta esperemos que para la final lo incluyan y que mejoren la deteccion de enlaces en el codigo fuente, pues dentro de codigo Javascript y del CSS los enlaces no permiten ser clickeados.

codigoSe que habra mil cosas nuevas de las que seguro me enteraria si leyese el Changelog, pero… ¿Y lo divertido que es ir descubriendolas? Ademas, a mi las mejoras en la velocidad del motor de renderizado, la optimizacion del interprete Javascript y que pase con mas o menos nota el Acid Test me da bastante igual.

2009/02/14

ZoomIt 3.02

Filed under: General, Personal, Trucos — Tags: , , , — Pedro Laguna @ 12:20 PM

Seguramente este seria un post que yo no escribiria si no fuese una aplicacion que uso tan a menudo y con la que estoy tan contento. ZoomIt es para mi una aplicacion indispensable e irremplazable cuando de dar cursos y charlas se trata.

Sin embargo, desde que tengo Windows 7, me entere de los atajos de Windows + + y Windows + – y vi algo que llevaba tiempo soñando: ampliaciones de pantalla donde lo ampliado sigue siendo manipulable, editable, en definitiba “tocable”. Reconozco que por un momento pense abandonar mi ZoomIt. Sin embargo existia algo que me echaba para atras y era la necesidad de “precarga” del programa encargado del aumento, esos segundos de retraso me parecen eternos. Ademas nos deja sobre la pantalla un icono semitransparente de una lupa que no me gusta nada.

lupaPor estos motivos y por otros (el poder pintar sobre la pantalla y remarcar zonas importantes es vital para mi) segui usando ZoomIt para mis presentaciones. Pero es que ayer descubri con gran alegria y regocijo, que el “bestia” de Mark Russinovich (con cariño :P ) habia sacado una nueva “major version”, la 3 y en la que su novedad mas importante es la de poder hacer LiveZoom. Hay que reconocer que aun le quedan algunos aspectos que mejorar, como la duplicacion del cursor o la imposibilidad de pintar, pero para ser la primera version que lo incluye me parece muy bueno. Ademas asi mantengo el zoom original, el que me permite pintar y el zoom “live”, que me permite mostrar acciones en progreso mientras sigo contando el rollo que toque en ese momento.

Nota: Esta caracteristica solo funciona con Windows Vista o superior, pero…. ¿Acaso existe algo anterior? :P

2009/02/10

¿Preguntas seguras?

Filed under: Humor, Seguridad Informatica — Tags: , — Pedro Laguna @ 9:30 AM

Con mi nuevo Zune (ya hablare de el algun dia) me he suscrito a una serie de podcast en ingles sobre tecnologia para ir cogiendo un poco de oido en el ingles ademas de ver las peliculas y las series sin doblar. Uno de esos podcasts a los que me he suscrito es Security Now! donde desvarian en mayor o menor medida sobre temas relacionados con la seguridad.

La semana pasada iba escuchando en el metro el capitulo numero 179 y comentaron una cosa que me hizo mucha gracia: Preguntas secretas realmente complicadas de responder (incluso si eres tu el que quieres proteger tu cuenta!). Os dejo aqui la lista original, recogida por Joel Gunz:

  • What is your mother’s maiden name?
  • What is your older sister’s favorite Monopoly game piece?
  • Who did your paternal grandfather vote for in the 1956 presidential election?
  • Why did you choose a liberal-arts degree when your entire family urged you to go into finance?
  • In what year did you begin working on your novel?
  • How many weeks away was graduation when you dropped out of college?
  • What was your score on the civil-service employment exam?
  • Where were you sitting when your girlfriend told you she was pregnant?
  • Where did you never end up going for your honeymoon?
  • In what year did you begin working for the post office?
  • What is the name of the hedge-fund manager your ex-wife married?
  • How many hours did it take you to drink that bottle of Jack Daniel’s yesterday?
  • What time was it when, in a drunken rage, you threw your novel into the fire?
  • If you could do it all over again, what would you do differently?

Mi respuesta para todas ellas seria la misma: asdj3oij34oij,mnwn55435″$·4eve o algo parecido. La verdad es que nunca he creido en las preguntas secretas para recuperar claves, casos ha habido muchos de famosos que han perdido su privacidad por poner datos reales en la respuesta. La creacion de un link temporal para recuperar las claves es mucho mas complicado a la hora de programar pero nos garantiza una mayor seguridad. Sin embargo tampoco es la panacea pues si es un enlace facilmente predecible un atacante podria generar un enlace para recuperar la clave del usuario que desee, pero esto sera materia de otra entrada con mas tiempo…

Older Posts »

Blog at WordPress.com.