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.

Bypassear uploader con validacion en JavaScript

  • 2 Respuestas
  • 2317 Vistas

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

Desconectado Xt3mP

  • *
  • Underc0der
  • Mensajes: 432
  • Actividad:
    0%
  • Reputación 0
  • Ellos me están buscando, pero yo los encontraré.
    • MSN Messenger - Xt3mP@h4x0rz.us
    • AOL Instant Messenger - Xt3mP@h4x0rz.us
    • Yahoo Instant Messenger - Xt3mP@h4x0rz.us
    • Ver Perfil
    • Xt3mP
« en: Abril 20, 2012, 02:39:49 am »
Estamos en una época en donde utilizar tecnología dinámica (refiriendome a programación; como lo es JavaScript, entre otros) hace que un sitio se posicione entre los favoritos por la interacción en tiempo real entre cliente > servidor < cliente. Algo de lo más notorio de lo anterior mencionado es que trae consigo mismo un enfoque en la seguridad a nivel cliente dejando de lado la seguridad a nivel servidor (cosa que es terriblemente riesgoso). Esta ocasión me encontré con un uploader de imagenes que no permitía subir ningún archivo; y no porque validará la extensión, si no que utiliza funciones natas de PHP que hacen que la operación de cargar el archivo sea incorrecta:



A primera instancia notamos (como ya mencione) que no valida la extensión del archivo por lo que si no existieran esas funciones tendríamos desde ya nuestra shell arriba; por otro lado, notamos que hace referencia al archivo upload_.php que en realidad no nos sirve de nada por lo que procedemos buscando algo que nos sea útil. Generalmente, estos uploaders no tienen un .htaccess o un index que restringa el listado de archivos, es decir, quedan al descubierto los demás archivos encontrandonos así con el resto de los archivos del servidor (al menos los de la carpeta en cuestión); navegando por dichos archivos notamos que existe otro uploader más pero este es para archivos .mp3:


Intentando subir la shell en extensión .php (como lo hemos estado intentando hasta ahorita) notamos que nos regresa en tiempo real un error de la siguiente manera ya que valida la extensión del archivo:


A simple vista nos damos cuenta que se trata de algún lenguaje dinámico, como lo es JavaScript por lo que procedí a revisar el código fuente y nos encontramos con la siguiente función:

Código: Javascript
  1. function validar() {
  2. var archivo = document.SubirMp3.mp3.value;
  3. extensiones_permitidas = new Array(".mp3", ".wma");
  4. mierror = "";
  5.  
  6. if (!archivo) {
  7. //Si no tengo archivo, es que no se ha seleccionado un archivo en el formulario
  8. mierror = "No has seleccionado ningún archivo";
  9. }else{
  10. //recupero la extensión de este nombre de archivo
  11. extension = (archivo.substring(archivo.lastIndexOf("."))).toLowerCase();
  12. //alert (extension);
  13. //compruebo si la extensión está entre las permitidas
  14. permitida = false;
  15. for (var i = 0; i < extensiones_permitidas.length; i++) {
  16. if (extensiones_permitidas[i] == extension) {
  17. permitida = true;
  18. break;
  19. }
  20. }
  21. if (!permitida) {
  22. mierror = "Compruebe la extensión del archivo de sonido seleccionado. \nSólo se pueden subir archivos con extension: " + extensiones_permitidas.join();
  23. }else{
  24. //submito!
  25. SubirMp3.submit();
  26. return true;
  27. }
  28. }
  29. //si estoy aqui es que no se ha podido submitir
  30. alert (mierror);
  31. return false;
  32.  
  33. }

Notamos que nos valida la extensión tomando de referencia el último punto (.) por lo que si intentamos subir shell.mp3.php sería inútil, revisando el resto del código fuente notamos que hace referencia a otro archivo .php que es el encargado de procesar el archivo en cuestión, y esto era de esperarse, ya que en el uploader anterior también hacia referencia a otro archivo.

Es aquí donde entra el ingenio para saltarse la protección en JavaScript, aclaro que todavía no estaba seguro si subiría la shell porque creí que tenía también comprobación en PHP.

Lo que hicimos fue abrir un documento de texto (en cualquier editor) y simular el formulario original quedándonos de esta manera:

Código: Text
  1. <form action="http://web/path/path/uploadmp3_.php" method="POST" ENCTYPE="multipart/form-data" onSubmit="return validar()">
  2. <input name="mp3" type="file"><input name="submit" type="submit" value="Enviar"></FORM>

Después, cargamos la shell como archivo (al dar click en el file loader) y presionamos Enviar; como en este caso no existe ninguna función validar() que al dar click al ítem submit nos regresa true porque no hay nada que impida que el formulario se envíe a el target indicado, y ¿qué resultado obtenemos?, que en este caso no valida la extensión por PHP haciendo que esto sea posible:


Por lo tanto, mi recomendación es que si quieren ser parte de estos sitios bonitos, no solo comprueben la seguridad a nivel cliente, si no también a nivel servidor.

Nota: Para hacer esto más sencillo también basta con enviar cabeceras (y el archivo en ellas) o desactivar JavaScript directamente:


P.D.: Ningún archivo fué tocado o eliminado (ha excepción de los archivos vulnerables).
« Última modificación: Abril 20, 2012, 10:54:37 am por Pr0ph3t »
Cada vez que me das Karma me motivas

Desconectado andrewtwo

  • *
  • Underc0der
  • Mensajes: 44
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Agosto 30, 2012, 05:20:13 am »
No validar en el servidor es faltal  :o

Desconectado hdbreaker

  • *
  • Underc0der
  • Mensajes: 412
  • Actividad:
    0%
  • Reputación 0
  • HD_Breaker
    • Ver Perfil
    • Security Signal
    • Email
  • Skype: hdbreaker96
  • Twitter: @SecSignal
« Respuesta #2 en: Agosto 30, 2012, 01:31:40 pm »
Muy Buen Aporte, esta muy bien explicado

Ser Libres es un Privilegio por el cual pocos estamos dispuestos a correr el riesgo

 

¿Te gustó el post? COMPARTILO!



Bypassear "Illegal mix of collations"

Iniciado por Abnormality

Respuestas: 0
Vistas: 1246
Último mensaje Agosto 25, 2011, 12:16:05 am
por Abnormality
Métodos para bypassear un WAF en Inyección SQLi

Iniciado por M5f3r0

Respuestas: 6
Vistas: 2996
Último mensaje Agosto 05, 2013, 01:24:32 pm
por Mr. Foster
Bypassear FuckingScan[Mozilla Firefox]

Iniciado por Matabarras

Respuestas: 1
Vistas: 1524
Último mensaje Abril 16, 2014, 07:07:42 am
por meteor0
[Video-Tutorial] Bypassing an uploader to get shell.

Iniciado por Xt3mP

Respuestas: 0
Vistas: 1336
Último mensaje Julio 21, 2010, 07:38:59 pm
por Xt3mP
Otra forma de bypassear un uploader

Iniciado por Xt3mP

Respuestas: 0
Vistas: 2427
Último mensaje Abril 20, 2012, 02:42:01 am
por Xt3mP