PIV300 - Adventure I - Avances
PIV300 - Adventure I - Avances
PIV300 - Adventure I - Avances
Primera Flag
Vamos a escanear la IP 10.6.0.2
CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 subjectAltName = adventure.hz
verify error:num=18:self-signed certificate
verify return:1
depth=0 subjectAltName = adventure.hz
verify error:num=10:certificate has expired
notAfter=Nov 22 10:18:39 2019 GMT
verify return:1
depth=0 subjectAltName = adventure.hz
notAfter=Nov 22 10:18:39 2019 GMT
verify return:1
---
Certificate chain
0 s:subjectAltName = adventure.hz
i:subjectAltName = adventure.hz
a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256
v:NotBefore: Nov 22 10:18:39 2018 GMT; NotAfter: Nov 22 10:18:39 2019 GMT
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFBDCCAuygAwIBAgIJAMTwNUbCfDnmMA0GCSqGSIb3DQEBCwUAMBcxFTATBgNV
HREMDGFkdmVudHVyZS5oejAeFw0xODExMjIxMDE4MzlaFw0xOTExMjIxMDE4Mzla
<TRUNCADO>
Y encontramos el sitio vulnerable que hay en 10.6.0.2 , debemos agregarlo al /etc/hosts para
lograr visualizarlo.
Segunda Flag
Parece que debemos encontrar un error o vulnerabilidad a nivel de servidor.
La página interpreta código php pero aun no encuentro una forma de inyectar código.
Tenemos una cookie de sesión que parece estar codificada en Base64. La decodifiqué para ver
si contiene información útil.
Esto podría referirse a que la cookie está relacionada con una sesión de usuario llamada Guest
en la aplicación web. Podríamos intentar modificar el valor de la cookie a root o admin para ver
si puedo obtener acceso a la web como un usuario diferente o con más privilegios.
JSONPICKLE VULNERABILITY
Otra forma que intenté es codificar el código PHP en Base64 y luego lo inserté el resultado en
el valor de la cookie. Por ejemplo, insertar el código PHP <?php echo system("ls -la"); ?> en
una cookie, haciendo lo siguiente:
PD9waHAgZWNobyBzeXN0ZW0oImxzIC1sYQopOyA/Pgo=
Cookie = PD9waHAgZWNobyBzeXN0ZW0oImxzIC1sYQopOyA/Pgo=
El hecho de que se muestre una imagen de un pepino sugiere que se podría estar
produciendo algún tipo de inyección de código, como por ejemplo una inyección de código
HTML. Esto podría estar sucediendo porque el código PHP inyectado en la cookie está
generando una respuesta que no es válida en formato JSON y está provocando el error.
- ChatGPT
❯ searchsploit jsonpickle
--------------------------------------------------------------------------------------
Exploit Title | Path
--------------------------------------------------------------------------------------
python jsonpickle 2.0.0 - Remote Code Execution | multiple/remote/49585.py
--------------------------------------------------------------------------------------
Shellcodes: No Results
# The vulnerability exists from the first version till the current version for
backward compatibility. no patch is provided yet
# the payload was found during our research made on deserialization functions.
# example:
Este exploit aprovecha una vulnerabilidad en la biblioteca Python jsonpickle versión 2.0.0 y
versiones anteriores que permite la ejecución remota de código. jsonpickle se utiliza para
convertir objetos complejos de Python en una forma serializada y luego recuperar los datos de
nuevo en un objeto. La vulnerabilidad está presente en la función interna loadrepr de
jsonpickle, que evalúa cada cadena serializada que contiene "py/repr". Si se deserializan datos
maliciosos, se van ejecutar comandos arbitrarios de Python, incluida tambien llamadas a la
función system().
El exploit aprovecha esta vulnerabilidad al crear una cadena JSON maliciosa que contiene un
objeto con un campo "py/repr" que especifica el módulo y el comando a ejecutar. Cuando el
servidor deserializa esta cadena JSON maliciosa, se ejecuta el comando especificado, lo que
tal vez me permita ejecutar código arbitrario en el servidor.
El ejemplo del payload en el código del exploit inyecta el comando time.sleep(10) para hacer
que el servidor espere 10 segundos antes de continuar, lo que podría utilizarse para hacer que
el servidor se vuelva inoperable o para retrasar un ataque hasta que se desactive un sistema
de seguridad o algo por el estilo.
Bueno, a todo esto aún no tenemos la versión del jsonpickle que se está empleando en la web
podemos probar a suerte.
Hagamos un script en python para automatizar el proceso, lo que podemos hacer para obtener
la ejecución remota de comandos, podría ser inyectar un comando de shell arbitrario utilizando
la función system() de Python. Por ejemplo, el payload malicioso podría ser:
#--------jsonpickle_bsk.py--------
import requests
import base64
import jsonpickle
Este script crea un payload que ejecutará el comando whoami en el servidor remoto y lo
codifica en base64. Luego, crea una cookie con la payload malicioso y realiza una solicitud
HTTP al servidor remoto con la cookie. Finalmente, imprime la respuesta del servidor.
No hemos logrado conseguir nada de momento. Intento 312441439, sin resultados optimos.
XSS
Tambien podemos observar que en la páquina tenemos una especie de campo a llenar:
Podemos intentar ver si es vlulnerable a XSS. Para probar si es posible realizar una inyección
de código, podemos intentar ingresar algún código malicioso en el campo de correo electrónico
y ver si se ejecuta en el servidor:
<script>alert('XSS')</script>
$(uname -a)
Los que hemos utilizado PortSwigger recordaremos de uno de los retos, lo siguiente:
Si se utiliza una biblioteca de JavaScript como jQuery, podemos buscar sumideros que puedan
alterar los elementos DOM en la página. Por ejemplo, la función attr() de jQuery puede
cambiar los atributos de los elementos DOM. Si los datos se leen de una fuente controlada por
el usuario, como la URL, y luego se pasan a la función attr() , entonces es posible manipular el
valor enviado para causar XSS. Por ejemplo, aquí tenemos algo de JavaScript que cambia el
atributo href de un elemento anclado utilizando datos de la URL:
$(function() {
$('#backLink').attr("href",
(newURLSearchParams(window.location.search)).get('returnUrl'));
});
Puedemo explotar esto modificando la URL para que la fuente location.search contenga una
URL JavaScript maliciosa. Después de que el JavaScript de la página aplique esta URL
maliciosa al href del vínculo de retroceso, al hacer clic en el vínculo de retroceso se ejecutará:
?returnUrl=javascript:alert(document.domain)
Veamos, vamos a modificar el valor de href a href="javascript:alert(document.domain)"
?returnUrl=javascript:alert(document.cookie)