Autor
|
Tema: Vulnerabilidad en la subida de imagenes (Leído 15,271 veces)
|
50l3r
Desconectado
Mensajes: 784
Solo se que se algo pero no me acuerdo
|
Veran, tengo una web dedicada al hosting de imagenes .gif .jpg y .png de maximo 5 megas
Segun mi cabeza, y aun asi ya visto en mi web, se puede subir a esta webshells c99 y demas con extension .jpg por ejemplo y dar ordenes desde estas
Como se repara este fallo de seguridad? aun nose si mi web es vulnerable, se algo de la vulnerabilidad pero no como protegerme
saludos
|
|
|
En línea
|
|
|
|
Og.
Desconectado
Mensajes: 822
Aprendiendo de la vida
|
Veran, tengo una web dedicada al hosting de imagenes .gif .jpg y .png de maximo 5 megas
Segun mi cabeza, y aun asi ya visto en mi web, se puede subir a esta webshells c99 y demas con extension .jpg por ejemplo y dar ordenes desde estas
Como se repara este fallo de seguridad? aun nose si mi web es vulnerable, se algo de la vulnerabilidad pero no como protegerme
saludos
esto va en nivel web, puedes poner el filtro que usas?
|
|
|
En línea
|
|-
|
|
|
50l3r
Desconectado
Mensajes: 784
Solo se que se algo pero no me acuerdo
|
si te refieres al upload, claro aqui te lo dejo: <html> <head> <title>Subiendo Imagen</title> <link href="CSS/styles.css" rel="stylesheet" type="text/css" /> <style type="text/css"> .principal2_titulo{ background: #202020 url("CSS/Images/back_title.jpg") bottom left repeat-x; width:85%; height:auto; background-color:#000000; border-style:solid; border-width:0px; border-color:#000000; margin:0 5px 0 0px; padding:4px; } .principal2{ width:85%; height:auto; background-color:#202020; border-style:solid; border-width:1px; border-color:#000000; margin:0 5px 0 0px; padding:3px; text-align:left; } </style> </head> <body> <a href="index.html"><div id="imagen_fijada"><img src="Images/uploadmore.png" border=0 alt="Sube mas imagenes"></div></a> <div class="header"><center><img src="Images/Titulo.png"></center> <br><br> <center><div class='principal2_titulo'>Imagen</div> <div class='principal2'> <?php //tomo el valor de un elemento de tipo texto del formulario echo "<center><b>Hola " . $cadenatexto . " gracias por participar en este proyecto :)</b></center><br><br>"; //datos del arhivo $nombre_archivo = $_FILES['userfile']['name']; $tipo_archivo = $_FILES['userfile']['type']; $tamano_archivo = $_FILES['userfile']['size']; $ruta = "BlackBox/"; $aleatorio= rand(0,50000); //compruebo si las características del archivo son las que deseo if (!((strpos($tipo_archivo, "gif") || strpos($tipo_archivo, "jpeg") || strpos($tipo_archivo, "png")) && ($tamano_archivo < 5000000))) { echo "La extensión o el tamaño de los archivos no es correcta:<br><br><table><tr><td><li>Se permiten archivos .gif, .jpg o .png<br><li>Se permiten archivos de 5MB máximo<br>Los nombres de imagenes deben tener estos caracteres: [a-z] [0-9] ^$.</td></tr></table>"; }else{ if (move_uploaded_file($_FILES['userfile']['tmp_name'], "$ruta $aleatorio $nombre_archivo")){ echo "<center><img src='$ruta $aleatorio $nombre_archivo' alt='tu imagen' onload='if(this.width > 1024 || this.height >768) {this.width=1024; this.height=768;}'></center>"; echo "<center><div style='color:#F8485D;'><i>" .$nombre_archivo. "</i></div><br>Imagen cargada correctamente<br><br></center>"; echo "<center><h3>Link Directo:</h3></center>"; echo "<center><h4>http://black-box.no-ip.info/$ruta$aleatorio$nombre_archivo</h4></center>"; }else{ echo "Ocurrió algún error al subir el fichero. No pudo guardarse"; } } ?> </div></Center> </body> </html>
SUPUESTAMENTE, el filtro no deja pasar archivos que no sean png, jpg y gif de tamaño mayor a 5mb, pero por lo que vi si que se puede
|
|
|
En línea
|
|
|
|
Azielito
no es
Colaborador
Desconectado
Mensajes: 9.188
>.<
|
Se logra cambiando el tipo en las cabeceras cuando lo envias Se me ocurre que con GD resizes la imagen un pixcel, si no es imagen te dara error al hacer eso, si da error entonces mandas msg de error xD Tambien podrias "vaciar" el contenido del archivo y buscar alguna cadena de las shells mas comunes y decir "HDP no se vale juakearme"
|
|
|
En línea
|
|
|
|
Darioxhcx
Desconectado
Mensajes: 2.294
|
renombrar el archivo al finalizar la subida... creo que se podria hacer mucho , si no krackwar habia puesto un upload seguro... pero nu se (? saludos
|
|
|
En línea
|
|
|
|
50l3r
Desconectado
Mensajes: 784
Solo se que se algo pero no me acuerdo
|
mmm renombrar el archivo puede ser una opcion pero se acabaria averiguando ya que la web da el mismo link de la imagen para poder indexarlo en foros y demas y no valdria no? aun asi, yo ya lo renombro, pongo un numero aleatorio antes del nombre para que las imagenes que tengan el mismo nombre no se sobreescriban Se logra cambiando el tipo en las cabeceras cuando lo envias :xD
Se me ocurre que con GD resizes la imagen un pixcel, si no es imagen te dara error al hacer eso, si da error entonces mandas msg de error xD
Tambien podrias "vaciar" el contenido del archivo y buscar alguna cadena de las shells mas comunes y decir "HDP no se vale juakearme" :xD azielito, a que te refieres cambiando el tipo en las cabeceras?
|
|
|
En línea
|
|
|
|
WHK
|
lo que debes hacer es verificar la extensión en el caso de que no tengas GD ya que por defecto no viene en php. <?php function verifica_extension($archivo, $permitidos){ if(!eregi('.', $archivo)) return false; // No tiene extension /* Separa extensión */ $extension = explode('.', $archivo); $extension = $extension[count($extension) - 1]; foreach($permitidos as $permitido){ return true; // Permitido } } return false; // No permitido } $permitidos = array('jpg','jpeg','png','gif','bmp','svg'); if(verifica_extension($_FILES['userfile']['name'], $permitidos)){ mueve , procesa y todo lo demás ..... }else{ muestra el mensaje de error que la extension no es valida .... } ?>
Además puedes quitarle el permiso de ejecución al directorio por si las dudas. azielito, a que te refieres cambiando el tipo en las cabeceras? POST /script.php HTTP/1.1 Host: 127.0.0.1 Connection: close Content-Type: multipart/form-data; boundary=---------------------------00000000000001 Content-Length: 169
-----------------------------00000000000001 Content-Disposition: form-data; name="archivo"; filename="shell.php" Content-Type: application/png
<?php phpinfo(); ?>
|
|
« Última modificación: 2 Septiembre 2009, 06:31 am por WHK »
|
En línea
|
|
|
|
50l3r
Desconectado
Mensajes: 784
Solo se que se algo pero no me acuerdo
|
Bueno, ya comprendi el php aun sin saber medianamente el lenguaje lo modifique un poco y en vez de usar funcion php lo acople directamente a lo que tenia ya lo comprobe y cambiando las cabeceras aun asi no resulta podria pasaros a alguno el enlace por mp y me decis si esta correcto? hice la prueba y esta bien pero nose si tendra algun agujerito por otro lado si estais de acuerdo decirmelo por aqui y muchas gracias, abro de nuevo mi web
|
|
« Última modificación: 2 Septiembre 2009, 16:50 pm por 50l3r »
|
En línea
|
|
|
|
Azielito
no es
Colaborador
Desconectado
Mensajes: 9.188
>.<
|
Pone aqui la url, y su source para que los que saben mas intenten vulnerarlo y ver que fallas tienen
|
|
|
En línea
|
|
|
|
50l3r
Desconectado
Mensajes: 784
Solo se que se algo pero no me acuerdo
|
pero 0% intencion spam: black-box.es.gd <html> <head> <title>Subiendo Imagen</title> <link href="CSS/styles.css" rel="stylesheet" type="text/css" /> <LINK REL="SHORTCUT ICON" HREF="Images/blackico.ico"> <style type="text/css"> .principal2_titulo{ background: #202020 url("CSS/Images/back_title.jpg") bottom left repeat-x; width:85%; height:auto; background-color:#000000; border-style:solid; border-width:0px; border-color:#000000; margin:0 5px 0 0px; padding:4px; } .principal2{ width:85%; height:auto; background-color:#202020; border-style:solid; border-width:1px; border-color:#000000; margin:0 5px 0 0px; padding:3px; text-align:left; } </style> </head> <body> <a href="index.html"><div id="imagen_fijada"><img src="Images/uploadmore.png" border=0 alt="Sube mas imagenes"></div></a> <div class="header"><center><img src="Images/Titulo.png"></center> <br><br> <center><div class='principal2_titulo'>Imagen</div> <div class='principal2'> <?php //definiendo varaiables $chkcon = isset($_POST["chkcon"]); $chkvis = isset($_POST["chkvis"]); $chkwall = isset($_POST["chkwall"]); $nombre_archivo = $_FILES['userfile']['name']; $tamano_archivo = $_FILES['userfile']['size']; $ruta = "BlackBox/"; $ruta_concurso = "Escritorios/"; $ruta_muro = "Muro-pendiente/"; $ruta_invisible= "no-visibles/"; $aleatorio= rand(0,50000); $permitidos = array('jpg','jpeg','png','gif','bmp','svg','ico'); if ($nombre_archivo=="" || $cadenatexto==""){ echo "<center><div style='color:#ec2929;'>Ups¡¡ ha ocurrido un error :/ puede deberse a:</div><br></center>"; echo "<li>No has escrito tu nombre"; echo "<li>No has especificado la imagen a enviar";}else{ echo "<center><b>Hola " . $cadenatexto . " gracias por participar en este proyecto :)</b></center><br><br>"; if (eregi('.',$nombre_archivo)) { $extension = explode('.', $nombre_archivo); $extension = $extension[count($extension) -1]; foreach($permitidos as $permitido){ if ($chkcon==1) { if (copy($_FILES['userfile']['tmp_name'], "$ruta_concurso$aleatorio$nombre_archivo")){ echo "<div style='color:#bcea64;'><li>Su imagen esta puesta en el desfile de escritorios, si su escritorio tiene estilo podra estar en el album de la Caja Negra</div><br><br>"; }else{ echo "<table>La extensióncita o el tamaño de los archivos no es correcta:<br><br><tr><li>Se permiten archivos .gif, .jpg/.jpeg, .png, .bmp y .svg<br><li>Se permiten archivos de 2MB máximo</tr></table>";}} if ($chkwall==1){ if (copy($_FILES['userfile']['tmp_name'], "$ruta_muro$aleatorio$nombre_archivo")){ echo "<div style='color:#f1283f;'><li>Su imagen sera insertada en el muro, espere hasta que se valide</div><br><br>"; }else{ echo "<table>La extensión o el tamaño de los archivos no es correcta:<br><br><tr><li>Se permiten archivos .gif, .jpg/.jpeg, .png, .bmp y .svg<br><li>Se permiten archivos de 2MB máximo</tr></table>";}} if ($chkvis==1){ if (copy($_FILES['userfile']['tmp_name'], "$ruta$aleatorio$nombre_archivo")){ echo "<center><img src='$ruta$aleatorio$nombre_archivo' alt='tu imagen' onload='if(this.width > 1024 || this.height >768) {this.width=1024; this.height=768;}'></center>"; echo "<center><div style='color:#7fbbcc;'><i>" .$nombre_archivo. "</i></div><br>Estado de visibilidad de tu imagen:<br><img src='Images/visible.png' title='Imagen cargada como visible' alt='Imagen cargada y visible en la portada'><br><br></center>"; echo "<hr>"; echo "<center><h3><div style='color:#bcea64;'>Link Directo:</div></h3></center>"; echo "<center><h4>http://black-box.no-ip.info/$ruta$aleatorio$nombre_archivo</h4></center><br>"; echo "<hr>"; echo "<center><h3><div style='color:#f1283f;'>BBCODE:</div></h3></center>"; echo "<center><h4>[img]http://black-box.no-ip.info/$ruta$aleatorio$nombre_archivo&#91&#47img&#93</h4></center><br>"; echo "<hr>"; echo "<center><h3><div style='color:#7fbbcc;;'>HTML:</div></h3></center>"; echo "<center><h4>&#60img src=&#34http://black-box.no-ip.info/$ruta$aleatorio$nombre_archivo&#34&#62</h4></center><br>"; }else{ echo "<table>La extensión o el tamañito de los archivos no es correcta:<br><br><tr><li>Se permiten archivos .gif, .jpg/.jpeg, .png, .bmp y .svg<br><li>Se permiten archivos de 2MB máximo</tr></table>"; }}else{ if (copy($_FILES['userfile']['tmp_name'], "$ruta_invisible$aleatorio$nombre_archivo")){ echo "<center><img src='$ruta_invisible$aleatorio$nombre_archivo' alt='tu imagen' onload='if(this.width > 1024 || this.height >768) {this.width=1024; this.height=768;}'></center>"; echo "<center><div style='color:#f1d27d;'><i>" .$nombre_archivo. "</i></div><br><img src='Images/invisible.jpg' title='Imagen cargada como invisible' alt='Imagen cargada como invisible'><br><br></center>"; echo "<hr>"; echo "<center><h3><div style='color:#bcea64;'>Link Directo:</div></h3></center>"; echo "<center><h4>http://black-box.no-ip.info/$ruta$aleatorio$nombre_archivo</h4></center><br>"; echo "<hr>"; echo "<center><h3><div style='color:#f1283f;'>BBCODE:</div></h3></center>"; echo "<center><h4>[img]http://black-box.no-ip.info/$ruta$aleatorio$nombre_archivo&#91&#47img&#93</h4></center><br>"; echo "<hr>"; echo "<center><h3><div style='color:#7fbbcc;;'>HTML:</div></h3></center>"; echo "<center><h4>&#60img src=&#34http://black-box.no-ip.info/$ruta$aleatorio$nombre_archivo&#34&#62</h4></center><br>"; }else{ echo "<table>La extensión o el tamaño de los archivos no es correcta:<br><br><tr><li>Se permiten archivos .gif, .jpg/.jpeg, .png, .bmp y .svg<br><li>Se permiten archivos de 2MB máximo</tr></table>";} } } } } } ?> </div></Center> </body> </html>
|
|
|
En línea
|
|
|
|
|
|