Cómo hackear Trivia Crack con Trivia Cracker

Cómo hackear Trivia Crack con Trivia Cracker

POR JOE LEVY

Durante la temporada navideña, comencé a notar que una nueva aplicación, Grieta de trivia , se estaba volviendo popular entre mis amigos. Para aquellos que no lo sepan, Trivia Crack es un nuevo juego para Android, iPhone y Facebook . La premisa del juego es simple y muy similar a otra aplicación popular del año pasado, QuizUp. Esencialmente, respondes preguntas de trivia de varias categorías, compitiendo contra tus amigos por los derechos de fanfarronear. A pesar de la simplicidad (o tal vez debido a ella), Trivia Crack se ha vuelto muy popular últimamente, acumulando 5,3 millones me gusta en Facebook y convertirse en la mejor aplicación gratuita en la tienda Google Play (Android).

Uno pensaría que los desarrolladores de un juego tan pulido y exitoso podrían haberse tomado el tiempo para implementarlo de una manera que sea segura contra las trampas, pero resulta que escribir un programa para hacer trampa en Trivia Crack es bastante simple. En el transcurso de un fin de semana, pude escribir y lanzar una extensión de Chrome, Trivia Cracker , Eso me convirtió de un mediocre en el mejor de los jugadores de Trivia Crack a un semidiós aparentemente genio. Puedes ver Trivia Cracker en acción a continuación:

Entonces, ¿qué hay de malo en la implementación de Trivia Crack que me permitió construir tan fácilmente una herramienta que permite que cualquiera haga trampa? En resumen, cuando el cliente de Trivia Crack solicita al servidor de Trivia Crack la siguiente pregunta para hacerle al usuario, el servidor responde no solo con la pregunta y las posibles respuestas, sino que también envía cuál es la respuesta correcta. Los detalles de la vulnerabilidad, cómo la encontré y cómo construí una extensión de Chrome para aprovecharla se encuentran a continuación.

1) Encontrar la vulnerabilidad

Después de perder ante mis amigos en Trivia Crack demasiadas veces, decidí que quería ver si podía ganar a mi manera especial. Si bien no soy tan bueno en trivialidades aleatorias, soy bastante bueno en ingeniería inversa. Sospechaba que podría aprovechar el envío de mis propias solicitudes a los servidores de Trivia Crack, o usar algunos datos en las respuestas de los servidores de Trivia Crack, para obtener una ventaja en el juego. Así que comencé investigando qué tipo de datos pasan de un lado a otro el cliente y el servidor de Trivia Crack.

Para inspeccionar estos datos, jugué Trivia Crack en mi navegador en Facebook , mientras graba e inspecciona las solicitudes y respuestas enviadas entre el cliente y el servidor de Trivia Crack mediante una herramienta que había creado anteriormente llamada Gargl . Sí, sé que podría haber usado Fiddler o las herramientas de desarrollo de Chrome para hacer lo mismo. Decidí usar Gargl en su lugar porque, además de permitirle ver las solicitudes / respuestas del cliente / servidor, Gargl también le permite modificar y parametrizar estas solicitudes, y luego genera automáticamente módulos en un lenguaje de programación de su elección para que pueda realizar estas mismas solicitudes. sin escribir una línea de código. Más sobre eso más tarde.

De todos modos, después de contar Gargl para empezar a grabar e ir a Trivia Crack en Facebook en mi navegador, el primer paso fue averiguar cuáles de las muchas solicitudes enviadas en esta página de Facebook estaban relacionadas con Trivia Crack, en comparación con el propio Facebook. La inspección del HTML en la página mostró que el contenido de Trivia Crack está incrustado en Facebook a través de un iframe. El elemento justo encima de este iframe era un formulario destinado a publicar en una URL peculiar: https://preguntados.com/game .

Grieta de trivia

Mi conocimiento limitado de español me recordó que 'pregunta' significa 'pregunta', lo que parece estar relacionado con trivia, por lo que sospeché que este era el dominio donde se aloja Trivia Crack. Yendo al https://preguntados.com/game URL confirmó esa sospecha:

Grieta de trivia

El siguiente paso fue simplemente comenzar a jugar Trivia Crack, y mientras jugaba, mira las solicitudes que Gargl encuentra que la página está haciendo a cualquier URL que contenga 'preguntados.com':

Grieta de trivia

Mientras respondía a las preguntas de Trivia Crack, noté que parecía emitirse una nueva solicitud para cada pregunta. En realidad, la solicitud pareció emitirse incluso antes de que 'hiciera girar la ruleta' en Trivia Crack para determinar en qué categoría sería la siguiente pregunta:

Grieta de trivia

Esto me hizo pensar que tal vez las preguntas estaban predeterminadas, y el 'rumbo aleatorio' de hecho estaba predeterminado para aterrizar en una categoría determinada (y hacer una pregunta determinada) en función de la respuesta del servidor a la 'api.preguntados.com/api / users // games / ”solicitud que se envió antes de hacer clic en el botón“ Girar ”. Para mí, esto significaba que probablemente podría alertar al usuario de la pregunta que están a punto de hacerse con anticipación, para que tengan todo el tiempo que quisieran para pensar en ello o buscarlo. Esto sería una ventaja porque en Trivia Crack, solo tiene 30 segundos para responder una pregunta una vez que se muestra la pregunta, para evitar que el usuario busque respuestas. Además, en algunos modos de juego no es solo la cantidad de preguntas que respondes correctamente, sino también la cantidad de tiempo que tardas en responder, lo que determina si ganas. Si pudiera mostrarle al usuario la pregunta con anticipación, obviamente podría responderla mucho más rápidamente una vez que Trivia Crack muestre la pregunta.

Así que pensé que tenía una pista y profundicé en los detalles de esta solicitud. Resulta que esta solicitud en realidad proporcionó una 'ventaja para los tramposos' mucho mayor de lo que pensaba ...

2) La vulnerabilidad en detalle

Utilizando Gargl para ver la solicitud / respuesta “api.preguntados.com/api/users//games/” en detalle, pude confirmar que sí proporciona la pregunta que se debe hacer, así como las posibles respuestas, en el respuesta. Sin embargo, me sorprendió descubrir que elLa respuesta correcta a la pregunta también está incluida en la respuesta.!

Grieta de trivia

Como puede ver arriba, la respuesta a esta solicitud contiene la pregunta, las posibles respuestas y qué índice en la matriz de posibles respuestas es la respuesta correcta. Entonces, si estos datos se refieren a la siguiente pregunta, después de hacer clic en 'Girar', se me debería preguntar '¿Cuál de los siguientes países africanos no tiene costa?' y la respuesta correcta debe ser la respuesta [3] de arriba, que es 'Todos lo hacen'. Hacer clic en 'Girar' demostró que esta hipótesis era correcta:

Grieta de trivia

Grieta de trivia

También utilicé mi navegador para encontrar que las solicitudes GET repetidas a “api.preguntados.com/api/users//games/” siempre dan la misma respuesta, hasta que responda la pregunta que proporciona. Esto significa que podría solicitar esta URL desde mi propia herramienta y seguir recibiendo la misma pregunta que recibiría el cliente de Trivia Crack en Facebook.

Una respuesta que contiene la respuesta correcta, cuando el objetivo es que el usuario debe determinar la respuesta por sí mismo, está en conflicto directo con el ' Programación defensiva 'Práctica de la programación, en particular el' nunca confíes en el cliente ”Principio de programación web. Dado que el servidor no tiene control sobre cómo actúa el cliente, no puede asumir que el cliente no actuará de forma maliciosa, por lo que debe protegerse a sí mismo. La forma correcta de implementar el comportamiento de verificación de respuestas es hacerlo en el lado del servidor. No envíe la respuesta correcta al cliente en ningún momento, y en su lugar, haga que el cliente envíe la respuesta del usuario al servidor, donde el servidor luego verificará que sea correcta y acreditará al usuario si es correcta (y, por supuesto, solo permitirá una respuesta a enviar por usuario por pregunta).

Sin embargo, Trivia Crack no hizo esto y, en cambio, confía en el cliente. Ahora solo era cuestión de crear un cliente malicioso para aprovechar el hecho de que se envía la respuesta correcta en la respuesta. Idealmente, uno que sea fácil de instalar y usar para usuarios no técnicos. Mmm ... ¿qué tal una extensión de Chrome que solo agrega un botón al juego Trivia Crack, cuando se juega? en Facebook , que cuando se hace clic responde a la pregunta actual correctamente de forma automática?

3) Aprovechando la vulnerabilidad

Como mencioné anteriormente, Gargl le permite tomar las solicitudes que tenía, registrarlas, modificarlas y parametrizarlas según sea necesario, y luego generar módulos automáticamente en un lenguaje de programación de su elección para realizar estas mismas solicitudes. No voy a entrar en los detalles de ese proceso, ya que puede ver uno de mis Publicaciones de blog de Gargl para encontrar esa información, pero básicamente generé un Archivo de plantilla Gargl para Trivia Crack Varias solicitudes de API, utilizando el Extensión Gargl Chrome , y luego usó un generador Gargl para convertir ese archivo de plantilla en un Biblioteca JavaScript de Trivia Crack . Usar Gargl para esto me permitió crear una biblioteca de JavaScript que habla con los servidores de Trivia Crack, sin escribir una línea de código para hacerlo, y también tener un archivo de plantilla para el futuro en caso de que quiera hacer lo mismo más adelante para otro. lenguaje de programación.

Una vez que tuve esta biblioteca de JavaScript de Trivia Crack, fue una simple cuestión de crear una extensión de Chrome en JavaScript que se ejecute en el dominio cargado en el iframe de la página del juego de Trivia Crack de Facebook (preguntados.com), agrega un botón al HTML para el juego , y cuando se hace clic en ese botón solicita la URL “api.preguntados.com/api/users//games/”, analiza la respuesta para la respuesta correcta y luego hace clic en el botón de respuesta en la página que representa la respuesta correcta.

Grieta de trivia

Y así, Trivia Cracker ¡nació! ¿Tienes curiosidad por conocer los detalles exactos de cómo funciona Trivia Cracker? Consulte el código fuente en GitHub .

Esta pieza apareció originalmente en Blog de Joe Levy Y vuelto a publicar con permiso.

Imagen a través de Trivia Crack