diff --git a/README.md b/README.md index c76937c..1be726e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Notes de cours et TD machines +Notes de cours et TD machine ----------------------------- Dépôt git pour la construction d'un site statique avec diff --git a/config.toml b/config.toml index 3b2cee9..70c80c7 100644 --- a/config.toml +++ b/config.toml @@ -15,7 +15,7 @@ enableRobotsTXT = true [Params] toc = true post_navigation = true - postSections = ["reseau", "progsys", "installations", "bdd"] + postSections = ["reseau", "progsys", "installations", "bdd", "securite"] [Params.sidebar] home = "right" # Configure layout for home page diff --git a/content/installations/TDM_1-OpenLDAP/index.md b/content/installations/TDM_1-OpenLDAP/index.md index 2573746..c1d4245 100644 --- a/content/installations/TDM_1-OpenLDAP/index.md +++ b/content/installations/TDM_1-OpenLDAP/index.md @@ -2,7 +2,7 @@ title: TDM1 OpenLDAP - notes d'installation date: 2018-09-13 lastmod: 2018-09-27 -categories: ["Installations", "TD machines"] +categories: ["Installations", "TD machine"] tags: ['OpenLDAP', 'Apache Directory Studio', 'PAM'] --- diff --git a/content/installations/TDM_3-DHCP_DNS/index.md b/content/installations/TDM_3-DHCP_DNS/index.md new file mode 100644 index 0000000..97e99fc --- /dev/null +++ b/content/installations/TDM_3-DHCP_DNS/index.md @@ -0,0 +1,117 @@ +--- +title: "Installation d'un serveur DHCP et DNS" +date: 2018-11-15 +categories: ["Installations", "TD machine"] +--- + +Avant toutes choses, j'ai modifié mon réseau virtuel pour ne plus avoir de DHCP. +J'ai ensuite commencé l'installation d'une nouvelle machine virtuelle. Comme je +n'ai plus de DHCP sur le réseau, j'ai mis une adresse IPv4 manuelle : + +``` +ip : 192.168.122.254/24 +passerelle : 192.168.122.1 +``` + +## Installation d'un serveur DHCP + +Le serveur DHCP le plus utilisé est `isc-dhcp-server` il suffit de l'installer +avec la commande : + +```shell +# apt install isc-dhcp-server +``` + +Il existe aussi une version avec le support de LDAP en tant que backend, mais +nous verrons celà plus tard. + +### Configuration + +La configuration du serveur se fait dans le fichier `/etc/dhcp/dhcpd.conf`. Elle +est succinte et rapide à mettre en place + +``` +# option definitions common to all supported networks... +option domain-name "u-bordeaux.com"; +option domain-name-servers 192.168.122.1; + +default-lease-time 3600; +max-lease-time 7200; + +ddns-update-style none; + +# Our subnet definition +subnet 192.168.122.0 netmask 255.255.255.0 { + range 192.168.122.100 192.168.122.120; + option routers 192.168.122.1; +} + +# The only dhcp server in our network +authoritative; +``` + +## DNS + +Le paquet à instller est `bind9` avec la commande + +```shell +# apt install bind9 +``` + +Le fichier de configurion est situé dans le répertoire `/etc/bind/named.conf` + +### Configuration + +J'ai choisis de séparer les fihiers de zone et de les mettres dans une dossier +`zone` dans le dossier de configuration de bind. + +Le fichier `named.conf` + +``` +// Include options +include "/etc/bind/named.conf.options"; +include "/etc/bind/named.conf.default-zones"; +zone "u-bordeaux.fr" { + type master; + file "/etc/bind/zones/db.u-bordeaux.fr.zone"; + allow-update { key rndc-key; }; +}; +zone "122.168.192.in-addr.arpa" { + type master; + file "/etc/bind/zones/inv.db.u-bordeaux.fr.zone"; + allow-update { key rndc.key; }; +}; + +``` + +Et les fichiers de zones, en premier la zone "normale puis la zone inverse + +``` +$TTL 3600 +@ IN SOA u-bordeaux.fr. root.u-borderaux.fr. ( + 2007010401 ; Serial + 3600 ; Refresh [1h] + 600 ; Retry [10m] + 86400 ; Expire [1d] + 600 ) ; Negative Cache TTL [1h] +; +@ IN NS ns +ns IN A 192.168.122.254 +``` + +``` +$TTL 604800 +@ IN SOA u-bordeaux.com admin.u-bordeaux.fr ( + 1 ; Serial + 604800 ; Refresh + 86400 ; Retry + 2419200 ; Expire + 604800 ) ; Negative Cache TTL +; +@ IN NS localhost. ; delete this line +254 IN PTR ns.u-bordeaux.fr +``` + +## Interfacer DHCP et DNS + +Il s'agit maintenant de permettre la mise jour du serveur DNS avec diff --git a/content/progsys/1-introduction/index.md b/content/progsys/1-introduction/index.md index 65663c7..f3f58e5 100644 --- a/content/progsys/1-introduction/index.md +++ b/content/progsys/1-introduction/index.md @@ -20,16 +20,16 @@ l'exécution de programmes pour l'utilisateur final : - exécution de programmes - accès aux matériels - accès au(x) système(s) de fichier(s) - - accès mémoire + - accès mémoire - accès réseau -## POSIX et IEE +## POSIX et IEEE La norme POSIX, standard IEEE, définie les interfaces utilisateurs et logiciels, la ligne de commande standard et son interface de scripts, les entrées / sorties de base. les attributs de fichiers (permissions) -La norme SUS *Single Unie Specification* est une norme plus récente et moins +La norme SUS *Single Unix Specification* est une norme plus récente et moins contraignante. elle est basée sur les travaux de l'IEEE et de l'Open Group. [SUS][https://fr.wikipedia.org/wiki/Single_UNIX_Specification] et @@ -41,7 +41,7 @@ LSB ou *Linux Standard Base* définie l'agencement général du système GNU / L : librairies standard, commandes POSIX étendues, hiérarchie du système de fichiers, les runlevels etc. -[LSB][https://fr.wikipedia.org/wiki/Linux_Standard_Base] sur Wikipedia. +[LSB](https://fr.wikipedia.org/wiki/Linux_Standard_Base) sur Wikipédia. ## Architecture des systèmes "modernes" @@ -51,8 +51,8 @@ Ils sont organisés en couches un peu à la façon du modèle OSI : 2. l'assemblage (assembleur) 3. système (applications système) 4. Application - N. Les applications / machines virtuelles (capables de traverser les couches - pour atteindre le matériel) + 5. (couche N) Les applications / machines virtuelles (capables de traverser les + couches pour atteindre le matériel) Plus la couche est basse, plus la programmation est efficace du point de vue des performances mais plus difficile est la portabilité (un code assembleurs et diff --git a/content/progsys/2-fichiers/index.md b/content/progsys/2-fichiers/index.md index 1a4e506..0cd3977 100644 --- a/content/progsys/2-fichiers/index.md +++ b/content/progsys/2-fichiers/index.md @@ -55,7 +55,7 @@ O APPEND | Écriture à la fin du fichier #### mode -C'est aussi un masquage de bits définissant le node du fichier en vas de +C'est aussi un masquage de bits définissant le mode du fichier en cas de création : | mode | octal | utilisation | @@ -69,9 +69,9 @@ création : | S IWGRP | 00020 | Le groupe a le droit d'écrire | | S IXGRP | 00010 | Le groupe a le droit d'exécuter | | S_IRWXO | 00007 | Le propriétaire a le droit de lire, écrire, exécuter | -| S_IROTH | 00004 | L’utilisateur a le droit de lire | -| S IWOTH | 00002 | L'utilisateur a le droit d'écrire | -| S IXOTH | 00001 | L'utilisateur a le droit d'exécuter | +| S_IROTH | 00004 | Les autres ont le droit de lire | +| S IWOTH | 00002 | Les autres onr le droit d'écrire | +| S IXOTH | 00001 | Les autres ont le droit d'exécuter | #### Exemple en C diff --git a/content/progsys/7_attributs-fichiers/files/presentation.pdf b/content/progsys/7_attributs-fichiers/files/presentation.pdf new file mode 100644 index 0000000..159d48c Binary files /dev/null and b/content/progsys/7_attributs-fichiers/files/presentation.pdf differ diff --git a/content/progsys/7_attributs-fichiers/images/schema_hdd.svg b/content/progsys/7_attributs-fichiers/images/schema_hdd.svg new file mode 100644 index 0000000..d4c6946 --- /dev/null +++ b/content/progsys/7_attributs-fichiers/images/schema_hdd.svg @@ -0,0 +1,1062 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/progsys/7_attributs-fichiers/images/schema_inodes.svg b/content/progsys/7_attributs-fichiers/images/schema_inodes.svg new file mode 100644 index 0000000..2ad730b --- /dev/null +++ b/content/progsys/7_attributs-fichiers/images/schema_inodes.svg @@ -0,0 +1,1017 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/progsys/7_attributs-fichiers/index.md b/content/progsys/7_attributs-fichiers/index.md new file mode 100644 index 0000000..ed6f57f --- /dev/null +++ b/content/progsys/7_attributs-fichiers/index.md @@ -0,0 +1,274 @@ +--- +title: "Les attributs de fichiers" +date: 2018-10-16 +categories: ["Programmation système", "cours"] +tags: ["fichier", "i-node"] +--- + +Les attributs de fichiers représentent toutes les informations dont dispose le +système sur les fichiers et répertoires : propriétaire, groupe permissions, +taille, horodatage etc. + +## Système de fichiers + +Un système de fichiers (ou système de gestion des fichiers) représente la façon +de stocker les fichiers, leurs informations et les organiser et sur un support +physique de stockage de masse. Parmi les plus courant on peut citer : + + - Ext4, système de fichier par défaut sur la plupart des installation + GNU/Linux + - NTFS, système de fichiers par défaut de Microsoft Windows + - YAFFS pour Android + - APFS pour les machines Apple (MacOS, iOS, et Apple TV) + - ZFS pour les Unix + +C'est bien entendu une liste non exhaustive, on pourrait citer des système plus +ancien comme FAT, UFS, HFS etc. Ou d'autres spécifique comme CEPH (système de +fichiers pour clusters). + +## Anatomie d'un stockage de masse + +Dans les premiers secteurs d'un disque dur, on trouve la table de partitions +cartographiant le disque. Il en existe deux type principaux : BPT et MBR Du type +de MBR découlera le nombres de partitions : 4 pour MD-DOS et pas de limites pour +le GPT par exemple. + +![Schéma de fonctionnement d'un systeme de fichier](images/schema_hdd.svg) + +### Gestion des fichiers dans le cas de la FAT + +Le système de fichier FAT de Microsoft utilise le chainage de blocs : la table +d'allocation de fichiers contient l'adresse du premier bloc du fichiers. À la +fin de ce bloc, on obtient l'adresse du suivant. Avec ce système, la lecture +séquentielle est lente. + +### Le cas le L'UFS + +L'UFS pour *Unix File System* utilise, comme la plupart des systèmes de fichiers +moderne sous les systèmes Unix, utilise les i-nodes. Un numéro unique d'inode +est attribué à chaque fichier. Chaque fichier a un seul inode mais il peut avoir +plusieurs nom + +![Schéma de fonctionnement des inodes](images/schema_inodes.svg) + +Un inode peut aussi contenir d'autres informations comme le créateurs, les accès +etc. + +## Appels Systèmes + +La lecture des attributs de fichiers se fait par un appel système `stat()`. + +```c +#include +#include +#include + +int stat(const char *pathname, struct stat *statbuf); +``` + +Récupère les informations du fichiers pointé par `*pathname` et rempli la +structure `*statbuf`. En cas de succès renvoie 0 sinon -1 et positionne `errno`. + +Il est aussi possible d'utiliser `fstat()`, variante de `stat()` mais utilisant +un descripteur de fichier. + +```c +int fstat(int fd, struct stat *statbuf); +``` + +`lstat()` est utiliser dans le cas de lien symbolique, cet appel est utiliser +afin de récupérer les informations sur le lien lui-même et non le fichier +pointé. + +```c +int lstat(const char *pathname, struct stat *statbuf); +``` + +### La structure stat + +Voici les informations contenues dans la structure de type `stat`. + +```c +struct stat { + dev_t st_dev; /* Périphérique */ + ino_t st_ino; /* numéro d'inode */ + mode_t st_mode; /* protection */ + nlink_t st_nlink; /* nombres de lien physiques */ + uid_t st_uid ; /* UID du propriétaire */ + gui_t st_gid; /* UID du groupe */ + dev_t st_rdev; /* type de périphérique */ + off_t st_size; /* taille totale en octets */ + blksize_t st_blksize; /* taille de bloc pou E/S */ + blkcnt_t st_blocks; /* nombres de blocks de 512o alloués */ + struct timespec st_atim; /* heure du dernier accès */ + struct timespec st_mtim; /* heure de la dernière modification */ + struct timespec st_ctim; /* heure du dernier changemet d'état */ +} +``` + +`st_rdev`, `st_blksize`, et `st_blocks` ne sont pas requises par POSIX.1 mais +définies comme extensions dans SUS. + + - `st_mode` : Permissions d’accès au fichier ainsi que le type de ce dernier + (répertoire, socket, fichier normal, etc.) + - `st_ino` :Numéro de référence du fichier (SUSv4), identifiant unique + d’accès au contenu du fichier, plus communément sous UNIX : numéro + d’i-inœud + - `st_dev` : Numéro du périphérique qui contient le système de fichier auquel + se rapporte le numéro d’i-inœud + - `st_nlink` : Nombre de liens physiques sur i-inœud (un fichier peut avoir + plusieurs noms). L’appel système `unlink()` décrémente cette valeur + jusqu'à 0 alors le fichier sera réellement supprimé. + - `st_size` : Taille du fichier mesurée en octets (uniquement utile pour les + fichiers normaux) + +### tests sur les types de fichiers + +Ces extraits de codes permettent de tester les types de fichiers. `statbuf` +étant le retour de `stat()` ou de ses dérivées. + +```c +if (S_ISREG(statbuf.st_mode)) { + printf "Regular file"; +} +if (S_ISDIR(statbuf.st_mode)) { + printf "Directory file"; +} +if (S_ISCHR(statbuf.st_mode)) { + printf "Character special file"; +} +if (S_ISBLK(statbuf.st_mode)) { + printf "Block special file"; +} +if (S_ISFIFO(statbuf.st_mode)) { + printf "Pipe or Fifo"; +} +if (S_ISLNK(statbuf.st_mode)) { + printf "Symbolic link"; +} + if (S_ISSOCK(statbuf.st_mode)) { + printf "Socket"; +} +``` + +#### Exemple de code + +```c +#include +#include +#include +#include +#include +int main(int argc, char *argv[]) { + int i; + struct stat statbuf; + for (i = 1; i < argc; i++) { + printf("%s: ", argv[i]); + if (lstat(argv[i], &statbuf) < 0) { + perror("Unable to get stats"); + continue; + } + if (S_ISREG(statbuf.st_mode)) { + printf("regular\n"); + } + else if (S_ISDIR(statbuf.st_mode)) { + printf("directory\n"); + } + else if (S_ISCHR(statbuf.st_mode)) { + printf("character special\n"); + } + else if (S_ISBLK(statbuf.st_mode)) { + printf("block special\n"); + } + else if (S_ISFIFO(statbuf.st_mode)) { + printf("fifo\n"); + } + else if (S_ISLNK(statbuf.st_mode)) { + printf("symbolic link\n"); + } + else if (S_ISSOCK(statbuf.st_mode)) { + printf("socket\n"); + } + else { + printf("*unknown*\n"); + } + } + exit(EXIT_SUCCESS); +} +``` + +##### Exécution + +```shell +$ ./stat-file /etc /etc/passwd /dev/null /dev/sda +/etc: directory +/etc/passwd: regular +/dev/null: character special +/dev/sda: block special +``` + +### Tests sur les permissions de fichiers + +Les extraits de codes suivant permettent des tester les permissisons sur les +fichiers et répertoires. + +```c +if (statbuf.st_mode & S_IRUSR) { printf "User can read"; } +if (statbuf.st_mode & S_IWUSR) { printf "User can write"; } +if (statbuf.st_mode & S_IXUSR) { printf "User can execute"; } +if (statbuf.st_mode & S_IRGRP) { printf "Group can read"; } +if (statbuf.st_mode & S_IWGRP) { printf "Group can write"; } +if (statbuf.st_mode & S_IXGRP) { printf "Group can execute"; } +if (statbuf.st_mode & S_IROTH) { printf "Others can read"; } +if (statbuf.st_mode & S_IWOTH) { printf "Others can write"; } +if (statbuf.st_mode & S_IXOTH) { printf "Others can execute";} +``` + +### changer les permissions sur un fichier + +```c +#include +int chmod(const char *pathname, mode_t mode); +``` + +Modifie les permissions du fichier référencé par `*pathname` + +```c +in fchmod(int fd, mode_t mode); +``` + +Modifie les permissions tout comme `chmod()` mais prend un descripteur de +fichier en paramètre. + +Dans les deux cas, `mode` est un masquage de bits avec les paramètres suivants : + +| mode | octal | utilisation | +|---------|-------|-------------------------------------------------------- +| S_IRWXU | 00700 | Le propriétaire a le droit de lire, écrire, exécuter | +| S_IRUSR | 00400 | L’utilisateur a le droit de lire | +| S IWUSR | 00200 | L'utilisateur a le droit d'écrire | +| S IXUSR | 00100 | L'utilisateur a le droit d'exécuter | +| S_IRWXG | 00070 | Le groupe a le droit de lire, écrire, exécuter | +| S_IRGRP | 00040 | Le groupe a le droit de lire | +| S IWGRP | 00020 | Le groupe a le droit d'écrire | +| S IXGRP | 00010 | Le groupe a le droit d'exécuter | +| S_IRWXO | 00007 | Le propriétaire a le droit de lire, écrire, exécuter | +| S_IROTH | 00004 | Les autres ont le droit de lire | +| S IWOTH | 00002 | Les autres onr le droit d'écrire | +| S IXOTH | 00001 | Les autres ont le droit d'exécuter | +| | | S_ISUID, S_ISGID, S_ISVTX, cf. man 2 chmod + +En cas de succès, retourne 0, sinon -1 et positionne `errno` + +### Modifier l'appartenance d'un fichier + +```c +#include +int chown(const char *path, uid_t owner, gid_t group); +``` + +Modifie l'appartenance d'un fichier pointé par `*path`. comme pour `stat()`, il +existe un variante avec un descripteur de fichiers : `fchown()` et une pour les +lien symboliques `lchmod()`. + +En cas de succès, retourne 0, sinon -1 et positionne `errno` diff --git a/content/reseau/1_introduction-reseau/index.md b/content/reseau/1_introduction-reseau/index.md index ad83297..2827d63 100644 --- a/content/reseau/1_introduction-reseau/index.md +++ b/content/reseau/1_introduction-reseau/index.md @@ -1,7 +1,7 @@ --- date: "2018-09-03" categories: ["Réseau", "Cours"] -title: "Réseaux - Introduction" +title: "Réseau - Introduction" tags: ["OSI", "latence", "débit"] --- diff --git a/content/reseau/6_architecture-internet/index.md b/content/reseau/6_architecture-internet/index.md index 9eb4800..c5695d0 100644 --- a/content/reseau/6_architecture-internet/index.md +++ b/content/reseau/6_architecture-internet/index.md @@ -1,7 +1,7 @@ --- title: "Architecture d'Internet" date: 2018-10-10 -categories: ["Réseaux", "cours"] +categories: ["Réseau", "cours"] tags: ["Internet", "routage", "interconnexion", "FAI"] --- diff --git a/content/securite/TDM_1-authentif_mdp/index.md b/content/securite/TDM_1-authentif_mdp/index.md new file mode 100644 index 0000000..bac446c --- /dev/null +++ b/content/securite/TDM_1-authentif_mdp/index.md @@ -0,0 +1,238 @@ +--- +title: "TDM : Authentification et mots de passes" +date: 2019-01-09 +categories: ['Sécurité', 'TD machine'] +tags : ['hash', 'MD5', 'mot de passe', 'kali'] +--- + +Lors de ce TD nous utiliserons principalement **john the ripper**, un outil de +cassage de mots de passe. C'est un logiciel opensource (licence GPL V.2) +connaissant de base plusieurs algorithmes de hachages (MD4, MD5, SHA256, +Blowfish, NTLM etc). Il est de plus extensible par des plugins. + +Il est disponible sur beaucoup de plates-formes (GNU/Linux, *BSD, Windows, BeOS +etc.). Pour l'installer sur Debian ( et ses dérivés comme Ubuntu) : + +``` +apt install john +``` + +## Utiliser john + +John permet de fonctionner dans 3 modes différents : single, par dictionnaire et +incrémentale + +**Single** : dans ce mode, `john` utilise le *hash* du login et éventuellement +des variantes de celui-ci. + +**Dictionnaire** : `john` essaye un à un les mos de passes d'une liste établie + +**Incrémentale** : aussi appelé *Bruteforce*, dans ce mode, `john` essaye un +ensemble de combinaisons composé d'une suite de caractères donnés. + +### Le mode single + +C'est le mode le plus rapide du logiciel, pour tester notre fichier de mot de +passe dans ce mode il suffit de faire : + +``` +john -single -format=raw-MD5 logins.txt +``` + +Voici la sortie de la commande : + +``` +Created directory: /root/.john +Using default input encoding: UTF-8 +Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3]) +Press 'q' or Ctrl-C to abort, almost any other key for status +AndyGollum (AndyGollum) +Warning: Only 18 candidates buffered for the current salt, minimum 24 +needed for performance. +Almost done: Processing the remaining buffered candidate passwords, if any +Warning: Only 4 candidates buffered for the current salt, minimum 24 +needed for performance. +1g 0:00:00:08 DONE (2019-01-09 23:14) 0.1142g/s 718.4p/s 718.4c/s 5031C/s indianaford1900..brucemclane1900 +Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably +Session completed +``` + +`john` sauvegarde automatiquement **tous** les *hashes* qu'il retrouve dans sa +base de donnée qu'il stocke dans le fichier `~/.john/john.pot`. Il écrit aussi +un fichier journal afin de reprendre les opérations là où il les a arrêtées +(`~/.john/john.log`). + +Il est possible de retrouver les mots de passes que `john` a trouvé avec la +commande : + +``` +john -show -format=raw-MD5 logins.txt +``` + +Et le résultat : + +``` +Using default input encoding: UTF-8 +Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3]) +Remaining 7 password hashes with no different salts +Proceeding with single, rules:Wordlist +Press 'q' or Ctrl-C to abort, almost any other key for status +Warning: Only 15 candidates buffered for the current salt, minimum 24 +needed for performance. +0g 0:00:00:01 1/3 (2019-01-09 23:40) 0g/s 549.0p/s 549.0c/s 3843C/s Indianaforded..maximuscr0we +Almost done: Processing the remaining buffered candidate passwords, if any +Warning: Only 4 candidates buffered for the current salt, minimum 24 +needed for performance. +Proceeding with wordlist:/usr/share/john/password.lst, rules:Wordlist +Proceeding with incremental:ASCII +pwnetp (SylvesterBalboa) +avnrflr (bt1) +2g 0:00:51:49 3/3 (2019-01-10 00:32) 0.000643g/s 4060Kp/s 4060Kc/s 23260KC/s aslepred2..aslepruma +``` + +### La recherche incrémentale + +`john` va tester un ensemble de combinaisons, elle est communément appelée +*bruteforce*. Comme pour les précédentes commandes, il est **nécessaire** de +spécifier la fonction de hashage via le paramètre `-format=` : + +``` +john -format=raw-MD5 logins.txt +``` + + +Cette commande est bien plus longue que la précédente, les combinaisons à tester +étant très nombreuses. Voici le résultat : + +``` +Using default input encoding: UTF-8 +Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3]) +Remaining 7 password hashes with no different salts +Proceeding with single, rules:Wordlist +Press 'q' or Ctrl-C to abort, almost any other key for status +Warning: Only 15 candidates buffered for the current salt, minimum 24 +needed for performance. +0g 0:00:00:01 1/3 (2019-01-09 23:40) 0g/s 549.0p/s 549.0c/s 3843C/s Indianaforded..maximuscr0we +Almost done: Processing the remaining buffered candidate passwords, if any +Warning: Only 4 candidates buffered for the current salt, minimum 24 +needed for performance. +Proceeding with wordlist:/usr/share/john/password.lst, rules:Wordlist +Proceeding with incremental:ASCII +pwnetp (SylvesterBalboa) +avnrflr (bt1) +2g 0:00:51:49 3/3 (2019-01-10 00:32) 0.000643g/s 4060Kp/s 4060Kc/s 23260KC/s aslepred2..aslepruma +``` + +La commande a été interrompue, mais a trouvé deux mots de passe. Il est possible +de la lancer en changeant le format par `raw-SHA256`. + +### les dictionnaires + +Plus rapide que la technique précédente, celle-ci est basée sur une liste +définie de mots de passe> Voici la commande : + +``` +john -wordlist=top500movies.txt -format=raw-MD5 logins.txt +``` + +Et le résultat : + +``` +Using default input encoding: UTF-8 +Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3]) +Remaining 5 password hashes with no different salts +Press 'q' or Ctrl-C to abort, almost any other key for status +Le silence des agneaux (MaximusCrowe) +1g 0:00:00:00 DONE (2019-01-10 00:34) 25.00g/s 13500p/s 13500c/s 63600C/s The King of New York..Indiana Jones et le temple maudit +Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably +Session completed +``` + +## Utilisation avancée de john + +Nous avons vu ici trois utilisations de `john the ripper`, mais grâce à son +fichier de configuration situé dans le répertoire `/etc/john/john.conf`. En plus +des paramètres de bases du logiciel, il est possible de définit des règles plus +fine pour la recherche. + +Ces règle sont définie dans des sections commençant par + +``` +[List.Rules.] +``` + +Où `` est la nom donné à notre liste. Suive ensuite un ensemble de règle +étendant les recherche de bases. + +### Premier exemple : étendre notre dictionnaire + +Il est courant qu'un utilisateur choisisse un mot courant, puis ajoute son année +de naissance puis un caractère spécial à la fin, composant ainsi un mot de passe +correspondant à la politique de sécurité de son organisation. + +Nous allons donc étendre notre liste de mots en prenant en compte ceci. Parton +du principe que les personnes de l'organisation on moins de 40 ans, voici la +règle créée : + +``` +[List.Rules:MaListe] +$1$9$[7-9]$[0-9]$[.,;:@-_!#] +``` + +Le caractère `$` remplace un caractère et `[]` est là pour définir une plage de +caractères. + +Pour l'appliquer modifions notre dernière commande `john` comme ceci : + +``` +john -format=raw-MD5 -wordlist=top500movies.txt -rules=MaListe logins.txt +``` + +``` +Using default input encoding: UTF-8 +Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3]) +Remaining 4 password hashes with no different salts +Press 'q' or Ctrl-C to abort, almost any other key for status +Pulp Fiction1989! (IndianaFord) +Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably +Session completed +``` + +### Second exemple : modifier la recherche + +Prenons le cas d'un utilisateur qui aurait changé les voyelles d'un mot par des +chiffres pour en faire un mot de passe. Il est possible via des règles de tester +ce cas de figure. + +``` +[List.Rules:Voyelles] +s?v[0-9] +``` + + - `s` : remplacer + - `?v` : rechercher la classe v : les voyelles + - `[0-9]` : remplacer par la classe d : un chiffre + +Nous pouvons maintenant lancer la recherche avec la commande + +``` +john -format=raw-MD5 -wordlist=top500movies.txt -rules=Voyelles logins.txt +``` + +Et voilà la sortie : + +``` +Using default input encoding: UTF-8 +Loaded 8 password hashes with no different salts (Raw-MD5 [MD5 256/256 AVX2 8x3]) +Remaining 3 password hashes with no different salts +Press 'q' or Ctrl-C to abort, almost any other key for status +Sl1md1g M1ll11n11r1 (KevinSoze) +1g 0:00:00:00 DONE (2019-01-10 01:40) 16.66g/s 90000p/s 90000c/s 192800C/s Th9 Pl9y9r..9nd99n9 J9n9s 9t l9 t9mpl9 m99d9t +Use the --show --format=Raw-MD5 options to display all of the cracked passwords reliably +Session completed +``` + +## Bibliographie + + - [Site officiel](https://www.openwall.com/john/) de John the Ripper + - [Page Wikipedia](https://fr.wikipedia.org/wiki/John_the_Ripper)