[Apprentissage technique] Une pénétration de site Node.js

avant-propos

Lorsque vous rencontrez un site, le backend est écrit par Node.js. Pour ce type de site, il est généralement difficile d'obtenir un shell, mais il atteint également l'objectif ultime d'obtenir des autorisations d'arrière-plan.

Collecte d'informations

Effectuez d'abord une collecte régulière d'informations, une analyse de sous-domaine, une analyse de port, une analyse de répertoire, etc.

Le langage de script backend de ce site est Node.js

La détection de répertoire a révélé que l'interface 404 est également très similaire à la page 404 de Node.js, et l'accent sera mis sur les fichiers js plus tard.

Interface révolutionnaire

Cliquez pour afficher [Documents d'apprentissage technique connexes]

Lors d'une analyse de répertoire, un répertoire utile a été trouvé :

Comme mentionné précédemment, concentrez-vous sur le fichier js, vérifiez le code source de la page et trouvez un fichier js intéressant. Pourquoi ce fichier est-il intéressant ? Parce que le nom de fichier de ce js est le même que le nom du produit

Après être entré, j'ai découvert un nouveau monde

L'interface frontale de ce site Web est construite via la fonction document.write dans le fichier js

Les données rendues dynamiquement de la page sont obtenues via la requête ajax dans la fonction js

$ . ajax ({
    url : host + "/agent/getPlayerInfo" ,
    type : "post" ,
    dataType : 'json' ,
    headers : { "content-type" : "application/json" },
    data : JSON . stringify ({ "uid" : uid })
  }). done ( function ( data ){
    console . log ( data ); 

Toutes les interfaces fonctionnelles du noyau sont un accès non autorisé.Selon les requêtes ajax dans différents fichiers js, utilisez postman pour construire directement des paquets de données, puis les fonctions correspondantes en arrière-plan peuvent être réalisées.

arrière-plan de connexion

Grâce à l'interface ci-dessus, vous pouvez obtenir le nom d'utilisateur de l'utilisateur via l'uid de l'utilisateur, utiliser tous les noms d'utilisateur comme dictionnaire et les mettre en rot pour faire sauter les mots de passe faibles

Analysez le package de connexion en arrière-plan, le mot de passe est crypté

Trouvez la méthode de cryptage en js et interceptez le md5 16 bits

Selon la logique if du code js, on peut clairement voir que la valeur du code de retour du package de 101100 est l'erreur de mot de passe et 200 est la connexion réussie.

A réussi à dynamiter plusieurs utilisateurs avec des mots de passe faibles

mauvais mot de passe:

Le mot de passe est correct :

Entrez l'arrière-plan de l'administrateur

Utilisez l'utilisateur de dynamitage pour vous connecter en arrière-plan et constater qu'il ne s'agit pas d'un administrateur

Mais continuez à lire le code js et trouvez le code suivant : data.code == 200 après une connexion réussie, puis en fonction de la valeur agentClass du package renvoyé, vous pouvez contrôler si l'interface administrateur, l'interface du service client ou le l'interface utilisateur de premier ou de second niveau s'affiche. Puisqu'il s'agit du jugement frontal et que l'interface est rendue via la fonction document.write, le frontal peut être contourné et la valeur agentClass dans le package renvoyé peut être directement modifiée à la valeur de l'administrateur, puis le l'interface administrateur peut être entrée, et toutes les interfaces du back-end sont comme ci-dessus. Il n'y a pas d'authentification, donc toutes les fonctions de l'arrière-plan de l'administrateur peuvent être utilisées lorsque
agentClass=1 :

Lorsque agentClass=2-4 :

Ensuite, modifiez simplement l'agentClass=1 du package renvoyé.

Vous êtes entré avec succès dans l'arrière-plan de l'administrateur

Je suppose que tu aimes

Origine blog.csdn.net/HBohan/article/details/123406431
conseillé
Classement