SANS Holiday Hack Challenge 2016 Part 3

Hacking challenge

Aller je continue avec le SANS Holiday Hack Challenge 2016 Part 3. On est le 25 décembre, il est plus que temps de trouver « Santa »… Cette partie est plus conséquente que les deux premières et j’ai trouvé un peu plus dur aussi. Vous me direz ce que vous en avez pensé de votre côté.

I want a Cranberry Pi for Chrismas !

Donc la question 3.1 est :

« 5) What is the password for the « cranpi » account on the Cranberry Pi system? »

Logiquement, on va avoir besoin du Cranberry Pi. Si vous parlez à Holly Evergreen, elle vous indique qu’il faut trouver 5 pièces pour avoir un Cranberry Pi. Et pour une fois je vous laisse les trouver !

Ce n’est que de l’exploration du petit monde du jeu. C’est pas difficile, il n’y a rien de technique, parfois bien caché (et surtout je n’ai pas noté où je les ai trouvés), mais vous n’aurez pas besoin de moi sur cette partie.

Une fois que vous avez vos 5 éléments du Cranberry, retournez voir Holly, elle vous donnera le lien suivant pour télécharger l’image du système à utiliser avec votre Pi.

wget https://www.northpolewonderland.com/cranbian.img.zip

Elle vous dira également que l’image est protégée par un mot de passe et qu’il va falloir le trouver avant de pouvoir booter sur le système.

On commence par décompresser l’archive, cela vous donnera un joli fichier .img sur votre VM ubuntu.

cd ~/sans
unzip cranbian.img.zip

Alors, il est possible de monter de cette image sur votre système à l’aide de la commande mount, néanmoins elle « plante » si vous essayez tel quel :

mount cranbian-jessie.img -o loop,ro /mnt  
 NTFS signature is missing.
 Failed to mount '/dev/loop0': Invalid argument
 The device '/dev/loop0' doesn't seem to have a valid NTFS.
 Maybe the wrong device is used? Or the whole disk instead of a
 partition (e.g. /dev/sda, not /dev/sda1)? Or the other way around?

Le problème c’est le notre .img n’est pas l’image d’une partition mais d’un disque entier, ce qui signifie que l’on y trouve la table des partitions et le système d’amorçage de notre OS (le bootloader), et notre partition système. Avant de pouvoir monter une partition, on doit trouver où elle se trouve dans l’image du disque.

Cette valeur c’est l’offset que l’on doit multiplier par la taille des secteurs de notre partition. Je vous ai fait un schéma juste en dessous symbolisant un disque dur avec 40 secteurs. Disons que chaque secteur fait 64 octets, ici on devrait multiplier 64 par 22 pour obtenir notre offset : l’octet de départ à partir duquel monter notre partition.

sector #1Bootloader (start system@Sector22)
#11#12#13#14#15#16#17#18#19#20
#21Partition A (cranberry pi OS)
#38#39#40

Bref, dans la vraie vie, on peut récupérer toutes ces informations à l’aide de la commande fdisk :

fdisk -l cranbian-jessie.img
 Disk cranbian-jessie.img: 1,3 GiB, 1389363200 bytes, 2713600 sectors
 Units: sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disklabel type: dos
 Disk identifier: 0x5a7089a1
 
 Device               Boot  Start     End Sectors Size Id Type
 cranbian-jessie.img1        8192  137215  129024  63M  c W95 FAT32 (LBA)
 cranbian-jessie.img2      137216 2713599 2576384 1,2G 83 Linux

Fdisk nous indique que la taille des secteurs est de 512 octets (bytes en anglais). Reste à trouver l’offset à régler, il s’avère assez logiquement que l’on a deux partitions :

  1. cranbian-jessie.img1 ; et
  2. cranbian-jessie.img2

Qui doivent correspondre respectivement à la partition de boot et au système. A vu de nez, on va tenter la n°2 qui commence au secteur 137 216…

mkdir /mnt/img2
mount -t auto -o loop,offset=$((512*137216)) cranbian-jessie.img /mnt/img2

Au passage je vous mets un lien vers forensicswiki.org qui est toujours une source d’information fiable et connue, quand vous êtes coincé sur des sujets de forencics. Si votre partition ne monte pas, jetez donc un œil à dmesg avec la commande dmesg | tail. Notez enfin que je monte la partition en read-write (comme un gros sale) mais que dans la vraie vie il faudrait impérativement ajouter l’option ro pour éviter de modifier notre image source (mais ici on s’en cogne, on pourra toujours la re-télécharger en cas de pépins). Pour finir la solution était aussi donnée par le SANS

Bon ce n’est pas tout mais il faut encore qu’on trouve le mot de passe du compte cranpi sur notre système. Sur un système linux le mot de passe d’un compte système standard et séparé dans 2 fichiers : /etc/shadow et /etc/passwd. Le pourquoi est bien expliqué ici, donc je vous invite à récupérer ces fichiers sur votre partition fraîchement montée:

cd /mnt/img2
cp etc/passwd ~/sans
cp etc/shadow ~/sans

Il reste à casser ce mot de passe. Pour ça on va installer JohnTheRipper. Voir le tp sur ce sujet pour une installation from-source ou plus simplement dans ce cas :

apt-get install john

Ensuite, on construit un fichier utilisable par John avec la commande unshadow :

unshadow ~/sans/passwd ~/sans/shadow > cranpiUnixPasswordList

Vous aurez noté qu’un des elfes vous donne une astuce sur le sujet d’une Rock You Password List ? (Ainsi qu’une blague mémorable sur les géologistes)

Donc on télécharge puis  dé-zip cette liste :

wget http://downloads.skullsecurity.org/passwords/rockyou.txt.bz2
bunzip rockyou.txt.bz2

Et puis « go john » :

john --wordlist=rockyou.txt --users=cranpi cranpiUnixPasswordList
 Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
 Press 'q' or Ctrl-C to abort, almost any other key for status
 0g 0:00:00:02 0.28% (ETA: 15:01:19) 0g/s 11107p/s 11107c/s 11107C/s dumbo..truckin
 yummycookies (cranpi)
 1g 0:00:00:40 DONE (2016-12-16 14:50) 0.02485g/s 11403p/s 11403c/s 11403C/s 5555577..tuneup
 Use the "--show" option to display all of the cracked passwords reliably
 Session completed

Pour la petite histoire au bout de 5 minutes, j’ai commencé à trouver le temps long. Donc j’ai regardé sur reddit combien de temps ça risquait de prendre : les gens indiquent entre quelques minutes et 6h… Bon alors j’avoue, j’ai un peu craqué et basculer sur notre GPGPU du boulot histoire de gagner du temps ! Pour vous donner un ordre d’idée ma VM VboxUbuntu et ses 2 CPU/2048Mo RAM à mis 10min à faire 1% de la liste. La machine du boulot a mis 40 secondes à trouver…

Une fois que vous avez votre mot de passe, il suffit de le dire à Holly pour avoir un cranberry pi 100% fonctionnel dans le jeu et pouvoir commencer à attaquer les différent terminaux dans le jeu demandé dans la question 2 du SANS Holiday Hack Challenge 2016 Part 3.
SANS Holiday Hack Challenge 2016 Part 3

SANS Holiday Hack Challenge 2016 Part 3, question 6

Et voilà. On n’a plus qu’à partir à l’assaut des différents terminaux. Je vous remets la question :

6) How did you open each terminal door and where had the villain imprisoned Santa?

Elf House #2

Le premier se trouve dans le village, on se connecte dans la maison-elfe n°2 et on tombe sur :

******************************************************************************** 
*To open the door, find both parts of the passphrase inside the /out.pcap file *
********************************************************************************
scratchy@fc08891e9215:/$

On voit effectivement un fichier out.pcap à la racine, mais détenu par itchy (alors qu’on est scratchy) avec seulement les droits en read pour itchy. Alors ici j’ai mis (beaucoup trop) longtemps à comprendre que l’on pouvait utiliser sudo pour usurper l’identité de itchy. On voit ça très bien avec la commande suivante :

scratchy@fc08891e9215:/$ sudo -l
sudo: unable to resolve host fc08891e9215
Matching Defaults entries for scratchy on fc08891e9215: 
    env_reset, mail_badpass, 
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User scratchy may run the following commands on fc08891e9215: 
    (itchy) NOPASSWD: /usr/sbin/tcpdump 
    (itchy) NOPASSWD: /usr/bin/strings

Notez qu’ici on ne peut pas exécuter des commandes « as root », comme on a tendance à le faire habituellement avec sudo, mais en tant qu’itchy. Et on peut exécuter strings ou tcpdump en usurpant ses droits, ici avec Strings :

sudo -u itchy strings out.pcap

Qui ne retourne alors que du bruit… on va devoir filtrer un peu. Donc habituellement j’aurai sorti le pcap dans un Wireshark pour être plus à mon aise. Ici, ça risque de pendre plus de temps à trouver comment exfiltrer le pcap qu’utiliser les outils à notre dispositions. Et, après avoir fait un tour sur la page de man de strings, plus quelques tentatives « à vue » infructueuses, j’ai fini par tomber sur :

# recherche de texte encodé en "Unicode UTF-16"
sudo -u itchy strings --encoding=l out.pcap
part2:ttlehelper

Ce qui nous donne un indice sur la première partie de ce qu’on cherche: elle doit être de la forme « part1=xxxx« . Donc un retente nos différentes commandes strings avec un grep bien choisi derrière et on trouve :

sudo -u itchy strings out.pcap | grep part
<input type="hidden" name="part1" value="santasli" />

On a trouvé notre mot de passe pour ce terminal. Ce qui vous permet d’entrer dans la pièce secrète !

santaslittlehelper

SANS Holiday Hack Challenge 2016 Part 3

Et voilà, Next du coup !

Workshop – Santa office

Dans l’atelier de Santa, c’est la première porte à gauche dans l’escalier. Celui-ci, il m’a bien fait marrer, en gros le fichier contenant le mot de passe est planqué dans une arborescence de dossier « un peu casse pied ».

******************************************************************************** 
* To open the door, find the passphrase file deep in the directories.          *
********************************************************************************

Arborescence que vous visualiserez bien avec un find :

find
.
./.bashrc
./.doormat
./.doormat/. 
./.doormat/. / 
./.doormat/. / /\
./.doormat/. / /\/\\
./.doormat/. / /\/\\/Don't Look Here!
./.doormat/. / /\/\\/Don't Look Here!/You are persistent, aren't you?
./.doormat/. / /\/\\/Don't Look Here!/You are persistent, aren't you?/'
./.doormat/. / /\/\\/Don't Look Here!/You are persistent, aren't you?/'/key_for_the_door.txt
[...]

Le seul truc que vous avez besoin de savoir c’est que le caractère \ vous permet d’échapper les spéciaux.

Deux options, soit vous êtes un guerrier et vous faites un cd en une seule fois, soit en plusieurs étapes comme ci-dessous pour descendre jusqu’au dossier qui nous intéresse.

cd .doormat                              # Dossier "caché", si on fait ls on ne le voit pas
cd .\                                    # notez l'espace après le backslash
cd \                                     # dossier nommé "espace"
cd \\                                    # dossier nommé '\'
cd \\\\                                  # dossier nommé '\\'
cd Don\'t\ Look\ Here!                   # presque simple : seulement des char spéciaux
cd You\ are\ persistent\,\ aren\'t\ you? # mais ça commence à être relou...^^
cd \'                                    # Pourquoi tant de haine ?
# et on est enfin dans le bon dossier :
cat key_for_the_door.txt
key: open_sesame

Exercice : Je n’ai pas pris le temps de le faire mais, pour le fun : si quelqu’un se sent de mettre en commentaire la commande pour faire tout ça dans un seul cd, je prends !

Sauf que cette porte nous amène à un autre terminal !

Wargames bonus !

GREETINGS PROFESSOR FALKEN.

Difficile si on l’a pas la référence au film WarGames (Pour ma part, il aurait fallu que je sois né en 1983 déjà)

Bref, Quand vous avez compris ça, il suffit de « refaire le film » en tapant exactement les mêmes réponses que dans le film. Au passage j’ai découvert ce projet similaire sur Github si ce film vous manque.

Une fois que vous avez compris ça, il faut saisir la séquence suivante (et avoir un film de plus à voir dans sa liste…) :

GREETINGS PROFESSOR FALKEN.

Hello.

HOW ARE YOU FEELING TODAY?

I'm fine. How are you?

EXCELLENT, IT'S BEEN A LONG TIME. CAN YOU EXPLAIN THE REMOVAL OF YOUR USER ACCOUNT ON 6/23/73?

People sometimes make mistakes.

YES THEY DO. SHALL WE PLAY A GAME?

Love to. How about Global Thermonuclear War?

WOULDN'T YOU PREFER A GOOD GAME OF CHESS?

Later. Let's play Global Thermonuclear War.

FINE.

Ce qui donne l’affichage suivant :

SANS Holiday Hack Challenge 2016 Part 3

Nous jouons les russes dans le films donc :

2
AWAITING FIRST STRIKE COMMAND
-----------------------------

PLEASE LIST PRIMARY TARGETS BY
CITY AND/OR COUNTRY NAME:

Las Vegas

LAUNCH INITIATED, HERE'S THE KEY FOR YOUR TROUBLE: 
LOOK AT THE PRETTY LIGHTS

Qui nous permet d’entrer dans l’armoire juste à côté.

Qui donne accès à un couloir, avec une porte et un mot de passe, mais pas de terminal à côté. Donc hors question 3, et pas dans cet article, on passe à la suite.

Workshop 2 – DFER

Bon il y a un autre terminal dans l’atelier prêt de l’étable des rennes.

********************************************************************************
*    Find the passphrase from the wumpus. Play fair or cheat; it's up to you.  *
********************************************************************************

Wumpus, c’est un jeu tout con que je ne connaissais pas. Ce n’est pas compliqué, on jette un coup d’œil au man avant, et aux indices sur reddit. Pour ma part j’ai joué le jeu (une seule tentative…). Mais je pense qu’on peut tricher en limitant le nombre de pièces, ayant plus de flèches et plus précipices, etc. à l’aide des options indiquées dans le man… ou vous pouvez aussi reverser le code, à vous de voir !

Je vous invite à jouer au jeu :

./wumpus

Ce n’est pas très compliqué, sans tricher chez moi ça m’a pris bien 5 minutes chrono (au total lecture du man et de Wikipédia inclus):

elf@1679c8265c45:~$ ./wumpus 
Instructions? (y-n) y
Sorry, but the instruction file seems to have disappeared in a
puff of greasy black smoke! (poof)

You're in a cave with 20 rooms and 3 tunnels leading from each room.
There are 3 bats and 3 pits scattered throughout the cave, and your
quiver holds 5 custom super anti-evil Wumpus arrows. Good luck.

You are in room 17 of the cave, and have 5 arrows left.
*sniff* (I can smell the evil Wumpus nearby!)
There are tunnels to rooms 4, 10, and 11.
Move or shoot? (m-s) m
To which room do you wish to move? 4

You are in room 4 of the cave, and have 5 arrows left.
*sniff* (I can smell the evil Wumpus nearby!)
There are tunnels to rooms 10, 11, and 17.
Move or shoot? (m-s) s 11

You are in room 4 of the cave, and have 4 arrows left.
*sniff* (I can smell the evil Wumpus nearby!)
There are tunnels to rooms 10, 11, and 17.
Move or shoot? (m-s) s 10

You are in room 4 of the cave, and have 3 arrows left.
*sniff* (I can smell the evil Wumpus nearby!)
There are tunnels to rooms 10, 11, and 17.
Move or shoot? (m-s) s 17

You are in room 4 of the cave, and have 2 arrows left.
*sniff* (I can smell the evil Wumpus nearby!)
There are tunnels to rooms 10, 11, and 17.
Move or shoot? (m-s) m 10

You are in room 10 of the cave, and have 2 arrows left.
*rustle* *rustle* (must be bats nearby)
There are tunnels to rooms 3, 14, and 17.
Move or shoot? (m-s) m 3

*flap* *flap* *flap* (humongous bats pick you up and move you!)
You are in room 10 of the cave, and have 2 arrows left.
*rustle* *rustle* (must be bats nearby)
There are tunnels to rooms 3, 14, and 17.
Move or shoot? (m-s) m 
To which room do you wish to move? 3

*flap* *flap* *flap* (humongous bats pick you up and move you!)
You are in room 15 of the cave, and have 2 arrows left.
*sniff* (I can smell the evil Wumpus nearby!)
There are tunnels to rooms 2, 4, and 8.
Move or shoot? (m-s) s 8

*thwock!* *groan* *crash*

A horrible roar fills the cave, and you realize, with a smile, that you
have slain the evil Wumpus and won the game! You don't want to tarry for
long, however, because not only is the Wumpus famous, but the stench of
dead Wumpus is also quite well known, a stench plenty enough to slay the
mightiest adventurer at a single whiff!!

Passphrase:
WUMPUS IS MISUNDERSTOOD

Et c’est bon pour celui-ci, ça vous amène ici : RAS, sauf un secret-coin à récupérer.

SANS Holiday Hack Challenge 2016 Part 3
En 2016.

Workshop – Train Station

Allez la dernière console, on y est presque, celle-ci j’ai mis une bonne heure à m’arracher les cheveux dessus. C’était pas bien compliqué pourtant. Mais je n’ai pas du tout l’habitude d’utiliser la commande less comme ça. Bref, quand on se connecte on obtient :

Train Management Console: AUTHORIZED USERS ONLY
 ==== MAIN MENU ====
STATUS: Train Status
BRAKEON: Set Brakes
BRAKEOFF: Release Brakes
START: Start Train
HELP: Open the help document
QUIT: Exit console

Alors dans le fichier d’aide on a un gros indice :

menu:main> HELP
[...]
**HELP** brings you to this file. If it's not here, this console cannot do it, unLESS you know something I don't.
[...]

Donc on jette un coup d’œil l’énorme man de LESS, celui-ci est vraiment pas franchement limpide au premier jet… Mais en gros, on peut taper des commandes dans less, un peu comme dans un prompt et accéder à d’autres fichiers.

Bref vous revenez dans le HELP. Notez au passage qu’il vous indique en bas qu’il affiche un fichier dans /home/conductor/. Une fois dans le fichier d’aide affiché avec less (ce que vous aviez du remarquer quand même) :

:e

Ce qui vous fera apparaître un prompt Examine :, On va lui demander à accéder à tous les fichiers de la home de conductor, pour ça tapez :

Examine : /home/conductor/*

Ce qui affiche :

"/home/conductor/ActivateTrain" may be a binary file. See it anyway? y

Après avoir regardé, il n’y a rien qui nous intéresse dedans, mais en bas on voit /home/conductor/ActivateTrain (file 3 of 3), donc on a deux autres fichiers ouvert : l’aide probablement et un autre, que l’on aimerai bien voir. Pour naviguer entre les fichiers ouverts dans  less :

  • :n     # fichier suivant ;
  • :p     # fichier précédent.

Le fichier précédent s’appel : /home/conductor/Train_Console. Il s’agit du script de la console du train et on y trouve une variable PASS :

PASS=’24fb3e89ce2aa0ea422c3d511d40dd84′

Qui est utilisée un peu plus bas dans le script pour :

read -s -p "Enter Password: " password [ "$password" == "$PASS" ] && QUEST_UID=$QUEST_UID ./ActivateTrain || echo "Access denied

Du coup, on se dit qu’on est bien là… On a aussi lu dans l’aide que pour démarrer le train on doit désactiver les freins d’abord. Soit, dans le terminal :

menu:main> BRAKEOFF
*******CAUTION*******
The brake has been released!
*******CAUTION*******
off

Puis START pour lancer la machine :

menu:main> START
Checking brakes....
Enter Password:

Et ça marche, appuyer sur la touche Entrer pour continuer !

SANS Holiday Hack Challenge 2016 Part 3
Back to the Futur

Et vous voilà revenu en 1978 ! De là cela ne vous prendra pas longtemps pour trouver SANTA et finir la première moitié du challenge ! Il était temps, on est le 25 décembre et je viens juste de libérer le père noël ce matin. En espérant qu’il a pu vous donner vos cadeaux (si vous avez été sage…)!

SANS Holiday Hack Challenge 2016 Part 3
en 1978…

Conclusion

C’est tout pour la solution SANS Holiday Hack Challenge 2016 Part 3. Alors n’attendez pas de solutions pour les questions 4,5 et 6 avant mi-janvier (au mieux), voir pas du tout (au pire). Je serais en train de me les geler dans un refuge non-chauffé et non-gardé à 2000m d’altitude en Lauzière et ce jusqu’au 02/01, donc juste avant la fin du challenge.

D’ici-là, j’espère que ça vous aura intéressé déjà. Pour ma part j’ai trouvé la partie 3 un peu longue et disproportionnée par rapport à la 1 et 2. En plus, je n’ai pas trop aimé bosser sur les terminaux dans le jeu en ligne : je n’aime pas être ne pas être dans mon petit terminal « bibiche à moi, customisé juste comme je l’aime« . Et un terminal c’est comme une capotte tablette de chocolat, ça ne se partage pas !

Au final, je me suis quand même amusé. j’ai découvert 2-3 trucs sur sudo et redécouvert le programme less surtout. Et puis les quelques petit jeux m’ont bien fait marrer. Donc je suis content, c’est le principal. J’espère que mes 3 articles vous auront aidé, et on se revoit en janvier pour la solution des trois parties restantes ! Laissez des commentaires, ça me fait toujours plaisir de savoir ce que vous en avez pensez !

Sur ce, je vous souhaite à tous un  Joyeux noël et une bonne année 2017, pleine de hacking et forensics à tous !

Geekeries.org, à la montagne aussi !

 

4 commentaires on “SANS Holiday Hack Challenge 2016 Part 3

  1. Une fois que tu connaissais le nom du fichier, tu pouvais utiliser la commande :  » find . -name key* -exec cat {} \;  » pour afficher directement le contenu du fichier sans avoir à traverser les répertoires manuellement 🙂

    Et bien joué pour le write-up !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.