Autor: @toespar
Telegram
continúa buscando diferenciarse con funcionalidades que atraigan a los
usuarios. Viendo que el mundo de los videojuegos cada vez reúne a más gente en
teléfonos, qué mejor que poder hablar y jugar con tus amigos sin salir de la
conversación. Por ello, la propia plataforma ha creado varios juegos accesibles
desde el propio chat con tan solo poner @gamebot.
Viernes
por la tarde, y de repente, me llega una notificación de Telegram en un chat en
el que se mostraba el siguiente mensaje:
Se había abierto la veda. Y aunque he de reconocer que
no soy muy de jugar, el hecho de tener más puntuación que el resto me impulsaba
a ello. Tras unos breves intentos lo consigo.
Evidentemente, esto siguió varias veces más hasta que llegó
un punto en el que me resultaba imposible conseguir más puntos que el primero,
pero el asunto no podía quedar así. Por ello, me pongo a investigar cómo
funciona la puntuación del juego abriendo la versión desktop en el ordenador
que, casualmente, todavía no integra el juego en el propio chat sino que lo
abre directamente en el navegador.
Lo primero que hacemos es configurar BurpSuite y Firefox para obtener las distintas
peticiones que se realizan en función de los distintos escenarios del juego.
Ahora ya estamos listos para interceptar los paquetes
y observar cómo se realizan las peticiones, así que nos ponemos a jugar hasta
que nos eliminan. Tras un breve periodo de tiempo, vemos como van llegando
distintas peticiones a Burp, tanto del propio dominio que estamos analizando
como de otros. Por lo tanto, eliminamos las peticiones que no nos interesan,
quedándonos únicamente con aquellas que nos pueden ser de interés:
Tal y como vemos en la captura, la URL más interesante es
aquella relacionada con la asignación de puntuación: setScore. Adicionalmente, observamos también que la primera
petición se realiza para obtener el código JavaScript que ejecutará las
distintas funciones del juego, por lo que si buscamos la función que realiza el
setScore podremos entender cómo se
realiza la asignación de puntos:
Se realiza un post a la API setScore y se le pasan como parámetros data y score. Si seguimos
buscando de donde se obtienen los datos llegamos a la función main:
Dichos datos se obtienen de la URL del juego, la cual
contiene una cadena codificada en Base64 que contiene algunos parámetros como
el identificador del usuario, su nombre, el nombre del juego, el identificador
del chat, entre otros. Esta cadena varía en función del juego y puntuación
obtenida en la partida anterior.
Si ahora nos
centramos en el parámetro score,
podemos ver que este varía en función de las monedas obtenidas durante el
juego. No obstante, si nos fijamos en BurpSuite, observamos que el parámetro se
pasa sin ningún identificador que compruebe la autenticidad del valor obtenido
en el juego.
De esta forma, para obtener la puntuación que queramos únicamente
deberemos editar el parámetro score
en el cuerpo del mensaje. Para ello, mandamos la petición al repeater de BurpSuite
y editamos dicho valor:
Si todo ha ido bien, obtenemos la siguiente respuesta:
Y si nos fijamos en el chat…
Objetivo conseguido! Ahora sí somos los piratas del Corsair
;)
No hay comentarios:
Publicar un comentario