# Challenges de CTFlearn résolus
---
## 1- POST Practice
### Defi
Trouver le drapeau en complétant l'entête de la requête qui est envoyé au serveur
### Solution
Nous commencer par taper l'url du site web dans le navigateur afin de voir la réponse du serveur

Nous avons ensuite affiché le code source de la reponse afin de voir s'il y avait des informations

Nous avons constaté que les paramètres de connexions (username, password) étaient donnés dans un commentaire html de cette page.
Nous avons lancé Postman afin de pouvoir fournir ces données dans l'entête de la requête qui est envoyée au serveur

Une fois que nous avons cliqué sur send, nous avons obtenu une réponse differente de la première tentative. Cette réponse contenait le drapeau recherché

Ceci nous a permis de resoudre le challenge
### Remédiation
1. il faut toujours crypter les informations entre le serveur et les clients en utilisant https
2. Il faut eviter de transmettre des données sensible comme les paramètres de connexions en clair dans une url. Les paramètres de connexions d'un compte administrateur doit être protégé et non transmis dans l'entête d'une page HTML
3. Il faut configurer le site pour qu'il utilise une authentification basé sur les jetons comme le JWT et stocker les informations sensibles dans un coffre-fort
---
## 2- Basic Injection
### **Défi**
Il est question de faire fuiter la base de donnée du site

### **Solution** :+1:
J'ai saisi dans le champ de recherche le texte : cedrigue' or '1' = '1, puis j'ai validé et j'ai obtenu comme résultat:

### Remediation
1. s'assurer que le texte saisi dans un champ par un utilisateur ne contient pas de caractère spéciaux du langage SQL
---
## 3- The Credit Card Fraudster
### Défi
Retrouver les chiffres manquants de carte de crédit suivante: 543210******1234
### Solution
J'ai ecris un programme python qui génére des nombre allant de 5432100000001234 à 5432109999991234 puis détermine celles qui sont des nombres de Luhn.
le code de ce programme est :
```
#!/usr/bin/python3
from luhn import * # Bibliothèque Python permettant de vérifier ou générer un nombre de Luhn
nbre_multiple = 123457
plusPetiteValeurCarte = 5432100000001234 # on carte les chiffres connus et leurs possitions, puis on complète l'espace restant par des 0 jusqu'a obtenir un nombre de 16 chiffres
plusGrandeValeurCarte = 5432199999991234 # on carte les chiffres connus et leurs possitions, puis on complète l'espace restant par des 9 jusqu'a obtenir un nombre de 16 chiffres
borneInferieurFacteur = 5432100000001234 // nbre_multiple # c'est le facteur dont en multipliant par 123457 on obtient le premier multiple proche de plusPetiteValeurCarte
borneSuperieurFacteur = 5432199999991234 // nbre_multiple # c'est le facteur dont en multipliant par 123457 on obtient le premier multiple proche de plusGrandeValeurCarte
#for card_number in range (5432100000001234, 5432199999991234):
for i in range(borneInferieurFacteur,borneSuperieurFacteur):
card_number = nbre_multiple *i # on détermine un numéro de carte de 16 chiffres qui est un multiple de 123457,
if(verify(str(card_number)) and (generate(str(card_number // 10)) == 4) and (card_number % 10000 == 1234) and (card_number // 10000000000 == 543210)):
#on vérifie que le numéro de la carte debute par 543210, se termine par 1234 et vérifie l'algorithme de Luhn
print('Le numéro de la carte est : ', card_number)
```

### Solution de remédiation
1. Dévoiler le moins de chiffres de la carte de crédit. En effet, plus on a de chiffre à déviner plus grande est la complexité
2. Masquer la clé de Luhn qui est le dernier chiffre de la carte augmentera également la probabilité de le déterminer
---
## 4- Gibusteme
### **Défi**
Il est question de trouver, dans les zones cachés d'un site web infesté par des fantômes, un drapeau
### **Solution**
Nous avons commencé par explorer le site en utilisant l'URL founit.

En lisant le texte situé en bas de la vidéo, nous avons remarqué un hyperlien sur le mot **Gobuster** et sur le mot **common wordlist**.

Nous avons téléchargé le fichier dont l'hyperlien de **common wordlist** pointait

En cliquant dessus nous avons ouvert un tutoriel sur l'outil GOBUSTER permettant de faire un brute force sur un site web. Nous avons suivi le tutoriel.

Nous avons suivi le tutoriel pour l'utilisation de l'outil gobuster
1. Installation de gobuster dans kali : **sudo apt-get update && sudo apt-get install gobuster**
2. Lancement de gobuster sur le site web : https://gobustme.ctflearn.com/

3. Nous avons ensuite essayer chacune des url qui ont été decouverte par gobuster

nous avons fini par trouver le drapeau

### Remédiation
1. Utiliser des noms de repertoires le moins significatifs lorsque l'on passe en production
2. Utiliser l'obfuscation pour rendre obscure et difficile à un humain la lecture du code et la compréhension de l'architecture du site web
---
## 5- Simple programming
### **Défi**
Trouver le nombre de lignes dont le nombre de 0 est un multiple de 3 ou le nombre de 1 est un multiple de 2.
### **Solution**
Nous avons ecrit un programme Python qui compte le nombre de 0 et de 1 dans chaque ligne du fichier. Le code de dce programme est :
```
#!/usr/bin/python3
import numpy as np
myData = open('./data.dat','r')
nbreLigne = 0
for ligne in myData:
nbre0 = 0
nbre1 = 0
for i in range(len(ligne)):
if ligne[i] == '0':
nbre0 +=1
if ligne[i] == '1':
nbre1 +=1
if ((nbre0 % 3 == 0) or (nbre1 % 2 == 0)):
nbreLigne +=1
print(nbreLigne)
```

### Remédiation
1. Il n'y a rien à faire dans ce cas car il ne s'agit pas d'une attaque
---
## 6- **Time Traveller**
### **Défi**
Il est demandé de retrouvé le mail listé sur le site de la NASA lors de sa première mise en ligne le 31 décembre 1996.
### **Solution**
#### **1. Tentative 1**:-1:
Pour resoudre ce challenge, j'ai commncé par visiter le site de la NASA et regarder dans la section contact si on pouvait y trouver un email. le seul email présent est *hqnews-join@newsletters.nasa.gov*, mais il n'a pas permis de resoudre le challenge.

#### **2. Tentative 2** :+1:
J'ai ensuite taper dans le moteur de recherche Google les mots clés *"old version of nase website"*. J'ai pris la première réponse qui renvoi vers une page web listant des outils pour visualiser les anciennes version de sites web.

Une fois la page ouverte

j'ai testé le premier outil qui est le Wayback Machine

Il faut donner l'url de la page d'acceuil du site dont on recherche les anciennes versions, puis de déplacer le curseur vers l'année, puis du calendier donné juste en-dessous pour rechercher la mois et le jour.

Dans notre cas c'est le 31 décembre 1996

et en cliquant sur le lien on ouvre la page du site web

l'email recherché est : ***today@nasa.gov***

### Remédiation
Il n' y a aucune action à faire car il ne s'agit pas d'une attaque
---
## 7- My Blog
### **Défi** :
Il faut trouver le drapeau en parcourant le site web de Noxtal Cyberworlg
### **Solution**
J'ai ouvert le site web : 
Il comporte beaucoup de publications dont certains ont le mot ***CTFlearn*** dans leur titre. J'ai alors fait une recherche du mot CTFlearn dans le blog et je me suis concentré à resoudre les enigmes qu'ils comportaient et à tester le drapeau capturé à chaque fois.

#### 1. **CTFlearn 887 - Suspecious message**
Il est demandé de décrypter un message en suivant les étapes décrites dans le défi
On ouvre le site Cypher Identifier and Analyzer afin d'analyser le cryptogramme reçu et déterminer l'algorithme de cryptographie utilisé

On saisie le cryptogramme dans la fenêtre, puis on clique sur analyser pour te,ter de déterminer l'algorithme de cryptographie utilisé

L'image accompagnant le cryprogramme n'étant constitué que de lettre, on va les retier et relancer l'analyse

Il semble que l'algorithme utilisé soit de l'encodage Base64. On va tenter de décryper avec le decodeur Base64 mais on obtient un résultat pas concluant

Comme tout les lettres de l'image qui accompagne le cryptogramme sont en majuscule, on va relancer l'analyse du cryptogramme est selectionnant cette option.

Le resultat nous donnes plusieurs algorithmes cryptographiques. La plus probable a avoir été utilisé est le PlayFair car elle utilise une grille similaire à celle contenu dans l'image qui accompagne le cryptogramme.
En utilisant cette image comme clé pour le décryptage, on obtient

### Remédiation
1. Ne jamais transmettre dans le même message, un texte crypté et sa clé de dechiffrement
2. Utiliser de préference une cryptographie asymétrique comme le RSA