Solide Sicherheit

Ich bin neu in der Sicherheit von ICO und Smart Contracts. Versuchen, Fehler in verifizierten Verträgen zu finden. Ich glaube, ich habe einige Probleme in 0x42dB5Bfe8828f12F164586AF8A992B3a7B038164 gefunden, aber ich weiß nicht, wie man sich zurückzieht. Muss ich eine Transaktion selbst erstellen?

Hi. Es ist nicht ganz klar, was Sie fragen. Fragen Sie uns, wie wir die im Vertrag gehaltenen Gelder abziehen können ...?
Wie sind Sie auf diesen und ähnliche Verträge gestoßen?

Antworten (1)

HaHa - sehr hinterhältig.

***Warnung***

An alle, die versucht sind, an diesem Vertrag herumzuspielen – dh den offensichtlichen Fehler auszunutzen: Sie werden wahrscheinlich Ihren Ether verlieren.

Erklärung folgt.

Es sieht so aus, als gäbe es eine ziemlich verlockende Schwachstelle in der withdrawal()Funktion: Wenn Sie der Funktion mehr als LimitWei senden, sendet sie Ihnen den gesamten Saldo des Vertrags - den Betrag, den Sie gesendet haben, plus die bereits vorhandenen 0,36 Eth. Sofortiger Gewinn!

Allerdings gibt es diese unschuldig aussehende, aber dennoch eigentümliche Funktion in delegatecalleinem logEvent()anderen Vertrag. Um es kurz zu machen, es wird kein Ereignis protokolliert. Es ändert tatsächlich heimlich den Wert der adrSpeichervariablen, sodass sie nicht mehr auf msg.sender. Das Vertragsguthaben wird also beim adr.send(this.balance)Anruf nicht an Sie zurückgesendet, es wird woanders hingeschickt, da adres nicht mehr gleich ist msg.sender.

Es ist ein bisschen verschleiert, aber es sieht so aus, als würde der delegierte Aufruf der email.logEvent()Vertragsfunktion dazu führen adr, dass auf die eigene Adresse des Vertrags gesetzt wird: dh es sendet den gesamten Ether (einschließlich des von Ihnen gesendeten) an sich selbst. Nur der Vertragsinhaber (0x46Feeb381e90f7e30635B4F33CE3F6fA8EA6ed9b) kann die Eth tatsächlich zurückziehen.

Die erste Zeile in Ihrer Antwort impliziert, dass der Typ, der die Frage gepostet hat, versucht, einen Betrug zu machen. Wollten Sie das wirklich andeuten?
Ah ich sehe. Sehr gut :-) +1
Ich bin kein Betrüger, ich recherchiere nur die Verträge. Vielen Dank für das Bewusstsein!
@Mike N. In diesem Fall willkommen und fühlen Sie sich frei, die Antwort als akzeptiert zu markieren. Hoffentlich habe ich ausreichend erklärt, warum es keine gute Idee ist, irgendetwas mit diesem Vertrag zu tun zu haben, wenn Sie ihn nicht besitzen.
Sicher! Wie kann ich es akzeptieren? Übrigens habe ich mir andere Verträge angesehen und mehrere ähnliche gefunden! 0x62d5c4a317b93085697cfb1c775be4398df0678c und 0x477D1EE2F953A2F85dbEcBcB371c2613809eA452 . Wahrscheinlich sind es noch viel mehr. Können wir sie irgendwie blockieren?
Was tun, wenn jemand meine Frage beantwortet tl;dr - klicken Sie auf das Häkchen neben der Antwort, die Sie akzeptieren möchten.
"Können wir sie irgendwie blockieren?" - Das ist die Blockchain. Trotz des Namens kann nichts blockiert werden. Es ist eine Funktion. Wenn Leute Eth verlieren, wenn sie versuchen, die Hacker zu hacken, habe ich nicht wirklich Verständnis dafür.
Entschuldigung für die zusätzlichen Fragen. Ich habe den Vertragscode lokal bereitgestellt. Aber da ich den Quellcode des anderen Vertrages nicht habe, der aufgerufen wird. Wie kann ich diesen Vertrag im Testnetzwerk bereitstellen? Und diese beiden anderen Verträge scheinen etwas anders zu sein. Ich würde sie auch gerne testen... Debuggen Sie die Transaktionen in Remix?
Der Tx, der den emailVertrag erstellt hat, ist hier . Kopieren Sie einfach den Bytecode und fügen Sie ihn in das von Ihnen verwendete Bereitstellungstool ein. Sie müssen dann die Adresse in dem anderen Vertrag ändern, um auf die neue Adresse von zu verweisen email. Ich verwende einen von mir geschriebenen Decompiler und kritzele viel auf Papierfetzen, um Dinge zu analysieren. Remix ist gut, wenn es einen existierenden Tx zu verfolgen gibt, aber in diesem Fall war das nicht der Fall.
Hallo, anscheinend hat jemand den Rücktritt von beiden oben genannten Verträgen durchgeführt. Könnte jemand erklären, wie es gemacht wurde?
Es sieht so aus, als würde jemand nur scherzen )) Noch einer ) 0x47000dE9Ac92E29d4Fee617732fFEedc306Bd10E ... Wie kann ich also die Möglichkeit überprüfen, den Äther zu nehmen? Wie rufen Sie diese Funktion aus einem anderen Vertrag auf?
@ Mike N. Der Autor hat den Vertrag selbst getötet. Ihre Follow-ups sollten besser als neue Fragen gestellt werden, als hier begraben zu werden.
Ok! Diskussion hierher verschoben - ethereum.stackexchange.com/questions/34708/…