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
  • Simple case
  • Traversal sequences blocked with absolute path bypass
  • Traversal sequences stripped non-recursively
  • Traversal sequences stripped with superfluous URL-decode
  • Validation of start of path
  • Validation of file extension with null byte bypass
  1. PortSwigger

Path Traversal

PreviousPortSwiggerNextDockerlabs

Last updated 1 year ago

Overview

Acabo de completar todos los laboratorios de la vulnerabilidad Path Traversal en PortSwigger.

  1. Simple case.

  2. Traversal sequences blocked with absolute path bypass.

  3. Traversal sequences stripped non-recursively.

  4. Traversal sequences stripped with superfluous URL-decode.

  5. Validation of start of path.

  6. Validation of file extension with null byte bypass.

Son los primeros labs que resuelvo de la plataforma y todavía estoy dando mis primeros pasitos con BurpSuite, pero me quedo con la experiencia que me resultó súper amena. Vale la pena revisar todo el contenido que ofrecen porque está muy bien explicado.


Simple case

Nivel: Apprentice.

Nos encontramos con una aplicación de compras, donde la vulnerabilidad reside a la hora de mostrar las imágenes de los productos. El objetivo es leer el archivo /etc/passwd. Esta dinámica se va a mantener a lo largo de todos los labs para esta vulnerabilidad en concreto.

Hacemos click derecho sobre cualquiera de los ítems y seleccionamos la opción para abrir la imagen en una nueva ventana.

Ahora podemos ver en la URL un parámetro filename, a través del cual podemos controlar qué imagen queremos cargar de las que se encuentran almacenadas en la ruta /var/www/images. Sin embargo, si es vulnerable, podríamos intentar retroceder unos directorios hacia atrás para llegar a la raíz y cargar otro archivo al que no deberíamos tener acceso.

Algo a tener en cuenta es que estoy utilizando el propio navegador que trae BurpSuite. Si estuviera con otro navegador, debería usar alguna extensión como FoxyProxy y configurar un proxy; BurpSuite por defecto escucha por el equipo local por el puerto 8080.

Interceptamos la petición con BurpSuite y con Ctrl + R la emitimos al Repeater:

Desde ahí modificamos lo que vale filename para intentar acontecer un Directory Path Traversal e incluir un archivo local de la máquina: /image?filename=../../../etc/passwd

¡Y listo! Pudimos listar el /etc/passwd.


Traversal sequences blocked with absolute path bypass

Nivel: Practitioner.

Volvemos a encontrarnos con el mismo sitio, así que seleccionamos una imagen e interceptamos la petición con Burp.

En este caso, las secuencias típicas de un Path Traversal se encuentras bloqueadas, pero podemos intentar cargar directamente el archivo por si parte desde la raíz indicando su ruta absoluta: /image?filename=/etc/passwd

De esta forma, llegamos a ver el contenido del /etc/passwd y damos este lab por concluido.


Traversal sequences stripped non-recursively

Nivel: Practitioner.

Abrimos una imagen e interceptamos con Burp.

En esta ocasión, se está aplicando una pequeña sanitización respecto al input del usuario, eliminando todos los ../

$ echo str_replace("../", "", "../../../etc/passwd");
etc/passwd

Sin embargo, esta sanitización no es recursiva. Es decir que se aplica una única vez. Por ende, para bypassear esta restricción, basta con utilizar ....// en lugar de ../

$ echo str_replace("../", "", "....//....//....//etc/passwd");
../../../etc/passwd

Lab completado.


Traversal sequences stripped with superfluous URL-decode

Nivel: Practitioner.

Interceptamos la petición con BurpSuite y la emitimos al Repeater.

No vamos a poder aplicar ninguna de las técnicas anteriores. Sabemos que la aplicación bloquea cualquier secuencia de Path Traversal, pero también se nos informa que realiza un URL-decode del input antes de cargar la imagen.

../ no es la única forma que tenemos de escribir esta secuencia. Por ejemplo, primero representamos la barra en formato URL-encode, por lo que ahora la cadena se convierte en ..%2f.

Posteriormente volvemos a aplicar un URL-encode al porcentaje: ..%252f

Repetimos esa secuencia varias veces y quedaría así:

/image?filename=..%252f..%252f..%252f/etc/passwd

Ahora sí funciona y logramos cargar el /etc/passwd.


Validation of start of path

Nivel: Practitioner.

Lo mismo que en los labs anteriores; seleccionamos una imagen, interceptamos con Burp y emitimos al Repeater.

La aplicación valida que nuestro input comience por un directorio determinado, en este caso: /var/www/images. Sin problemas podemos colocar ese path y luego retroceder tres directorios para llegar a la raíz porque ../ es una secuencia válida y de ahí en más cargar el /etc/passwd.

¡Lab resuelto!


Validation of file extension with null byte bypass

Nivel: Practitioner.

Interceptamos la petición y la emitimos al Repeater.

En este caso, la aplicación valida que el nombre de archivo que proporcionamos termine con una extensión determinada (.jpg), pero podemos usar un null byte %00 para aislar la extensión y que no se interprete: /image?filename=../../../etc/passwd%00.jpg

De esta forma, completamos el último lab.