La apuesta
Hace ya tiempo que os conté como ayudé
a un amigo que tenía problemas con el botón de activar y desactivar
la WIFI en su router. El único problema fue que el apaño lo hice
aprovechando una vulnerabilidad CSRF que le encontré al equipo.
Por si alguien no lo recuerda...
http://418iamateapot.blogspot.com.es/2013/01/el-csrf-del-router.html
Pues bien, hoy tuve tiempo y
oportunidad de volver a ver a mi amigo. Todo iba bien hasta que me
encaró y me dijo:
- ¿Sabes? Leí aquello que escribiste
sobre el CSRF del router y todo eso. Y creo que hablas de “MI”
router.
Parecía molesto. Yo, que no me lo
esperaba, me las arreglé para poner cara de póker. Pero mi amigo se
fue envalentonando:
- ¿Sabes? Creo que lo que cuentas no
es verdad. Y si lo es, que no es del todo cierto. Y, aún así, que
exageras. ¿Cómo va nadie a hacerse con el control de mi router
desde Internet por visitar una página? Es que te gusta hablar por
hablar...
Como, a estas alturas, uno ya empieza a
ver claras algunas oportunidades, le miré a los ojos y le espeté:
- A que no eres capaz de apostarte una
cena.
Eso fue todo lo que hizo falta para
herir su orgullo y hacerle caer. Mientras él decía “¡apostada
queda!”, yo llamaba por teléfono a casa y decía:
- Iros arreglando, que hoy comemos
fuera.
Un XSS... y algo más
Entré al router con el usuario y la contraseña que ya conocía de la vez anterior y me puse a navegar por menús y opciones. Una cosa chula que tenía el cacharro era que podía compartir una impresora entre los equipos de la casa. El formulario para configurar esta opción era bastante sencilloCuando analicé el código fuente de la página, comprobé que había un código Javascript que rellenaba los campos con los valores almacenados en el equipo.
Y pensé: ¡No va a ser tan fácil!
Pero sí lo era. El router debe tener una instrucción que genera
var ippMake = " |
… y a continuación pone el valor que corresponda a la marca y modelo de la impresora. Finalmente, cierra la cadena y la instrucción al añadir:
"; |
¿Qué pasaría si pongo una marca y modelo que contenga una comilla doble? Por ejemplo
marca"modelo |
Pues... que el programita del router lo copia todo sin hacer más comprobaciones y terminaríamos teniendo un código JavaScript con errores de sintaxis por una cadena mal cerrada.
var ippMake = "marca"modelo"; |
Pero, oye, eso nos puede permitir
insertar instrucciones nuevas dentro del código JavaScript. Si
nuestra impresora fuera de una marca rara, digamos:
";alert("XSS");aaa=" |
Terminaríamos teniendo:
var ippMake = "";alert("XSS");aaa=""; |
Y eso nos permitiría ejecutar “cosas
nuevas” en las páginas del router.
Claro que algún problemilla habría
que superar. Y es que el campo en el que se pone la marca y el modelo
sólo permite insertar un máximo de 16 caracteres. Pocos para lo que
yo necesitaba.
No hay comentarios:
Publicar un comentario