Maison > Article > Opération et maintenance > Comment reproduire la vulnérabilité RCE d'accès non autorisé à l'interface API XXL-JOB
XXL-JOB est une plate-forme légère de planification de tâches distribuées. Ses principaux objectifs de conception sont un développement rapide, un apprentissage facile, une légèreté et une expansion facile. Le code source est désormais ouvert et connecté aux gammes de produits en ligne de nombreuses entreprises, prêt à être utilisé immédiatement.
Le problème principal de cette vulnérabilité est le mode GLUE. XXL-JOB prend en charge les tâches multi-langues et script via le « mode GLUE ». Les fonctionnalités des tâches de ce mode sont les suivantes :
Quantity Support multi-langues : prend en charge Java, Shell, Python, NodeJS, PHP, PowerShell... et d'autres types.
Quantity Web IDE : les tâches sont conservées dans le centre de répartition sous forme de code source et prennent en charge le développement et la maintenance en ligne via Web IDE.
Quantity Validation dynamique : le code de tâche développé par l'utilisateur en ligne via l'IDE Web est poussé vers l'exécuteur à distance et chargé en temps réel pour exécution.
Comme le montre l'image ci-dessus, si le code d'attaque est écrit dans le code de tâche du mode GLUE et transmis à l'exécuteur pour exécution, il peut provoquer des attaques à distance.
【Description de la vulnérabilité】
L'interface API Restful ou l'interface RPC de XXL-JOB n'est pas configurée avec des mesures d'authentification. Des attaquants non autorisés peuvent créer des requêtes malveillantes et provoquer l'exécution de commandes à distance
【Évaluation de la vulnérabilité】
Risque élevé.
【Version concernée】
XXL-JOB <= 2.2.0
Idée générale : téléchargement du code source->Dépendances d'installation de Maven->Configurer le déploiement "Scheduling Center" »->Configurer et déployer le « projet exécuteur »->Déploiement complet
Environnement de développement local : Java8+Maven3.6
1 Code source de téléchargement Github
Adresse : https://github.com/xuxueli/xxl. -job/releases/tag/v2.2.0
2. Maven télécharge les dépendances requises
Idea ouvre le code source décompressé et installe automatiquement les dépendances pertinentes dans le pom, qui peut également être utilisé dans le terminal. La commande maven télécharge les dépendances requises
3. Configuration de la base de données
L'emplacement du script SQL d'initialisation de la base de données est :
/xxl-job/doc/db/tables_xxl_job.sql
Parce que MySQL n'est pas installé localement. , Par conséquent, utilisez docker pour installer.
a) docker pull mysql:5.7
b) sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
De cette façon, nous démarrons le conteneur mysql, le compte est root , le mot de passe est root Utilisez navicat pour vous connecter à la base de données pour 123456
Vous pouvez cliquer sur le coin inférieur gauche pour terminer le test de connexion. Cliquez avec le bouton droit sur la base de données importée, sélectionnez Exécuter le fichier SQL et cliquez sur Démarrer pour terminer l'importation de la base de données.
4. Configurer et déployer le "Scheduling Center"
Projet de centre de planification : xxl-job-admin
Fonction : Unifier la gestion des tâches de planification sur la plateforme de planification des tâches, être responsable du déclenchement de l'exécution de la planification , et fournir une plateforme de gestion des tâches. Vous pouvez modifier la configuration de la base de données dans application.properties en fonction de la situation réelle
Exécuter XxlJobAdminApplication pour démarrer le centre de répartition
Nous utilisons le Springboot recommandé pour gérer l'exécuteur
Affichez le fichier de configuration et recherchez xxl. Paramètres job.executor.logpath, nous pouvons créer ou modifier le chemin pour éviter des problèmes d'exécution du programme. Le chemin des données n'existe pas dans le nouveau système Mac. Il a été constaté que l'utilisation de mkdir pour créer le chemin a échoué, car Sip est désactivé dans le système Mac. Utilisez sudo mount -uw / pour supprimer les restrictions Sip. Exécutez XxlJobExecutorApplication pour démarrer l'exécuteur. Ouvrez //localhost:8080/ dans le navigateur et consultez l'interface de connexion. Assurez-vous que le démarrage est réussi. Le compte de connexion par défaut est "admin/123456"
Remarque :
Il est recommandé de créer /data/. applogs/xxl-job d'abord, programme Ce chemin est utilisé dans de nombreux fichiers de configuration
Modifier la configuration de la base de données du centre de répartition
Linux/Unix peut utiliser lsof pour vérifier l'occupation du port afin d'éviter un échec de démarrage
Le centre de répartition et l'exécuteur peuvent être déployés séparément selon la situation réelle
Vous pouvez voir en consultant le document officiel Description de l'interface de la tâche de déclenchement dans l'exécuteur API RESTful
Les modes d'exécution de la tâche sont les suivants
View GulueTypeEnum code source
Nous utilisons donc Burpsuite pour construire notre POC
Conseils :
#🎜 🎜#Lors de la modification de GlueSource, Si l'exécution ne prend pas effet, veuillez modifier le jobIdLors du redémarrage du projet, vous constatez que le démarrage du port est anormal, veuillez fermer BurpSuite#🎜🎜 #Étant donné que la version officielle de XXL-JOB est livrée avec son propre composant d'authentification, lorsqu'il est activé, il peut assurer la sécurité de la communication sous-jacente du système. L'auteur de XXL-JOB a déclaré que dans des circonstances normales, la communication sous-jacente entre le centre de répartition et l'exécuteur testamentaire est sécurisée et qu'il n'y a aucune vulnérabilité de commande à distance. Cependant, si le jeton d'accès n'est pas activé sur l'exécuteur, les demandes de planification illégales ne peuvent pas être identifiées et interceptées. Les demandeurs malveillants peuvent utiliser le mode GLUE pour pousser du code d'attaque malveillant afin de réaliser des attaques à distance. Par conséquent, l'auteur de XXL-JOB estime que ce problème n'est pas une « vulnérabilité » par nature. La version officielle du site Web fournit un composant d'authentification, qui peut être activé à des fins de protection.
4. Suggestions de réparation2. Restriction d'accès au port : En configurant un groupe de sécurité, seules les IP spécifiées peuvent accéder au port
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!