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
Cita de: 50l3r en 1 Septiembre 2009, 02:38 AM
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?
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
$cadenatexto = htmlentities($_POST["cadenatexto"]);
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
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
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
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?
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){
if(strtolower($permitido) == strtolower($extension)){
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.
Citarazielito, a que te refieres cambiando el tipo en las cabeceras?
CitarPOST /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(); ?>
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 :)
Pone aqui la url, y su source para que los que saben mas intenten vulnerarlo y ver que fallas tienen :D
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
$cadenatexto = htmlentities($_POST["cadenatexto"]);
$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 (strtolower($permitido) == strtolower($extension)&& tamano_archivo < 20000000){
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>";}
}
}
}
}
}
exit;
?>
</div></Center>
</body>
</html>
Pero señores, si es .jpg que coño van a ejecutar? :xD
Si no tienes LFI, ni te preocupes, subiran la shell terminada en jpg, y simplemente dara error al mostrarse :D
Tiene Path Discloure :xD
<b>Fatal error</b>: Call to undefined function fnCACHE_cache_check() in <b>/datos/nestor4/wwwplanid/29/5229/0005229/redir/_cache/b/bl/black-box.es.gd</b> on l
Por cierto una recomendación de seguridad ponle un .htaccess adonde se guardan las imagenes que prohiba la vista ( o pon un index.php vacio ) y renombra completamente las imagenes de esa manera si te suben shell no sera tan facil encontrarla :xD
a que te refieres con ponerle .htacces a las imagenes?
si se le pusiera no dejarian verlas no? si es un hosting?
fijo que me equivoco pero como es la duda?? :P
Pero como se va a ejecutar una shell en jpg sin LFI?
con lo del .htacces me supongo que kiere un
web.com/images/
resultado
403 forbidden.. o algo asi...
Cita de: Jubjub en 4 Septiembre 2009, 21:57 PM
Pero como se va a ejecutar una shell en jpg sin LFI?
pasando los datos http , cambias el archivo , osea tenes x ejemplo
<? include"$page"; ?>
y lo tenes como php.. al tratar de subirlo te dice
Content-Type: application/octalh steam \n
si lo cambias x
Content-Type: image/jpeg
va a subir la shell como si fuera un php.. la extension va a ser php , pero va a subir como jpg
si lo hago cion htacces, las imagenes no se cargarian con los links que doy no?
Luego la vulnerabilidad que dices tu dario, no era la que tenia antes?
corrigeme si no es asi, quizas aun la tenga, prueba a subir un php si quieres, tengo backup hecho sin cambios realizados
lo del htacces seria para la carpeta de las imagenes no mas
mira images hack
http://img146.imageshack.us/img146/2540/89995066.jpg
http://img146.imageshack.us/img146/2540/
404 not found. .a eso creo que se referian...
lo demas lo dijo whk en su post,,
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(); ?>
... que seguramente con el codigo que dio no se podria bypassear
pero nu se :/
saludos
pense que aun lo tenia,
modifique un poco el code de whk para adaptarlo mejor a lo que pedia mi hosting y asi es, ya habia probado a intentar bypassearlo pero nada
hare lo que me decis del htacces gracias :) me ayudais mucho a que mi web progrese
Si filtras por extensiones es imposible (porque filtras el archivo antes de copiarlo, cierto?)
SI dejas a la mano de dios que filtre el html, estas perdido xD
omg con html claro que no jajaja
estariamos muy seguros si papa html hiciese su trabajo :o
Entonces una whitelist con php y lo tienes todo solucionado, siempre que no tengas lfi, si suben shell en jpg no sera mas que una imagen con errores.
^^ entonces marcho tranquilo jeje
lo que me falta es lo ams dificil, conseguir que la gente visite la pagina :-[
Cita de: 50l3r en 6 Septiembre 2009, 02:18 AM
^^ entonces marcho tranquilo jeje
lo que me falta es lo ams dificil, conseguir que la gente visite la pagina :-[
jajaja.. eso ya no se programa en php
jajajaja :P
:rolleyes: ojala xD
porcierto,encontre unos addons muy buenos para firefox que analizan webs en busca de xss y sql inyections:
(http://img38.imageshack.us/img38/9163/sinttulobk.png)
bueno no coloco el de sql inyection, no tengo db :/ xd aun
Cita de: Jubjub en 4 Septiembre 2009, 19:03 PM
Pero señores, si es .jpg que coño van a ejecutar? :xD
Si no tienes LFI, ni te preocupes, subiran la shell terminada en jpg, y simplemente dara error al mostrarse :D
No creas...
Si pones en la cabecera
GIF89 mas un code malicioso, puedes hacer algo...
Soler, creo que a tu code le hace falta verificar las cabeceras.
Saludos.
antes si, ahora creo que noque ya tengo base de datos testee con esos dos addons y no tengo ni una sola vulnerabilidad, cuando la gente suele tenwer muchas ^^
Cita de: JaAViEr♂ en 12 Septiembre 2009, 11:31 AM
Cita de: Jubjub en 4 Septiembre 2009, 19:03 PM
Pero señores, si es .jpg que coño van a ejecutar? :xD
Si no tienes LFI, ni te preocupes, subiran la shell terminada en jpg, y simplemente dara error al mostrarse :D
No creas...
Si pones en la cabecera
GIF89 mas un code malicioso, puedes hacer algo...
Soler, creo que a tu code le hace falta verificar las cabeceras.
Saludos.
SI filtras por extensiones y prohibes las .php, php5, php4 y demas, ya que el servidor se basa en ello para ejecutar codigo php o no, no puedes hacer nada, no?
no creo que se pudiese, es mas, he visto rfi`s en los cuales asignabas remotamente tu php y solamente se veia el texto, y no podia ejecutarse nada
porcierto jub jub, el nick de debajo de tu imagen es por morodo?
Cita de: 50l3r en 12 Septiembre 2009, 12:34 PM
no creo que se pudiese, es mas, he visto rfi`s en los cuales asignabas remotamente tu php y solamente se veia el texto, y no podia ejecutarse nada
porcierto jub jub, el nick de debajo de tu imagen es por morodo?
Yo pensé lo mismo :xD pero creo que morodo dice lady lady lai
ya, se me hacia raro jajaja
Cita de: 50l3r en 12 Septiembre 2009, 12:34 PM
no creo que se pudiese, es mas, he visto rfi`s en los cuales asignabas remotamente tu php y solamente se veia el texto, y no podia ejecutarse nada
porcierto jub jub, el nick de debajo de tu imagen es por morodo?
:xD Es de Bob Dylan :silbar:
Cita de: Jubjub en 12 Septiembre 2009, 12:20 PM
Cita de: JaAViEr♂ en 12 Septiembre 2009, 11:31 AM
Cita de: Jubjub en 4 Septiembre 2009, 19:03 PM
Pero señores, si es .jpg que coño van a ejecutar? :xD
Si no tienes LFI, ni te preocupes, subiran la shell terminada en jpg, y simplemente dara error al mostrarse :D
No creas...
Si pones en la cabecera
GIF89 mas un code malicioso, puedes hacer algo...
Soler, creo que a tu code le hace falta verificar las cabeceras.
Saludos.
SI filtras por extensiones y prohibes las .php, php5, php4 y demas, ya que el servidor se basa en ello para ejecutar codigo php o no, no puedes hacer nada, no?
Prueba poniendo un archivo .php.renombralo :xD Te lo ejecuta igual :P
que quieres decir con eso yst, que hay vulnerabilidad?
o que con ese metodo se podria conseguir en x web?
Cita de: YST en 13 Septiembre 2009, 02:02 AM
Prueba poniendo un archivo .php.renombralo :xD Te lo ejecuta igual :P
No me jodas, voy a verlo corriendo, que si es asi tengo al menos 5 aplicaciones vulnerables corriendo por ahi :(
Gracias por el aviso! :D
Comprobado, funciona perfectamente, tenias razon :P
Gracias de nuevo por el aviso, voy a parchear tods mis sitios :laugh:
mmm sabriais decirme si mi sitio sufre ese error?
a que se debe el error? solo basta con quitar extension o como?
Cita de: 50l3r en 13 Septiembre 2009, 10:59 AM
que quieres decir con eso yst, que hay vulnerabilidad?
o que con ese metodo se podria conseguir en x web?
En el metodo de WHK no hay bug ya que detecta la ultima extención y filtra si no es jpeg,gif,etc.. , pero en muchos uploader's que solo filtran extensiones como el .php y eso si esta ese bug :P
ya decia yo xd
Una pregunta no bastaría con chequear que el archivo termine en una extensión válida de imagen?
Cita de: naderST en 15 Septiembre 2009, 01:50 AM
Una pregunta no bastaría con chequear que el archivo termine en una extensión válida de imagen?
Nop, no basta..
imagina que filtras jpg entonces mi archivo se podria llamar test.zip.fakejpg, por eso es mejor separar el cuerpo del archivo con la extensión obteniendo e ultimo grupo de caracteres despues del ultimo punto y comenzar a comparar tal como lo dije mas arriba. Esto es seguro hasta el punto en que no tengan LFI, en ese caso entonces es mejor usar imagemagic o GD ya que nunca debes fiarte de las cabezeras type de un archivo ya que pueden ser spoofeadas sin problemas. al igual que el header del binario de la supuesta imagen, que comienze con PNG% y ya, el resto puro código php.