Einmal habe ich mich in einen der Telegrammserver gehackt. Nicht, dass es etwas Interessantes gewesen wäre, und die Schwachstellen selbst sind Standard. Die Tatsache, dass sich Telegramme auf die Sicherheit beziehen und warum im Laufe der Jahre niemand Sicherheitslücken ausgenutzt hat, ist ziemlich überraschend. Aber wer nichts tut, irrt sich nicht!

Bereits im Mai 2017 machte
kyprizel darauf aufmerksam, dass der Telegramm-Desktop ZIP-Archive auf seinen Server
tdesktop.com hochladen kann. Wie sich später herausstellte, gibt es nicht nur ZIP, sondern auch Informationen zum Absturz der Anwendung, sodass der Entwickler untersuchen kann, unter welchen Umständen der Absturz aufgetreten ist. Darüber hinaus erhält der Entwickler über das Webinterface Zugriff auf diese, gemessen am Authentifizierungsformular. Ich habe den Host zu den Notizen hinzugefügt und sicher vergessen.

Ich erinnerte mich an ihn nach ungefähr einem Jahr, als bevorstehende Studien in einem Chat besprochen wurden. Zu diesem Zeitpunkt war die Stammdatei error_log, in das, wie Sie vielleicht vermutet haben, Fehler geschrieben wurden. Zumindest gab es vollständige Dateipfade, aber außerdem lautet der bevorzugte Fehler "Sie haben einen Fehler in Ihrer SQL-Syntax". Aber wir sind alle faul, und bei Bug Bounty versuche ich im Allgemeinen, nicht teilzunehmen, damit alles so bleibt, wie es ist.

Ein weiteres Jahr verging, ich wurde eingeladen, auf der
# PartyHack- Konferenz in Kasan zu sprechen. Und wenn Sie nicht das Material zum Sprechen haben, sehen Sie sich die Notizen an. Was haben wir dort? Verdächtiger Host im Telegramm.
Da PHP auf dem Server verwendet wurde, wie durch crash.php belegt, habe ich beschlossen, die Dateien mit dieser Erweiterung ein wenig zu sortieren, und bin dann auf info.php gestoßen, wo sich der Inhalt der Funktion phpinfo () befand. Das erste, was mir auffiel, war die Verwendung des Apache-Webservers. Wie so? Das ganze Telegramm ist Nginx und hier ist Apache! Und wer nutzt Apache im Jahr 2019?

Was fällt Ihnen zuerst ein, wenn Sie Apache hören? Ich erinnere mich sofort an mod_status, der standardmäßig damit erstellt wird. Dieses Modul generiert eine Seite mit dem aktuellen Status des Servers, über Systemressourcen, Serveranforderungen und die Geschwindigkeit ihrer Verarbeitung. Meistens lautet der Pfad dazu / server-status, selten nur / status. Um zu verstehen, wie beliebt dieser Verwaltungsfehler ist, denken Sie daran, dass er viele Jahre lang auf der Website apache.org hing
Seit vielen Jahren sammle ich im Projekt fuzz.txt Pfade zu potenziell gefährlichen Dateien und Verzeichnissen, sodass der Serverstatus natürlich vorhanden war.Im Allgemeinen ist es im Serverstatus bemerkenswert, dass auch die IP-Adressen von Clients angezeigt werden, die Anforderungen an den Server senden. In diesem Fall gingen alle Anforderungen von 127.0.0.1 an die virtuelle Domäne preston-desktop.com. Nginx an der Vorderseite hat nur alle Anfragen an den lokalen Apache weitergeleitet, sodass keine Benutzerinformationen offengelegt wurden. Es hat sich jedoch gelohnt, den Serverstatus zu überwachen. Hier ist ein
kleines Skript auf dem Knie, das eindeutige Zeilen in die SQLite-Datenbank einfügt. Für einen kurzen Zeitraum wurden viele eindeutige Links gesammelt, aber im Grunde waren dies Anfragen nach Updates (unter Angabe der Version), und es gab fast keine Downloads. Nach einer Weile sah ich den Administrator.

Trotz der Tatsache, dass wir eine begrenzte Zeilenlänge haben, ist aus den Protokollen ersichtlich, dass der Administrator gelegentlich die Fallprotokolle zur weiteren Analyse herunterlädt und die lustigen Parameter __login und __token dort übergeben werden. Und die POST-Anfragen im Screenshot sind meine.
Wenn Sie sich die Quelle ansehen, können Sie zwei interessante Methoden feststellen.
Der erste ist
query_report , der zusätzliche Optionen für API, Version, DMP und Plattform enthält. Es wird zurückgegeben, ob weitere Protokolle zum Absturz der Anwendung erforderlich sind oder ob die Version bereits aktuell ist und Fehler bekannt sind. Der Mechanismus wurde geschaffen, um nicht zu viel zu bekommen, sondern nur das Tatsächliche zu korrigieren.

Der zweite ist der
Bericht selbst. Bereits ohne zusätzliche Parameter. Wenn ein Wort zur vorherigen Anforderung zurückgekehrt ist, das angibt, dass ein Speicherauszug gesendet werden muss, wird die Datei gesendet.

Dort können Sie sehen, dass die Daten mehrteilig gesendet werden, wobei der Dateiname report.telegramcrash und dessen Anwendung / Oktett-Stream vom Inhaltstyp lautet.

Sie können also versuchen, Ihre eigenen Dateien hochzuladen und die Schwachstellen zu testen, die mit dem Entpacken von ZIP und anderen Upload-Teilen verbunden sind.

Und ich würde weiter versuchen, eine andere Last zu senden, um zumindest eine Art von Sicherheitslücke zu finden, wenn nicht für einen Trick. Wenn wir die bekannten Parameternamen aus einer anderen Anforderung, deren gültige Werte aus dem Serverstatus übernommen wurden, in die Berichtsmethode einsetzen, können wir versuchen, einen geheimen Angriff aller Web-Hacker zu verwenden.
Mithilfe der Leistung des Megazords (einfaches Anführungszeichen) im Plattformparameter konnte das anomale Verhalten der Ressource beobachtet werden.

Es gibt ein Anführungszeichen - ein Fehler, kein Anführungszeichen - alles ist gut. Um die Gültigkeit zu überprüfen, können Sie einen logischen Ausdruck schreiben, z. B. platform = mac 'AND' a '=' a. Die Antwort lautet Fertig, wie bei einem erfolgreichen Datei-Upload.
Kein Wunder, dass sie sich die Automatisierung ausgedacht haben, also entkopple ich sqlmap, das durch Untätigkeit bereits staubig geworden ist. Vorwegnahme von Fragen - alles andere war gut konfiguriert, der Benutzer im DBMS ist nicht privilegiert.

Wenig später erhielt ich den begehrten Brief über die Vergabe von 30.000 US-Dollar an security@telegram.org.
Nur ein Scherz, $ 2000 für sqli und $ 500 für phpinfo und Server-Status, was auch gut ist. Und die Wölfe sind in Sicherheit und die Schafe sind voll oder umgekehrt.

Ich habe keine Benutzer gehackt (Ihre Korrespondenz ist sicher), ich konnte den Angriff nicht weiterentwickeln. Ein Server mit Dumps von zufälligen Benutzern (nämlich Absturz-Dumps ohne Informationen über die Kennung in Telegramm, Telefon, Nachrichten und Chats) ist ein zweifelhafter Wert. Theoretisch wäre es möglich, Abstürze zu pumpen und sie selbst zu untersuchen und auszunutzen. Nachdem wir gelernt hatten, wie Telegramme abgelegt werden, war es möglich, sie vom Opfer fallen zu lassen und dann alles zu untersuchen, was aus den Fallprotokollen herausgedrückt werden kann, wenn sie überhaupt durch diese Injektion heruntergeladen werden konnten.
Einzigartiges
Original .