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%.

Javan is a passionate security professional on application level, with a great full stack background in modern web and mobile technologies.

Leave a Reply

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