XSS GAME "JUGANDO Y EXPLOTANDO VULNERABILIDADES XSS PARA TU ENTRENAMIENTO JEDI"
google hacking 6:00:00
"XSS GAME"
"JUGANDO Y EXPLOTANDO VULNERABILIDADES XSS PARA TU ENTRENAMIENTO JEDI"
"SOLUCIONARIO"
uno de lo mas concerniente en la seguridad de la informacion asi como lo mas divertido es poder practicar y entrenarte dentro del campo pasando por unas misiones al igual que pasaras misiones en red dead redemption 2, bueno, al momento de escribir este articulo no profundizare demasiado en lo que realmente implica las consecuencias de explotar un fallo de sitios cruzados o mejor conocido en el mundo cibernetico como XSS, hay que recalcar que para poder tener un conocimiento pofundo de estos fallos de seguridad habra que tener conocimientos avanzados o intermedios de desarollo javascript ya que es gracias a este ultimo que nos permite inyectar scripts maliciosos que permitan un control total del navegador al usuario como es el caso de la herramienta de seguridad de la actualidad mas usada mejor conocida como BEEF, dicha herramienta nos permite enviar links maliciosos con scritps previamente modificados y programados para su uso el cual solo con que el usuario entre a dicho link, esto nos permite tener un control total hasta de su camara web, geolocalizacion y su microfono, si bien es cierto que esto mismo implica tener en mente una estrategia global de ingenieria social sin precedentes, tenemos que primero organizarnos para lanzar una campaña de ingenieria social donde conocer a la victima es un objetivo prioritario, se puede lograr esto gracias a las herramientas de inteligencia con las que contamos en la actualidad mejor conocidas como OSINT como maltego, entre otras, pero hablar de estas herramientas quedan fuera del alcance de esta investigacion.
1._Analisis OSINT con Maltego.
la seguridad cibernetica es como el ajedrez, primero hay que tener una buena estrategia, una buena jugada sobre como mover las piezas acerca de la victima, en caso contrario, el ataque que quieramos realizar no resultara con exito, si no en un rotundo fracaso.
ahora vamos a buscar la pagina oficial para empezar a jugar y no retrasarnos mas en nuestro acometido por el dia de hoy, tecleamos xss en google nos saldra una pagina que es la siguiente como se puede observar en la imagen:
podemos ver que tenemos unas explicaciones sencillas y una descripcion de la mision informatica que nos encomiendan, podremos ver claramente que la vulnerabilidad aqui radica en una posible entrada javascript dentro de la barra de busqueda que se enlaza directamente con la base de datos que se encuentre previamente conectada.
la mision nos dice que tenemos que provocar un alert javascript dentro de la pagina veamos donde se encuentra exactamente la vulnerabilidad, esta vulnerabilidad es muy tipica porque los prorgramadores algunas veces no escapan bien lo que se tiene que entrar en algun input dentro de un programa o software el no escapar caracteres o extensiones de archivos y la historia informatica ya nos ha dicho que no escapar las entradas es una muy muy mala idea.
ahora probaremos dentro del input con un <script> y </script>:
alert("the pentester diaries ");
tambien podemos echar un vistazo al codigo vulnerable para que lo analicemos y para que podamos encontrar los errores y no cometer los mismos errores al momento de programar nuestras aplicaciones, como vemos el codigo esta en python con el framework django.
Vemos que la proteccion xss esta desactivada para propositos de demostracion y que la entrada no se valida bien dentro de la funcion def get(self):
vemos que la logica del programa es la siguiente:
primero se agrega los headers y se pone en 0 o null la activacionn de la desactivacion de la proteccion xss, Si podemos analizar vemos que dentro de la sentencia siguiente:
else: query = self.request.get('query', '[empty]')ya que podemos ver que el arreglo esta vacio o nos da a entender que pudiera estar vacio lo que se traduce en que podemos inyectar datos y no hay una condicional que niegue algun valor o tipos de valores de datos.
este seria el resultado de no escapar bien las entradas sencillas de nuestros formularios de entrada y seria la primera solucion a la mision 1.
ahora vamos a por la segunda mision para no perder mas tiempo en nuestro juego de hacking favorito :).
ahora lo que nos toca en el segundo nivel es un poquito mas complejo vamos a intentar inyectar datos pero esta vez lo haremos con ayuda de la persistencia como podemos ver en el nombre de la mision que dice PERSISTENCE IS KEY.
vemos que tenemos un tipo blog donde podemos escribir comentarios, pero que hay de mal en todo esto?
como nos dice la descripcion en ocasiones a los programadores no controlan los datos que provienen de los usuarios similar que la mision 1 y por lo tanto en ocasiones existen bases de datos del lado del cliente y esto a su vez se traduce que si existe un fallo dentro de los controles de las entradas, entonces podemos manipular los datos o mas bien dicho un atacante podra manipular estos mismos datos.
podemos ver que es un blog cualquiera de ejemplo en los que se observa que el html esta siendo traducido y esta mal escapado, podemos ver que la palabra madness se observa de un color diferente al resto del texto, lo que vemos es que no se ha escapado correctamente los datos que se estan enviando directamente a la base de datos.
si introducimos <script> alert("hola"); </script> en esta ocasion no nos funcionara porque la vulnerabilidad se encuentra en otra parte del codigo al ser otro codigo completamente diferente y otra aplicacion completamente diferente.
la parte del codigo o un fragmento de codigo que se encuentra vulnerable seria el siguiente:
this.setup = function() { var defaultPost = new Post(defaultMessage); window.localStorage["postDB"] = JSON.stringify({ "posts" : [defaultPost] }); }Vemos claramente que el metodo localStorage() lo que realiza es que guarda localmente los posts y los envia hacia la base de datos cliente por medio del script .py por medio tambien valga la redundancia en django.
Tendriamos que inyectar un dato que se lo pueda traspasar hacia este metodo y que este mismo metodo sea el encargado de mandarlo a la base de datos para asi tener lo que se le llama un ataque XSS persistente, de ahi el nombre de este nivel o mision 2 la persistencia es la clave.
ahora bien si lo que nos dice es que los comentarios son guardados y que los posts se reinician cada vez que se recargue la pagina entonces tendremos que planificar otro metodo y estrategia.
la solucion seria inyectar datos mediante html o por medio de algunos atributos que la aplicacion no conozca como filtrar, en este caso lo haremos mediante una imagen y desde ahi inyectaremos el alert.
este sera el code para evadir el filtrado xss y lograr un ataque XSS persistente:
img src=x onerror=alert(9)
Con esto conseguimos implantar un error dentro de la pagina y redirigir al usuario a una pagina maliciosa o un enlace con malware previamente programado.
se le llama persistente porque el ataque persistira desde el lado del cliente, vamos a poner otro comentario cualesquiera y vermeos que se vuelve a ejecutar el ataque desde aqui podemos hacer muchas cosas que se nos vengan a la imaginacion como por ejemplo enlazar o redirigir al usuario a un sitio con malware para obligarlo a descargar algun tipo de malware o enlazarlo a otro script.js malicioso para controlar su computadora como se suele hacer con el framework de seguridad informatica beef incluido en la suite de kali linux.
Ahora vamos por el nivel 3/6 es decir vamos a practicamente a la mitad de convertirnos en casi casi un maestro jedi de los ataques XSS, veamos que nos dice el tercer reto para nosotros.
nos dice que algunas de las llamadas a la funcion de javascript en este caso las llamadas APIS podrian ser vulnerables a los ataques XSS .
veamos que esta solucion es una de las mas complicadas ya que la vulnerabilidad se encuentra enmascarada mediante la llamada a una funcion API.
por lo que el siguiente codigo es el vulnerable y es donde entramos nosotros en terreno para inyectar el codigo vamos analizar el siguiente code haber que podemos sacar de el.
podemos ver que la parte vulnerable la podemos encontrar dentro del codigo que esta concatenando la imagen y se lo manda o parsea como se le quiera nombrar el codigo vulnerable es cuando el elemento html se parsea y se manda directamente a los tabs mediante la barra de direcciones del navegador es entonces la clave para explotar e inyectar nuestro exploit XSS.
el codigo vulnerable es :
='/static/level3/cloud" + num + ".jpg' />";
window.onload
=
function
() {
chooseTab(unescape(self.location.hash.substr(1)) || "1");
}
entonces podemos inyectar el codigo dentro de la variable , podriamos agregar el mismo exploit que la mision pasado donde inyectamos mediante el parametro de un numero es decir 9 o cualesquiera otro numero.
podriamos poner por ejemplo el exploit xss que inyectamos en la anterior mision es decir pasandole el alert como parametro (9) para provocar un popup dentro del navegador del usuario.
estamos viendo que la funcion que han creado llamada chooseTab substrae el num 1 pero no lo escapa correctamente por lo que podremos inyectar esto de la siguiente manera.
1' onerror='alert();//
lo que se traduce como "estamos escapando el 1 ya que es lo que se espera recibir dentro de la funcion despues estamos metiendo un error a proposito para provocar un alerta y conseguido!
hasta aqui llegamos con el solucionario si quereis llegar hasta el nivel 6 el camino es largo y ancho pero el camino al lado oscuro es tremendamente exquisito, asi que a practicar chicos!
Saludos.
Stuxnet
REFERENCIAS Y ENLACES TECNICOS:
google hacking
hacking web
seguridad web
vulnerabilidades
web hacking
xss
0 comments:
Publicar un comentario