Press "Enter" to skip to content

Hacking Lotto 😈 – Mein Fazit nach einem Jahr LOTTO [Data Mining, Data Tampering]

Nachdem ich ein Jahr mit meinen Dauerscheinen keine einzige Lottoziehung verpassen konnte, wird es nun Zeit für eine Auswertung der Daten und ein Fazit. Wie viel kostet mich das Lottospielen effektiv? In diesem Beitrag zeige ich, wie mit Hilfe der Firefox-Entwicklerwerkzeugen eine Auswertung erstellt werden kann und wie Webseiten sich manipulieren lassen. Vielleicht lässt sich ja auch eine ganz typische Schwachstelle in Webanwendungen ausnutzen? 😉

Vorbereitung: Scripte im Browser ausführen – Firefox Developer Console

Für die Auswertung nutze ich die Entwicklerwerkzeuge des Firefox. Dasselbe geht sehr ähnlich auch im Chrome-Browser. Generell gäbe es verschiedene Wege eine solche Auswertung zu erstellen. Ein Python-Script könnte helfen, welches den Seiteninhalt herunterlädt und dann parst. Jedoch ist die aufgerufene Webseite nur als eingeloggter User zugänglich, daher müsste man auch den Login scripten. Eine Variante, die viele Möglichkeiten zur Automatisierung bietet, wäre es die Browser-API zu verwenden. Darüber ließe sich auch etwas mit Selenium basteln. Die einfachste Variante ist jedoch die nun gezeigte und zwar über die Entwicklerkonsole ein einfaches Script auszuführen. Diese Seitenleiste “Entwicklertools” lässt sich im Firefox mit der Taste F12 öffnen.

Firefox Entwicklerkonsole: Einfach Code einfügen, Enter drücken und das Script wird ausgeführt.

Zunächst wird ein Script programmiert, welches den Quelltext der Webseite ausliest und mir eine Auswertung generiert. Dieses Script wird dann auf der Webseite ausgeführt. Dafür muss zunächst die Seite geöffnet werden, in wessen Kontext das Script auch ausgeführt werden soll. Das ist in diesem Fall die Kontoübersicht (https://www.lotto-bw.de/konto/uebersicht). Hier wähle ich aus, dass ich alle meine Buchungen der letzten 365 Tage sehen möchte. Da jQuery von der Webseite bereits geladen wurde, können wir jQuery für die Programmierung in unserem Script direkt verwenden.

Das Script um eine Auswertung zu erstellen. Verfügbar unter: https://gist.github.com/JavanXD/8d921b7c1071d8b722922e2626c0cb86

Die Auswertung – nach 365 Tagen Lotto

Nun wird es nicht ganz so interessant, denn das große Los habe ich mit meinen 103 Spielscheinen in den letzten 365 Tagen nicht gezogen. Was ich durch die Auswertung wissen wollte war aber, wie viel ich effektiv im Jahr für Spielscheine ausgegeben hatte. Ein großer Lottogewinn war zwar nicht dabei, aber durch die vielen kleinen Gewinne war es im Durchschnitt dann doch nicht so teuer.

Screenshot der Entwicklerkonsole: Das Script hat diesen Output erzeugt.

Seiteninhalte manipulieren mit dem Inspector – wir hacken die Kontoübersicht

In der Webseite kann ich meine Kontoübersicht für die letzten 30 Tage, für die letzten 60 Tage etc. und für die letzten 365 Tage anzeigen lassen. Aber was ist, wenn ich meine Kontoübersicht von vor 2 Jahren einsehen möchte? Was ist mit dem Zeitraum seit meiner Anmeldung? Dafür bietet die Webseite keine Option. Mit den Entwickleroptionen können wir nun versuchen Werte clientseitig zu verändern. Dabei müssen wir darauf hoffen, dass im Backend unsauber gearbeitet wurde und keine weitere Validierung dieser Werte vorgenommen wird.

Firefox Inspector: Aus 365 Tage wurde 730 Tage.

Im Reiter Netzwerkübersicht werden alle Ajax-Aufrufe aufgelistet, die der Browser ausführt. Darunter ist auch der Aufruf, der dazu dient die Kontoübersicht zu laden. Nachdem der Wert durch den Inspector clientseitig verändert wurde, wird offenbar mit dem neuen Wert die Kontoübersicht abgerufen. Und siehe da, wir hatten Erfolg: Als Ergebnis erhalten wir die Kontobewegungen der letzten 730 Tage. Obwohl das Frontend uns nur eine begrenzte Auswahl anbietet, konnten wir dies umgehen. Backendseitig wurde dieser Aufruf, trotz manipuliertem Parameter, nicht blockiert.

Im Screenshot zu sehen: Blau markiert ist der manipulierte Wert für die Anzahl der Tage, für die Daten angezeigt werden soll.

Nachdem nun die Buchungsdaten der letzten 730 Tagen geladen wurden, konnte ich das Script erneut ausführen.

Effektiver Preis meiner Spielscheine in den letzten 730 Tagen.

Das sich über diese Art und Weise die Buchungen für beliebigen Zeitraum anzeigen lassen ist für sich keine Schwachstelle – wir verursachen damit keinen Schaden. Es ist jedoch ein hervorragendes Beispiel für häufige Schwachstellen, wie sie in Anwendungen vorkommen. Stellt man sich ein solches Szenario beispielsweise beim Hinzufügen eines Artikels in einen Einkaufskorb vor, wo der Preis einer Ware manipuliert wird, so könnte hier ein echter Schaden eintreten.

Abweichung meiner Stichprobe vom Erwartungswert

Weil es sich beim Lotto auch um Statistik handelt und wir einen Erwartungswert berechnen können sollten wir einen Vergleich mit dem Erwartungswert nicht vergessen. Der Erwartungswert gibt den durchschnittlichen Gewinn, bzw. Verlust, eines Spiels an. Durch die Stichprobe aus einem Jahr Lotto spielen kann dies nun verglichen werden.

Für ein LOTTO 6aus49 Spiel beträgt der Erwartete durchschnittliche Verlust 0,66€.

Meiner Auswertung nach hat mich ein Spielschein LOTTO 6aus49 1,44€ gekostet. Dieser Spielschein beinhaltete beide Ziehungen Mittwochs und Samstags. Das ergibt also einen tatsächlichen Verlust von 72cent pro Spiel. Die Abweichung aus meiner Stichprobe zum Erwartungswert beträgt knapp 9%.

Leave a Reply

Your email address will not be published. Required fields are marked *