stamin4
  • whoami
  • HTB Academy
    • Introduction to Academy
    • Learning Process
    • Vulnerability Assessment
    • Web Requests
    • Introduction to Networking
    • Linux Fundamentals
    • Brief Intro to Hardware Attacks
    • Setting Up
    • Using the Metasploit Framework
    • Security Incident Reporting
    • Introduction to Web Applications
    • JavaScript Deobfuscation
    • Attacking Web Applications with Ffuf
    • Windows Fundamentals
    • File Inclusion
  • HTB Machines
    • Windows
      • 🟢Easy
      • 🟠Medium
      • 🔴Difficult
      • 🟣Insane
    • Linux
      • 🟢Easy
        • Cap
      • 🟠Medium
      • 🔴Difficult
      • 🟣Insane
  • OverTheWire
    • Bandit
      • Nivel 0
      • Nivel 1
      • Nivel 2
      • Nivel 3
      • Nivel 4
      • Nivel 5
      • Nivel 6
      • Nivel 7
      • Nivel 8
      • Nivel 9
      • Nivel 10
  • Base de datos
    • SQL
      • SELECT queries 101
      • Queries with constraints (Pt. 1)
      • Queries with constraints (Pt. 2)
      • Filtering and sorting Query results
      • Simple SELECT Queries
      • Multi-table queries with JOINs
      • OUTER JOINs
      • A short note on NULLs
      • Queries with expressions
      • Queries with aggregates (Pt. 1)
      • Queries with aggregates (Pt. 2)
      • Order of execution of a Query
      • Inserting rows
      • Updating rows
      • Deleting rows
      • Creating tables
      • Altering tables
      • Dropping tables
  • PortSwigger
    • Path Traversal
  • Dockerlabs
    • Trust
    • Firsthacking
    • Upload
Powered by GitBook
On this page
  • Overview
  • HyperText Transfer Protocol (HTTP)
  • HTTP Requests and Responses
  • HTTP Headers
  • GET
  • POST
  • CRUD API
  1. HTB Academy

Web Requests

Overview

Para mí, este módulo me permitió aclarar conceptos y afianzar conocimientos básicos sobre aplicaciones web, que son importantes para testear su seguridad.

Aprendí a reconocer la estructura de una URL con sus componentes esenciales, como el protocolo, el host, el puerto, la ruta, entre otros. Y que incluso es posible autenticarse desde la propia URL de la siguiente forma: http://user:password@host:port/path. En su momento me pareció muy curioso :)

Hay mucha info sobre cómo funcionan los protocolos HTTP y HTTPS. Enseña cómo trabajar con distintos métodos HTTP, como GET, POST, PUT y DELETE, así como también a analizar las cabeceras de solicitud y de respuesta.

Me sirvió para familiarizarme con cURL, una herramienta de línea de comandos que supone una forma muy práctica y rápida para realizar solicitudes HTTP directamente desde la terminal. Aunque sin dudas, la parte más divertida fue la de aprender a interactuar con una API para leer, crear, modificar y eliminar datos.

A continuación, los ejercicios...


HyperText Transfer Protocol (HTTP)

El ejercicio consiste en utilizar cURL para descargar el archivo que se encuentra en '/download.php' en el servidor. Para eso, utilizamos el siguiente comando:

$ curl -s -O http://94.237.54.50:33926/download.php

-s para silenciar el verbose de cURL.

-O para guardar el output en un archivo del mismo nombre del recurso al que apuntamos.

Ahora, la flag está almacenada en el archivo download.php en la ruta actual de trabajo:

HTB{64$!c_cURL_****}.


HTTP Requests and Responses

Lanzamos una petición al servidor, usando el parámetro -v para ver las cabeceras tramitadas tanto en la solicitud como en la respuesta.

$ curl http://94.237.54.50:33926 -v
*   Trying 94.237.54.50:33926...
* Connected to 94.237.54.50 (94.237.54.50) port 33926 (#0)
> GET / HTTP/1.1
> Host: 94.237.54.50:33926
> User-Agent: curl/7.88.1
> Accept: */*
> 
< HTTP/1.1 200 OK
< Date: Tue, 23 Jan 2024 16:38:02 GMT
< Server: Apache/2.4.41 (Ubuntu)
< Vary: Accept-Encoding
< Content-Length: 348
< Content-Type: text/html; charset=UTF-8
< 
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Blank Page</title>
</head>

<body>
    This page is intentionally left blank.
    <br>
    Using cURL should be enough.
</body>

* Connection #0 to host 94.237.54.50 left intact

Primera pregunta: ¿Cuál es el método HTTP utilizado al interceptar la petición? Como podemos observar, se trata de una petición por el método GET.

La siguiente pregunta nos solicita encontrar la versión de Apache del servidor en las cabeceras de respuesta (el formato de la respuesta es X.Y.ZZ). Se trata de la versión 2.4.41.


HTTP Headers

Para encontrar la flag, accedemos a la página web desde el navegador. Nos vamos a encontrar con un sitio que se ve así:

Abrimos la Herramientas de Desarrollador con Ctrl + Shift + I y nos dirigimos a la pestaña Network.

Recargamos la página para que se cargue el recurso que contiene la flag.

Nos dirigimos a la URL que contiene la flag: HTB{p493_r3qu3$t$_*******}


GET

Abrimos el navegador y colocamos la dirección IP del target. Nos autenticamos como el usuario admin con la contraseña admin.

Nos encontramos con un buscador de ciudades. Sin embargo, no se encuentra funcional.

Para encontrar la flag, abrimos una consola y ejecutamos el siguiente comando indicando el recurso /search.php con 'search' como parámetro y 'flag' como valor de dicho parámetro.

$ curl http://admin:admin@83.136.254.199:51232/search.php?search=flag
flag: HTB{curl_******}

POST

Nos logueamos en la página con las credenciales admin:admin.

Abrimos las Herramientas de Desarrollador y vamos a la pestaña Storage. Allí se almacena una cookie de sesión.

Ahora usamos esa cookie para arrastrar la sesión sin necesidad de incluir las credenciales. Buscamos la flag a través de una petición por POST en formato JSON con cURL.

$ curl -X POST http://83.136.249.57:35697/search.php -b 'PHPSESSID=eir0gpnp0anjeeuehpq4khqnkd' -H 'Content-Type: application/json' -d '{"search":"flag"}'
["flag: HTB{p0$t_********}"]

CRUD API

Primero lanzamos una petición a la API para ver todas las ciudades:

$ curl -s http://94.237.56.188:32795/api.php/city/

Actualizamos el nombre de cualquier ciudad (en mi caso, elegí Baltimore) a 'flag'.

$ curl -X PUT http://94.237.56.188:32795/api.php/city/baltimore -d '{"city_name":"flag", "country_name":"anotherCountry"}' -H 'Content-Type: application/json'

Borramos cualquier ciudad (en mi caso, Detroit).

$ curl -X DELETE http://94.237.56.188:32795/api.php/city/detroit

Finalmente, buscamos por una ciudad llamada 'flag' y con eso finalizamos el módulo.

$ curl -s http://94.237.56.188:32795/api.php/city/flag
[{"city_name":"flag","country_name":"HTB{crud_4p!_***********}"}]
PreviousVulnerability AssessmentNextIntroduction to Networking

Last updated 1 year ago