Una vez pirateé uno de los servidores de telegramas. No es que fuera algo interesante, y las vulnerabilidades en sí mismas son estándar. El hecho de que los telegramas se relacionen con la seguridad y por qué a lo largo de los años nadie ha explotado las vulnerabilidades es bastante sorprendente. ¡Pero el que no hace nada no se equivoca!

En mayo de 2017,
Kyprizel llamó la atención sobre el hecho de que Telegram Desktop puede cargar archivos ZIP en su servidor
tdesktop.com . Como resultó más tarde, no solo ZIP, sino que en el interior hay información sobre el bloqueo de la aplicación, para que el desarrollador pueda estudiar en qué circunstancias se produjo el bloqueo. Además, el desarrollador obtiene acceso a ellos a través de la interfaz web, a juzgar por el formulario de autenticación. Agregué el host a las notas y lo olvidé con seguridad.

Me acordé de él después de aproximadamente un año cuando se discutieron los próximos estudios en una conversación. En ese momento, el archivo raíz era error_log, en el que, como habrás adivinado, se escribieron errores. Como mínimo, había rutas de archivos completas, pero además de eso, el error favorito es "Tiene un error en su sintaxis SQL". Pero todos somos flojos, y en la recompensa de errores generalmente trato de no participar, por lo que todo permanece como está.

Pasó otro año, fui invitado a hablar en la conferencia
#PartyHack en Kazan. Y cuando no tienes el material para hablar, miras las notas. ¿Qué tenemos ahí? Anfitrión sospechoso en Telegram.
Como el servidor usaba PHP, como lo demuestra crash.php, decidí revisar un poco los archivos con esta extensión, luego encontré info.php, donde estaban los contenidos de la función phpinfo (). Lo primero que noté fue usar el servidor web Apache. ¿Cómo es eso? ¡Todo el telegrama es nginx, y aquí está Apache! ¿Y quién usa apache en 2019?

¿Qué se te viene a la mente cuando escuchas Apache? Recuerdo de inmediato sobre mod_status, que está construido con él de forma predeterminada. Este módulo genera una página con el estado actual del servidor, sobre los recursos del sistema, las solicitudes del servidor y la velocidad de su procesamiento. La mayoría de las veces, la ruta es / server-status, rara vez solo / status. Para comprender cuán popular es este error administrativo, solo recuerde que estuvo colgado en el sitio web apache.org durante muchos años
Durante muchos años he estado recopilando rutas a archivos y directorios potencialmente peligrosos en el proyecto fuzz.txt , por lo que el estado del servidor estaba naturalmente allí.En general, es notable en el estado del servidor que también muestra las direcciones IP de los clientes que envían solicitudes al servidor. Pero en este caso, todas las solicitudes fueron de 127.0.0.1 al dominio virtual preston-desktop.com. Nginx en el frente simplemente envió todas las solicitudes al apache local, por lo que no se reveló la información del usuario. Sin embargo, valió la pena poner el estado del servidor para monitorear, aquí hay un
pequeño script creado en la rodilla que coloca filas únicas en la base de datos sqlite. Durante un corto período de tiempo, se recopilaron muchos enlaces únicos, pero básicamente se trataba de solicitudes de actualizaciones (indicando la versión), y casi no hubo descargas. Después de un rato vi al administrador.

A pesar del hecho de que tenemos una longitud de línea limitada, se puede ver en los registros que el administrador ocasionalmente descarga los registros de otoño para su posterior análisis, y los divertidos parámetros __login y __token se pasan allí. Y las solicitudes POST en la captura de pantalla son mías.
Mirando la fuente, puedes notar dos métodos interesantes.
El primero es
query_report , que tiene opciones adicionales de apiid, versión, dmp y plataforma. Devuelve si se necesitan más registros sobre el bloqueo de la aplicación o si la versión ya es nueva y se conocen errores. El mecanismo fue creado para no obtener demasiado, sino para corregir solo lo real.

El segundo es el
informe en sí. Ya sin parámetros adicionales. Si una palabra ha vuelto a la solicitud anterior que indica la necesidad de enviar un volcado, se envía el archivo.

Allí puede ver que los datos se envían usando multiparte, donde el nombre del archivo es report.telegramcrash y su aplicación de tipo de contenido / flujo de octetos.

Por lo tanto, podría intentar cargar sus propios archivos y probar las vulnerabilidades asociadas con el desempaquetado de ZIP y otras piezas de carga.

Y trataría de enviar una carga diferente para encontrar al menos algún tipo de vulnerabilidad, si no fuera por un truco. Si sustituimos los nombres de parámetros conocidos de otra solicitud por el método de informe, cuyos valores válidos tomamos del estado del servidor, podemos intentar usar un ataque secreto de todos los piratas informáticos.
Usando el poder del megazord (comilla simple) en el parámetro de la plataforma, fue posible observar el comportamiento anómalo del recurso.

Hay una comilla, un error, no hay comillas, todo está bien. Para verificar la validez, puede escribir alguna expresión lógica, por ejemplo platform = mac 'AND' a '=' a. La respuesta es Listo, como con una carga de archivos exitosa.
Bueno, no es de extrañar que se les ocurrió la automatización, por lo que estoy desacoplando sqlmap, que ya se ha vuelto polvoriento por la inacción. Preguntas anticipadas: todo lo demás estaba bien configurado, el usuario en el DBMS no tiene privilegios.

Enviado a security@telegram.org, un poco más tarde recibí la codiciada carta sobre el premio de $ 30,000.
Es broma, $ 2000 por sqli y $ 500 por phpinfo y estado del servidor, que también es bueno. Y los lobos están a salvo y las ovejas están llenas, o viceversa.

No pirateé usuarios (su correspondencia es segura), no pude desarrollar el ataque aún más, un servidor con volcados de usuarios aleatorios (es decir, volcados sin información sobre el identificador en telegrama, teléfono, mensajes y chats) es un valor dudoso. En teoría, sería posible bombear accidentes y estudiarlos y explotarlos usted mismo. Habiendo aprendido cómo se caen los telegramas, fue posible quitárselos a la víctima y luego estudiar todo lo que se puede extraer de los registros de caídas, si es que se pueden descargar a través de esta inyección.
Único
original .