HackTheBox. Procédure pas à pas avec Forwardslash. LFI, sauvegarde et volume chiffré



Je continue à publier des solutions envoyées pour la finalisation des machines depuis la plateforme HackTheBox .



Dans cet article, nous listons les répertoires et sous-domaines sur le site, exploitons LFI, faisons une sauvegarde d'un fichier inaccessible, et montons également un volume chiffré.



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ù il y a des données importantes pour vous, car vous vous trouvez dans un réseau privé avec des personnes qui connaissent quelque chose sur la sécurité de l'information.



Informations organisationnelles
, , Telegram . , , .



. , - , .



Reconnaître



Cette machine a une adresse IP de 10.10.10.183, que j'ajoute à / etc / hosts.



10.10.10.183    forwardslash.htb


Tout d'abord, nous analysons les ports ouverts. Comme il faut beaucoup de temps pour analyser tous les ports avec nmap, je vais d'abord le faire en utilisant masscan. Nous analysons tous les ports TCP et UDP de l'interface tun0 à 500 paquets par seconde.

masscan -e tun0 -p1-65535,U:1-65535 10.10.10.183    --rate=500






Maintenant, pour obtenir des informations plus détaillées sur les services qui s'exécutent sur les ports, exécutez une analyse avec l'option -A.

nmap -A forwardslash.htb -p22,80






Le serveur exécute un service SSH et un serveur Web. Nous allons sur le serveur Web et voyons ce qu'ils peuvent nous offrir.







C'est ainsi que nous sommes informés du piratage de l'hôte, XML et FTP sont mentionnés. Parcourons les répertoires avec gobuster. Dans les paramètres, nous spécifions le nombre de flux 128 (-t), URL (-u), dictionnaire (-w) et extensions qui nous intéressent (-x).

gobuster dir -t 128 -u http://forwardslash.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php,xml,txt






Et nous trouvons note.txt. Lisons.







Il est rapporté qu'un groupe a piraté le site et qu'il y a une sauvegarde. Cherchons des sous-domaines. Définissez le nombre de caractères sur 0 comme filtre.

wfuzz -H 'HOST:FUZZ.forwardslash.htb' -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u forwardslash.htb --hh 0






Et nous allons au sous-domaine de sauvegarde. Ajoutons-le au fichier / etc / hosts.

10.10.10.183    backup.forwardslash.htb

Passons également en revue les répertoires de ce domaine.

gobuster dir -t 128 -u http://backup.forwardslash.htb/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,php,xml,txt






Et nous allons à cette adresse.



Point d'accès



Nous sommes accueillis par un formulaire d'autorisation.







Il y a aussi la possibilité de s'inscrire. Enregistrons-nous et ensuite nous nous connecterons







En parcourant les liens, nous trouvons des formulaires pour changer le nom, le mot de passe et vous pouvez également définir une photo de profil. Attardons-nous dessus.







Cette fonctionnalité aurait été désactivée en raison d'un piratage. Dans ce cas, le champ de saisie n'est pas disponible, probablement désactivé en HTML.







Nous supprimons cette propriété des deux éléments. J'ai démarré un serveur Web sur la machine locale, et indiqué dans le champ un lien vers le fichier test.txt.







Puisqu'il n'y a pas de filtres, essayons un vecteur LFI. Pour plus de commodité, c'est dans la suite Burp.







Et il y a LFI!



UTILISATEUR



Vérifions les configurations Apache.







Mais si vous essayez de lire le fichier php, il ne vous sera pas présenté sous forme de texte. Au lieu de cela, il sera exécuté.







Mais nous pouvons utiliser des filtres php, par exemple base64. C'est ainsi que le fichier php est d'abord encodé puis affiché sur la page. Ainsi, il ne sera pas exécuté.

php://filter/convert.base64-encode/resource=../../../../var/www/backup.forwardslash.htb/index.php





Sélectionnez le fragment souhaité et appuyez sur Ctrl + Maj + B.







Nous obtenons le code décodé. Utilisons cette méthode pour lire tous les fichiers trouvés lors de l'analyse. Trouvez le mot de passe pour vous connecter à la base de données dans le fichier config.php.







Jetons également un œil à /dev/index.php. Et là, nous trouvons les données d'authentification de l'utilisateur chiv.







Cet utilisateur est dans le système, nous apprenons cela de / etc / passwd. Essayons ces données pour nous connecter via SSH.







UTILISATEUR2



Pour collecter des données dans le système, nous utilisons le script LinPEAS. Et nous trouvons une sorte de note dans les sauvegardes.











Ainsi, les sauvegardes ont une ancienne configuration avec un mot de passe. Cela appartient à la douleur.







Le programme de sauvegarde a donc un bit SUID. Autrement dit, nous pouvons exécuter le programme en tant que douleur de l'utilisateur.







Nous pouvons faire une sauvegarde, mais seulement d'un certain fichier aléatoire.







Nous pouvons créer un lien vers la sauvegarde de la configuration en la nommant telle qu'elle est présentée à partir du programme de sauvegarde. Mais nous devons le faire en quelques secondes. Par conséquent, nous allons créer un script. Tout d'abord, obtenons le nom du fichier.







Ajoutons maintenant la création de liens et la re-sauvegarde.







Exécutons le répertoire personnel de l'utilisateur et récupérons le fichier.







Changez d'utilisateur en entrant ce mot de passe.







RACINE



Jetons un coup d'œil aux paramètres du tribunal pour exécuter des commandes sans mot de passe.







Ainsi, nous avons un volume chiffré. Pour le décrypter et le monter, nous avons besoin d'un mot de passe.







Nous avons un texte chiffré et un programme.







Pour le décryptage, nous utilisons le code suivant.

def decrypt(key, msg):
key = list(key)
	msg = list(msg)
	for char_key in reversed(key):
		for i in reversed(range(len(msg))):
			if i == 0:
				tmp = ord(msg[i]) - (ord(char_key) + ord(msg[-1]))
			else:
				tmp = ord(msg[i]) - (ord(char_key) + ord(msg[i-1]))
			while tmp < 0:
				tmp += 256
			msg[i] = chr(tmp)
	return ''.join(msg)

ciphertext = open('ciphertext', 'r').read().rstrip()
for i in range(1, len(ciphertext)):
	for j in range(256):
		key = chr(j) * i
		text = decrypt(key, ciphertext)
		if ' the ' in text or ' to ' in text:
			print(key)
			print(text)
			exit()


Et nous avons réussi à déchiffrer le message.







Voyons ce que nous avons sur le chemin indiqué.







Décrypterons le volume.







Et nous allons le monter.







La clé SSH s'y trouve.







Nous nous connectons et prenons le drapeau.







Vous pouvez nous rejoindre sur Telegram . Vous pouvez y trouver des documents intéressants, des cours et des logiciels qui ont fui. Rassemblons une communauté dans laquelle il y aura des gens qui connaissent de nombreux domaines de l'informatique, alors nous pourrons toujours nous entraider sur tous les problèmes informatiques et de sécurité de l'information.



All Articles