02 Aug

Url Extender vs Shortener

Kurze Andekdote: Am 04.07. diesen Jahres bekam ich eine Spam SMS, die mir eine Gewinnchance auf Apple- und Samsunggeräte versprach. Dabei war ich zunächst sehr überrascht, denn ich hatte noch nie eine solche bekommen und ich kann mir auch nicht vorstellen, dass es zu den gewöhnlichen Mobilfunk-Preisen wirtschaftlich ist, so etwas zu tun. Die Nachricht hatte jedenfalls folgenden Inhalt (übersät mit Groß-/Kleinschreibungsfehlern und fehlenden Leerzeichen):

Lieber Mobilfunkkunde,Sie wurden unter500 Personen gezogen! Nutzen Sie Ihre 8h GratisChance auf Ihr S6 +AppleWatch! Klicken +eintragen: http://bit.ly/***

Interessant war dabei die Kurz-URL des Bitly-Dienstes: Für gewöhnlich werden solche URLs eingesetzt, um Zeichenlänge zu sparen, zudem kann damit aber auch das tatsächliche Ziel verschleiert werden. Dahinter verbirgt sich meist eine unseriöse Website mit Formularen, die die Eingabe persönlicher Daten erwarten oder ‚bösartiges Javascript‘, welches versucht, ein Exploit-Kit in der Form einer Flash-Applikation oder eines Java-Applet zu starten, welches dann versucht, bekannte Bugs auszunutzen um den Zielrechner zu übernehmen.

In diesem Fall jedoch führte der Link auf eine Seite, die lediglich nach Name, E-Mail-Adresse und Wohnort fragte, wohl um letztere zu verkaufen oder Spam-Mails zu verschicken. Die Website enthielt auch kein interessantes Javascript oder Plugin-Einbettungen. Wie jedoch zuletzt bekannt wurde, ist der Android-Browser und die zugehörige Webview-Komponente anfällig. Da ich selbst im Besitz eines Android Smartphones bin, rief ich die Kurz-URL auch nicht direkt auf dem Mobiltelefon auf, sondern öffnete sie im Firefox auf dem PC, gehärtet durch die Addons NoScript und Adblock, sowie aktivierter ClickToPlay-Einstellung.

Um diesem Problem zukünftig elegant aus dem Weg gehen zu können, entschied ich mich zur Implementierung eines kurzen Python-Scripts, welches mir die Arbeit des Kurz-URL-Auflösens abnehmen sollte. Dabei soll das Script einen HTTP-Get-Request auf das Ziel durchführen und im Response nach dem Status-Code „301 Moved Permanently“, „302 Found“ oder „303 See Other“ Ausschau zu halten. Entsprechend steht im Location-Header dann die neue URL, also der Redirect des Kurz-URL-Dienstes. Dieser Vorgang kann nun rekursiv mit der neuen URL fortgeführt werden, bis ein Status-Code ohne Redirect im Ergebnis steht.

Python bringt entsprechende Funktionalität bereits in Form des Moduls urllib mit. Die Funktion urlopen folgt dabei in der Standardeinstellung bereits automatisch den Redirects. Es kann jedoch ein eigener RedirectHandler implementiert und installiert werden, der nun nur noch die neue Zwischen-URL ausgeben muss, sich sonst aber äquivalent zum Default-Handler verhält. Das Script gibt bei Angabe der Kurz-URL (oder auch jeder anderen Art von Link) die Redirects bis zum entgültigen Ziel aus.

$ ./urlextender http://goo.gl/1ATFCB
http://goo.gl/1ATFCB
301 http://www.heise.de/

Das Script kann auch rekursiv auflösen:

$ ./urlextender.py http://bit.ly/1HgZsrn
http://bit.ly/1HgZsrn
301 http://goo.gl/1ATFCB
301 http://www.heise.de/

Das Script kann auf Github begutachtet werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.