
Dies ist eine absichtlich verwundbare Smart-Contract-Truffle-Bereitstellung, die es Personen, die sich für Smart-Contract-Sicherheit interessieren, ermöglichen soll, eine Vielzahl von Schwachstellen in einer sicheren Umgebung auszunutzen.
Versuche dein Glück (oder deine Fähigkeiten) bei den verschiedenen Spielen im Casino, um fabelhafte Token und Preise zu gewinnen!
Dies ist in Entwicklung, daher gibt es im Moment vielleicht eine enttäuschend geringe Anzahl an Spielen, aber es werden noch mehr folgen und in der Zwischenzeit gibt es genug zu exploiten.
Installiere die Abhängigkeiten
sudo apt install npmsudo npm install -g truffle ganache-cliFühre ./start_challenge.sh aus, um testrpc zu starten, das Casino in deinem lokalen Testnetz zu deployen und die anderen Spieler zu simulieren.
Sieh dir den Code im Verzeichnis contracts/ an, um Schwachstellen zu finden.
Erstelle Proof-of-Concept-Skripte, um so viele CasinoTokens wie möglich zu erhalten! (Wenn du feststeckst, wirf einen Blick auf die Skripte der simulierten Benutzer im Verzeichnis exec/simuilated-users/, um eine Vorstellung davon zu bekommen, wie du mit den Contracts interagieren kannst.)
GOATlib/GOATConfig.js verwenden und für alle deine Aufrufe GOATConfig.accounts.attacker nutzen. Ich weiß, dass du Zugriff auf die tatsächlichen Owner-Konten und die anderen Spieler hast, da alles auf testrpc läuft, und ich bin nicht beeindruckt von deinem Skript, das die Konten durchläuft und transfer aufruft.GOATlib/: Bibliothek mit Code, der von den verschiedenen JavaScript-Dateien verwendet wird.build/: Das Verzeichnis, das Truffle erstellt, wenn es das Projekt kompiliert. Es enthält Informationen zu allen Contracts im Projekt, einschließlich des kompilierten Bytecodes und der Adressen der deployed Contracts.contracts/: Der Smart-Contract-Code.exec/simulated-users/: Skripte, die die simulierten Spieler steuern, die die verschiedenen Spiele spielen.exec/examples: Beispielskripte, auf die du beim Erstellen deiner Exploits zurückgreifen kannst.migrations/: Skripte, die von Truffle für das Deployment ausgeführt werden. Sie werden in alphabetischer Reihenfolge ausgeführt und können Einblicke darin geben, wie die Contracts initialisiert werden und wie sie zusammenpassen.Alle Spiele im GOATCasino verwenden einen ERC20-konformen Token, der in der Datei CasinoToken.sol definiert ist.
Der CasinoToken verwendet einige weit verbreitete Zeppelin-Contracts, um einen Großteil der standardmäßigen Funktionalitäten eines Tokens zu implementieren.
Du kannst den in CasinoExchange.sol definierten Contract verwenden, um CasinoTokens gegen Ether zu kaufen und zu verkaufen.
Die Datei Faucet.sol definiert einen Contract, der einmal pro Benutzer verwendet werden kann, um eine kostenlose Menge an CasinoTokens zu erhalten, um die Spiele auszuprobieren.
Der Vault.sol-Contract hält eine Reserve an Geldern für den Owner bereit. Gleiche Anteile der Gelder des Vaults sind durch separate Zugriffskontrollmethoden geschützt, um die Gelder besser zu schützen, falls eine Methode als unzureichend erachtet wird.
Schließlich ist das einzige Spiel im Casino derzeit die Lotterie.
Benutzer können Tickets mit einer Nummer von 0 bis 255 kaufen.
Jede Minute kann ein Benutzer die Funktion checkWin auslösen, um die Gewinnerticketnummer zu erzeugen, den Gewinner mit dem Preisgeld zu belohnen (abzüglich des Hausanteils) und eine neue Runde zu starten, indem die gekauften Tickets gelöscht werden.
Wenn niemand das Gewinnerticket gekauft hat, läuft die Runde eine weitere Minute mit Kaufmöglichkeit weiter, bevor ein neues Gewinnerticket gewählt werden kann.