Apuntes Hack The Box

Apuntes básicos:

Primero hacer ping a la ip para vertificar si esta recibe paquetes

Después debemos realizar un escaneo de puertos con nmap

sudo nmap -sV -O {IP} 

Como vemos el comando lleva

-sV sirve para la Detección de versiones

-O sirve para la Detección del sistema operatico

Después de ejecutar el código nos damos cuenta que tiene un servicio llamado FTP (File Transfer Protocol) el que se encarga de transferir archivos de manera manual o automática por medio de client-server, a veces está mal configurada y se puede explotar. Tener en cuenta servicios adicionales como SSH/HTTPD (Secure Shell Protocol/Web Server) que permite recibir y enviar archivos que se pueden usar para configurar el servidor web o servir registros a una fuente externa.

JuveYell

Como se ve en la imagen tenemos sus puerto con sus servicios, tener en cuenta port 21:ftp port 22:SSH port 80:Web Server pero como es una máquina simple no tendrá seguridad y podremos ingresar con los siguientes comandos:

ftp {IP}
Connected to {IP}.
220 (vsFTPd 3.0.3)
Name ({IP }:{username}):
331 Please specify the password.
Password:

Nos pide un usuario y contraseña el cual si está mal configurado se podrá acceder con username: anonymous y con cualquier contraseña ya que el servicio ignorará la contraseña.

smbclient

Alojado en el puerto 445, utilizaremos un script llamado smbclient -h

smbclient -L {IP}

–List = Host

Con el comando L se selecciona el hostde destino para la solicitud de conexión, con esto esperamos la siguiente respuesta aunque no siempre es igual en todas las maquinas:

    ADMIN$: Los recursos compartidos de red ocultas creado por windows, 
	    permite tener acceso remoto(no se elimina, solo se deshabilitan)
        C$: Sistema Operativo
      IPC$: Recursos compartidos
WorkShares: Custom Share

Para poder ver los archivos que se encuentran dentro de estos recursos compartidos usamos el sgte comando:

smbclient \\\{IP}\\{Recurso-Compartido}

xfreerdp

Alojado en el puerto 3389 normalmente usado para RDP(Remote Desktop Protocol), utilizaremos un script llamado xfreerdp que permitirá ver la pantalla de la victima.

xfreerdp [file] [options] [/v:<server>[:port]]

Como es una maquina simple solo usaremos el sgte comando xfreerdp /v:{IP}, nos pedirá un usuario y contraseña podríamos usar los sgtes nombres:”admin, administrator, root, user”

xfreerdp /v:{IP} /u:Administrator

SQL Injection

Modificamos el comando aumentandolé un nuevo parametro:

sudo nmap -sC -sV -O {IP}

-sC sirve para realizar un analisis de secuencia de comandos. Es equivalente a –script = default.

Cuando tenemos el puerto: 80 abierto que es referente a un servidor web, como ya sabemos las páginas web tienen directorios los cuales tenemos que visitar para poder encontrar una vulnerabilidad y poder explotarla, directorios como: Home , About , Contact , Register , and Log-in pages Para esto usaremos una herramienta llamada GoBuster que se encargará de encontrar esos directorios.

Lo instalamos:

go get && go build
go install
gobuster --help
SQL Service 
  →Database
   →Tables
    →Columns↘
             Data	
    →Rows   ↗

En el “grafico” anterior vemos como funciona un servicion SQL

       User Search                 Permissions Check
       ___________                 _________________
      /           ↘               /                 ↘	 
Client             Web Aplication                    SQL Service 
   
HTTP 200 la pagína o recurso existe así que procede con el envio de los datos
     404 no encontrado, la página o recurso no existe
     302 página o recurso encontrado pero mediante redireción

Ejemplo de SQL Injection

<?php
mysql_connect("localhost", "db_username", "db_password"); 
# Connection to the SQLDatabase.
mysql_select_db("users"); 
# Database table where user information is stored.

$username=$_POST['username']; 
# User-specified username.
$password=$_POST['password']; 
#User-specified password.

$sql="SELECT * FROM users WHERE username='$username' AND password='$password'";
# Query for user/pass retrieval from the DB.

$result=mysql_query($sql);
# Performs query stored in $sql and stores it in $result.

$count=mysql_num_rows($result);
# Sets the $count variable to the number of rows stored in $result.

if ($count==1){
  # Checks if there's at least 1 result, and if yes:
 $_SESSION['username'] = $username;
 # Creates a session with the specified $username.
 $_SESSION['password'] = $password;
 # Creates a session with the specified $password.
 header("location:home.php");
 # Redirect to homepage.
}
else {
 # If there's no singular result of a user/pass combination:
  header("location:login.php");
 # No redirection, as the login failed in the case the $count 
 #variable is not equal to
 #1, HTTP Response code 200 OK.
}
?>

Esto es un concepto básico pero util en algunos casos como se mira en el código php el # sirve para hacer comentarios, lo podemos usar para ingresar como un usuario admin usando un fallo en el código ingresando así

user: admin'#
password: #

En verdad la contraseña no importa ya que con el # lo toma como un comentario y ponemos cualquier cosa en contraseña ya que no podemos ingresar si no colocamos un texto en ese recuadro.

Fuzzing

Estaremos usando la herramienta WFUZZ con la siguiente sintaxis

wfuzz -c --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt  -u http://IP/FUZZ

Para buscar subdominios se cambia la sintaxis por la siguiente:

wfuzz -c --hc=404,400 -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt  -H "Host: FUZZ.IP" http://IP.htb/
wfuzz -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u IP -H "Host: FUZZ.IP" --hh 0

Server interno

Para montarnos nuestro propio servidor python lo usamos con el siguiente comando

python3 -m http.server