Académique Documents
Professionnel Documents
Culture Documents
MSO 3.2
MSO Cybersécurité
Élève : Enseignants :
Manal Hachhach Dr Charles-Edmond BICHOT
avril 2023
BE n°1 :
2.1 App - Script : Bach - System 2
Password : 8a95eDS/*e_T#
2.2 App - Script : Powershell - Command injection
Password : SecureIEXpassword
2.4 App - Systeme : ELF x86 - Stack buffer overflow basic 2
Password : B33r1sSoG0oD4y0urBr4iN
2.5 Programmation : IRC - La Roue Romaine
Pour résoudre ce challenge, j'ai utilisé un script bash ainsi que le programme ii
de suckless disponible sur http://tools.suckless.org/ii/.
Par exemple,
pour écrire dans le canal #root-me, on doit écrire dans le fichier "in" du
répertoire "irc.root-me.org/#root-me/in".
#!/usr/bin/bash
pushd
. cd ~/irc/irc.root-me.org
bot="candy/in"
sleep 0.2
cat candy/out
popd
Password: 3bienBr4v0Continuepe7i7PONEY
2.6 Cracking : ELF x86 - Basique
Le fichier en question est un binaire lié statiquement qui n'a pas été supprimé.
Pour résoudre le défi, j'ai utilisé des chaînes et j'ai finalement obtenu la réponse.
Cependant, le processus a été assez long. J'ai commencé par ouvrir le binaire
avec Cutter, puis j'ai utilisé le décompilateur de Ghidra, que j'aime beaucoup
utiliser, contrairement à jsdec qui peut parfois être difficile à analyser, comme
je l'ai expliqué dans mes blogs précédents.
3 Autres problèmes
Tous les challenges que vous réussirez à résoudre dans l’une des 4 catégories
suivantes compteront pour ce BE : — App - Script — App - Systeme —
Programmation — Cracking
anti debug:
.text:0804868A test eax, eax
flag here:
.text:08048617 call _strcmp
.text:0804861C test eax, eax
----------------------------------------------------------
gdb-peda$ c
# Breakflag!
gdb-peda$ break *0x08048617
Breakpoint 3 at 0x8048617
gdb-peda$ c
----------------------------------------------------------
root@kali:~/bin# ./Crack
ff07031d6fb052490149f44b1d5e94f1592b6bac93c06ca9
Password : ff07031d6fb052490149f44b1d5e94f1592b6bac93c06ca9
3-4 Programmation : IRC - Uncompress me
La question indique explicitement qu'il s'agit d'une compression zlib +
encodage Base64, et donne un exemple, qui a été testé et traité dans l'ordre
suivant
# ! /usr/bin/python
# -*- codage : UTF-8 -*-
import zlib
import base64
import re
import socket
CHARSET = 'utf-8'
Args.
irc_sock : connexion socket au serveur IRC
cmd : commande à envoyer (pas besoin du terminateur \r\n, il sera rempli
automatiquement)
Retourne.
Aucun
"""
Args.
irc_sock : connexion socket au serveur IRC
to : l'objet qui doit recevoir le message privé
msg : le contenu du message privé à envoyer
Retourne.
Aucun
"""
cmd = 'PRIVMSG %s :%s' % (to, msg)
send_cmd(irc_sock, cmd)
retour
Args.
irc_host : Serveur IRC hôte
irc_port : Port du service IRC
irc_chan : canal de discussion IRC
username : un surnom pour s'identifier dans le salon de discussion IRC
(n'importe quelle valeur est acceptable, tant qu'elle n'est pas utilisée par
quelqu'un d'autre sur IRC)
anywords : une phrase utilisée pour dire bonjour après avoir rejoint le
salon de discussion IRC pour la première fois.
Retourne.
irc_sock : connexion socket au serveur IRC
"""
Args.
irc_sock : connexion socket au serveur IRC
bot_name : pseudo du robot
username : votre propre pseudo
Retourne.
Aucun
"""
finish = False
while finish == False .
rsp_data = irc_sock.makefile(encoding=CHARSET)
if line.startswith('PING') .
send_cmd(irc_sock, line.replace('PING', 'PONG'))
else .
send_cmd(irc_sock, 'QUIT') # Quitte le canal de discussion
finish = True
break
return
if __name__ == '__main__' .
irc_host = 'irc.root-me.org'
irc_port = 6667
irc_chan = '#root-me_challenge'
bot_name = 'Candy'
username = 'EXP'
anywords = 'http://exp-blog.com'
l suffit de saisir le texte de notre choix, puis cliquer sur le bouton de soumission pour obtenir le mot de passe et
réussir le défi.
Résultat :
Lorsque vous ouvrez la page de ce défi, vous remarquez qu'il y a trois boutons qui permettent de passer à d'autres
pages en cliquant dessus. La question est de trouver un moyen de passer à une page qui n'est pas accessible via ces
trois boutons.
Pour cela, vous pouvez ouvrir les outils de développement de votre navigateur et accéder à l'onglet "Elements". Vous
verrez que chacun des trois boutons déclenche une URL avec des paramètres spécifiques : "?url=xxx&h=yyyy". En
analysant cela, vous constaterez que la page vérifie la valeur de "h" avant de passer à l'URL spécifiée, et que la valeur
de "h" est le résultat MD5 de l'URL. Pour passer à une autre page, vous pouvez donc construire une charge utile en
utilisant le paramètre "get" comme suit : "?url=xxx&h=to_md5(xxx)".
Pour générer le résultat MD5, vous pouvez utiliser l'outil Burp Suite -> Decoder (ou un autre constructeur MD5 en
ligne).
Ensuite, vous pouvez cliquer avec le bouton droit de la souris sur le paquet FTP-DATA, puis choisir "Trace Stream" ->
"TCP Stream". En effectuant une trace TCP sur ce paquet, vous pouvez essayer de trouver le paquet qui a établi cette
session FTP.
Finalement, vous pouvez trouver le mot de passe de l'utilisateur FTP en résolvant le défi FTP, comme illustré dans la
Figure
La procédure consiste à copier le texte présent sur la page, puis à ouvrir l'outil Burp Suite. Ensuite, on accède à
l'onglet "Décodeur" de Burp Suite et on colle le texte à décoder. On utilise alors le décodeur ASCII hex pour décrypter
le texte et retrouver le caractère ASCII original.
3- Autre problème
3.5 Web - Client : Javascript - Authentification 2
La procédure pour obtenir le code source du script Java d'authentification consiste à cliquer sur le bouton
correspondant, ce qui fera apparaître une boîte interactive demandant le mot de passe. Ensuite, on inspecte la page
web et on clique sur l'onglet "Sources". On cherche alors le fichier "login.js" et en cliquant dessus, on peut accéder au
code source du script Java d'authentification.
if (TheLists[i].indexOf(username) == 0)
On peut donc dire que le nom d’utilisateur est : GOD et le mot de passe est : HID-DEN .
En accédant au site web correspondant, il est possible de coller le contenu de la balise <script> et de décoder la
valeur associée.
?username=guest%20authenticated.%0d%0aexp&password=none
On soumet la page et l’usurper avec succès pour obtenir le mot de passe et relever le défi.