Gogs est un système de gestion de fichiers/codes open source (basé sur Git) similaire à GitHub. L'objectif de Gogs est de créer le moyen le plus simple, le plus rapide et le plus simple de créer un service Git en libre-service. Développé dans le langage Go, Gogs peut être distribué sous forme de binaire autonome et prend en charge toutes les plates-formes prises en charge par le langage Go, notamment les plates-formes Linux, Mac OS X, Windows et ARM.
gogs est une plate-forme de service Git en libre-service facile à construire. Elle présente les caractéristiques d'une installation facile, multiplateforme, légère, etc. et compte de nombreux utilisateurs. Dans sa version 0.11.66 et les versions précédentes, (bibliothèque go-macaron/session) ne vérifie pas l'identifiant de session. Un attaquant peut utiliser un identifiant de session malveillant pour lire n'importe quel fichier, contrôler le contenu de la session en contrôlant le contenu du fichier, puis se connecter à. n'importe quel compte.
Les versions concernées sont les suivantes :
Gogs 0.11.66 et versions précédentes
(1) Utilisez le docker de la machine virtuelle Ubuntu pour cloner l'environnement gogs sur vulhub
(2. ) Exécutez Start gogs avec la commande suivante : docker-compose up -d
(3) Une fois l'environnement démarré, visitez http://192.168.49.103:3000/install pour voir la page d'installation. Lors de l'installation, sélectionnez la base de données sqlite et activez la fonction d'enregistrement.
(4) Utilisez la sérialisation Gob pour générer des données de fichier de session.
(5) Enregistrez ensuite un compte utilisateur normal, créez un projet et téléchargez le fichier de session nouvellement généré sur la page « Version Release ».
(6) Grâce à l'URL de cette pièce jointe, vous pouvez connaître le nom de ce fichier : ./attachments/2eb7f1a2-b5ec-482e-a297-15b625d24a10. Ensuite, construisez Cookie : i_like_gogits=../attachments/2/e/2eb7f1a2-b5ec-482e-a297-15b625d24a10 Après l'accès, vous pouvez trouver l'utilisateur qui s'est connecté avec succès avec l'id=1 (c'est-à-dire l'administrateur root)
.
Tout d'abord, pour chaque utilisateur, nous pouvons créer un entrepôt et télécharger n'importe quel fichier avec un contenu contrôlable via la fonction de publication, nous fournissant ainsi les conditions pour forger des fichiers de session.
Grâce à la fonction explorer, nous pouvons trouver Il existe de nombreux entrepôts d'utilisateurs. En entrant dans la page d'informations utilisateur d'un utilisateur, nous pouvons obtenir toutes les informations (uid, nom d'utilisateur) nécessaires à la construction de la session de l'utilisateur. code ci-dessus, nous avons constaté que le contenu du fichier de session est un codage Gob, basé sur la charge utile de session écrite par P Niu.
À partir de là, nous pouvons générer une session, et grâce à la fonction de téléchargement de version disponible pour chaque utilisateur, nous téléchargeons notre session forgée sur le serveur.
La structure de répertoires dans laquelle les fichiers dans gogs et release sont stockés par défaut est attachments/fid[0]/fid[1]/fid. La structure de répertoires dans laquelle les sessions sont stockées est sessions/sid[0]/sid[1]/sid. De plus, les dossiers sessions et pièces jointes sont stockés dans le même dossier de données.
Parce que gogs segmentera la session et la construira dans le chemin final avant de la lire. Puisque les pièces jointes et la session sont dans le même dossier, modifiez la session avec le chemin du fichier que nous venons de télécharger, c'est-à-dire ../. attachments /1/7/17f4120b-1a0d-416a-b0b0-def4342ded5b, la fonction qui lit la session analyse le chemin d'accès aux sessions/././../attachments/1/7/17f4120b-1a0d-416a-b0b0-def4342ded5b , qui est le fichier que nous avons téléchargé finira par compléter la connexion de n'importe quel utilisateur.
6. Suggestions de réparation
Gogs peut être téléchargé et compilé depuis Github dans la branche de développement. Dans cette branche, cette vulnérabilité a été corrigée, ou vous pouvez passer à la dernière version de Gogs.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!