Chào anh em săn bug! 🐞 Hôm nay mình rất phấn khích chia sẻ với mọi người về hành trình tìm ra Stored XSS trên một hệ thống. Một bug nhỏ nhưng lại mang về phần thưởng lớn! Ngồi xuống, lấy ly cà phê và cùng tận hưởng nhé! ☕💸
🎯 Mục tiêu:
- 🏆 Bug Tier: 2 (Mức độ từ Trung bình đến Cao)
- 💥 Loại lỗ hổng: Stored XSS
🔍 Bối cảnh một chút
Chiều hôm ấy khá chán, thấy lâu rồi không làm ở intigriti, và ngồi lựa mục tiêu để đánh. Đợt này hay làm whitebox nên mình cũng chọn một mục tiêu open source cho nó thân quen.
Ok chọn được mục tiêu rồi thì mình làm thôi. Thường nếu các dự án có hệ thống demo sẵn thì mình sẽ thích hơn, hoặc có chương trình trial thì càng tốt, cơ bản do mình lười dựng lại hệ thống :v
💣 Bắt đầu nào
Đầu tiên thì vẫn phải tìm hiểu mục tiêu của mình là gì cái đã. Mô tả sơ thì đây là một hệ thống gồm rất nhiều chức năng hỗ trợ cho doanh nghiệp có các chức năng quản lý và marketing.
Minh cũng hay được mọi người hỏi nếu gặp 1 scope quá lớn thì làm sao, theo ý kiến cá nhân của mình thì cứ đi từ cái dễ đến khó. Một phần bug bounty mình không phải chuyên mà cũng chỉ vừa bắt đầu không lâu so với các đàn anh hay bạn bè. Mình sẽ thường làm các bug như XSS, SQLi hoặc Open Redirect. Tại sao á, vì nó dễ, phù hợp với định hướng. Nó có cái lợi, cũng có cái hại, Lợi là việc làm nhanh đánh gọn, còn hại là dễ dup, vì giờ 1m^2 100 ông bug bounty, thị trường cạnh tranh nhau lắm.
Còn bug bounty một phần hỗ trợ về kinh tế cho bản thân, một phần giúp mình cọ sát với thực tế thị trường.
Quay lại với hệ thống mình chọn, sau một hồi lướt và đi sâu vào nghiệp vụ. Mình tập trung vào các trường chỉnh sửa text để tập trung vào lỗi XSS.
Vì đây là hệ thống open source, nên ở các endpoint, mình sẽ search ra các hàm xử lý dữ liệu và render nó lên web. Ngồi nghiền ngẫm một lúc thì hệ thống này hay quá, nó tích hợp sẵn ChatGPT cho các trường nhập liệu, tạo dữ liệu quá đơn giản và nhanh.
BÙM 😲
Mình phát hiện ra một điều bất thường. Chức năng tạo và chèn dữ liệu do ChatGPT tạo ra không có hạn chế điều gì cả, bằng promt tricky đơn giản, mình đã có được 1 list các payload XSS từ cơ bản đến nâng cao như này:
Đơn giản hơn 10 lần. Tại đây mình phát hiện ra XSS bị trigger!
Chẳng lẽ đây là cơ hội vàng của mình? 💡
Sau khi kiểm tra kỹ càng (hoặc không kỹ lắm 😎) trong source code thì mình quyết định submit báo cáo lỗi Stored XSS. Ôi trời, đây đúng là khoảnh khắc mình chờ đợi! 🎉
"Cuộc chiến" với vendor
Sau 22 submit, lần đầu tiên có một submit được chuyển từ Triage sang Pending mà không chuyển sang Closed / Informative hoặc là Closed / Duplicate luôn là mình thấy khá hi vọng rồi :v
Lúc đầu mình đánh giá lỗi 6.4 điểm xong triage vào hạ xuống còn 4.6 điểm hên vẫn bounty 300€ nên không buồn mấy.
Sau thì vendor lại vào hỏi như dưới, đúng lúc đang đi làm tí thể thao bi-a lỗ, làm mình vừa bắn vừa phải nghĩ, tối về phải ngồi vội vào máy để research tiếp.
Và may thay, mình tìm được một bug khác ở mức low là HTML Injection trong phần trò chuyện, và olalala, mình đưa ra một kịch bản phishing hoàn hảo cho vendor.
BÙM!!!
Vendor rất vui vì đã nhận được kịch bản mới để trigger XSS dễ hơn và hào phóng đẩy từ Medium lên High với mức bounty là 1000€ (nhiều bạn cũng hỏi mình cái này). Mình đã khá sốc khi nhìn vào tiền thưởng được nhận quá tuyệt vời sau 22 lần miss :v
Kết bài
Qua đây mình chỉ muốn chia sẻ góc nhìn nhỏ của bản thân về việc hunt bug trên các sàn bug bounty, cứ làm và dup đi mọi người, chăm chỉ q*** tay, vận may sẽ tới. Việc viết report cũng quan trọng, hơn hết là cả tận dụng tất cả những gì ta có nữa!
Cảm ơn mọi người đã đọc bài viết của mình!