Iniciamos como siempre observando los puertos abiertos en la maquina.
nmap -sCV -p80,8080 172.16.241.216 -oN target.txt
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-31 15:57 EST
Nmap scan report for offensive.thl (172.16.241.216)
Host is up (0.00070s latency).
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.62 ((Debian))
|_http-generator: WordPress 6.7.1
|_http-server-header: Apache/2.4.62 (Debian)
|_http-title: rodgar
8080/tcp open http Node.js Express framework
|_http-title: Error
MAC Address: 00:0C:29:6E:9D:15 (VMware)
Versiones y servicios que corren para cada uno de los puertos.
Si vamos a la web observamos un servicio simple.
whatweb -v http://offensive.thl/
WhatWeb report for http://offensive.thl/
Status : 200 OK
Title : rodgar
IP : 172.16.241.216
Country : RESERVED, ZZ
Summary : Apache[2.4.62], HTML5, HTTPServer[Debian Linux][Apache/2.4.62 (Debian)], MetaGenerator[WordPress 6.7.1], Script, UncommonHeaders[link], WordPress[6.7.1]
Detected Plugins:
[ Apache ]
The Apache HTTP Server Project is an effort to develop and
maintain an open-source HTTP server for modern operating
systems including UNIX and Windows NT. The goal of this
project is to provide a secure, efficient and extensible
server that provides HTTP services in sync with the current
HTTP standards.
Version : 2.4.62 (from HTTP Server Header)
Google Dorks: (3)
Website : http://httpd.apache.org/
[ HTML5 ]
HTML version 5, detected by the doctype declaration
[ HTTPServer ]
HTTP server header string. This plugin also attempts to
identify the operating system from the server header.
OS : Debian Linux
String : Apache/2.4.62 (Debian) (from server string)
[ MetaGenerator ]
This plugin identifies meta generator tags and extracts its
value.
String : WordPress 6.7.1
[ Script ]
This plugin detects instances of script HTML elements and
returns the script language/type.
[ UncommonHeaders ]
Uncommon HTTP server headers. The blacklist includes all
the standard headers and many non standard but common ones.
Interesting but fairly common headers should have their own
plugins, eg. x-powered-by, server and x-aspnet-version.
Info about headers can be found at www.http-stats.com
String : link (from headers)
[ WordPress ]
WordPress is an opensource blogging system commonly used as
a CMS.
Version : 6.7.1
Aggressive function available (check plugin file or details).
Google Dorks: (1)
Website : http://www.wordpress.org/
HTTP Headers:
HTTP/1.1 200 OK
Date: Tue, 31 Dec 2024 21:01:00 GMT
Server: Apache/2.4.62 (Debian)
Link: <http://offensive.thl/index.php/wp-json/>; rel="https://api.w.org/"
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 8864
Connection: close
Content-Type: text/html; charset=UTF-8
Si hacemos un whatweb observamos que hay un CMS wordpress en especifico.
wfuzz -c -t 200 --hc=403,404 -w /usr/share/wordlists/dirb/common.txt -u 'http://offensive.thl/FUZZ'
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://offensive.thl/FUZZ
Total requests: 4614
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000001991: 301 9 L 28 W 315 Ch "images"
000002021: 301 0 L 0 W 0 Ch "index.php"
000002145: 301 9 L 28 W 319 Ch "javascript"
000004485: 301 9 L 28 W 317 Ch "wp-admin"
000004501: 301 9 L 28 W 320 Ch "wp-includes"
000004495: 301 9 L 28 W 319 Ch "wp-content"
000000001: 200 213 L 1261 W 38827 Ch "http://offensive.thl/"
Si hacemos una enumeracion de sub/directorios pues llegamos a ellos pero el unico que nos muestra contenido es images los demas no tenemos directory listen o directamente un 404.
La imagen ahora vamos a descargarla y haber si hay algo.
Vamos por punto.
Primero intentamos extraer el contenido que haya usando steghide, tiene contraseña.
Asi que usamos esta segunda herramienta llamada stegseek que es para hacer fuerza bruta directamente.
Ultimo punto obtenemos credenciales para extraer el contenido, lo extraemos y tenemos una contraseña que debido al nombre de la imagen es para el panel de autenticacion del wordpress.
wpscan --url http://offensive.thl --enumerate u
[i] User(s) Identified:
[+] administrator
| Found By: Rss Generator (Passive Detection)
| Confirmed By:
| Wp Json Api (Aggressive Detection)
| - http://offensive.thl/index.php/wp-json/wp/v2/users/?per_page=100&page=1
| Author Id Brute Forcing - Author Pattern (Aggressive Detection)
Tenemos un usario y una contraseña pero no podemos acceder al panel, vamos a ver el puerto 8080 haber que hay por ahi.
Puerto 8080
wfuzz -c -t 200 --hc=403,404 -w /usr/share/wordlists/dirb/common.txt -u 'http://offensive.thl:8080/FUZZ'
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer *
********************************************************
Target: http://offensive.thl:8080/FUZZ
Total requests: 4614
=====================================================================
ID Response Lines Word Chars Payload
=====================================================================
000001887: 200 0 L 17 W 203 Ch "Help"
000001886: 200 0 L 17 W 203 Ch "help"
000002376: 200 0 L 1 W 176 Ch "ls"
000000777: 500 0 L 3 W 31 Ch "cat"
Tenemos 4 directorios observaremos el help, que suena a panel de ayuda.
Help nos muestra este panel.
Con el parametro ls, nos dirigimos a la ruta plugins del wordpress que corre para observar que plugins hay y asi observar que nos puede estar impidiendo llegar al panel del wordpress.
WPS Hide Login es un complemento ligero que te permite cambiar de forma fácil y segura la URL de la página del formulario de inicio de sesión a lo que desees.
Esto nos esta bloqueando.
Borramos el plugins con la funcion que tenemos rm. Ahora ya deberiamos poder acceder al panel administrativo del wordpress.
Ya podemos llegar y iniciamos session con las credenciales que tenemos.
Nos enviamos una revshell usando el plugin que hay ahi.
Buscando la forma de escalar privilegios, encontramos un servicio que corre interno en el puerto 5000 puerto que desde fuera no logramos ver pero internamente si.
Vamos a hacer un portfor usando chisel, yo useo chisel.
En estos articulos explico lo que vamos a hacer acontinuacion.
Como punto numero uno nos ponemos como cliente desde nuestra maquina atacante.
Y como segundo nos conectamos como cliente.
Ahora que podemos llegar al puerto observamos este panel donde debemos averigurar la combinacion correcta ya que ya tenemos las credenciales.
Interceptamos la peticion con Burp y ahora nos creamos una lista de posibles pings usando seq.
Ok lo tenemos listo fijado ya.
Este codigo ping es diferente con su codigo de estado a los demas lo probaremos.
Entramos a un panel que lo ejecuta maria.
Nos enviamos una revshell.
Primer punto podemos ejecutar una aplicacion en el directorio de maria, que hace un cat del /etc/shadow donde no me lo muestra todo si no que solo las primeras lineas lo que podria ser un indicativo que se esta usando head para hacerlo.
Y segundo tenemos la flag de user.
Si hacemos un strings para ver las cadenas imprimibles filtrando por head observamos que lo estan empleando dos veces de manera relativa y absoluta para catear las primeras lineas del etc/shadow.
Esto lo podemos deribar a un PATH Hijaking.
Punto uno nuestro directorio actual /home/maria.
Segundo observamos donde inicia el recorrido.
Tercero exportamos el PATH para que el recorrido no inicie por /usr/ si no por /home/maria.