1. Nghi ngờ về lỗ hổng XSS trên phimmoi.net
Đang ngồi code thì ông anh gửi cho cái link phim kêu vào coi, ban đầu cũng không muốn coi đâu vì thấy IMDB thấp quá. Mà sau ông ý gửi thêm cái link Youtube này nữa nên mình thay đổi ý định liền.
Vào trang tải phim thì gặp ngay cái thông báo 404 - Page Not Found làm tụt mẹ cả hứng xem phim:
Chợt để ý cái dòng chữ phía dưới ô 404: "Nếu bạn là người Việt Nam, vui lòng click vào đây để nạp lại nội dung này."
Lúc này mới nhớ ra là tớ đang bật extension VPN trên Chrome nên IP truy cập từ nước ngoài. Việc đơn giản tiếp theo cần làm chỉ là tắt extension, xóa cookie và nhấn F5. Nhưng nếu thế thì đã không có bài viết này cho các bạn đọc rồi. He he.
Vốn bản tính tò mò, tớ liền nhấn vô chữ "click vào đây" được liên kết với địa chỉ sau:
http://www.phimmoi.net/xac-nhan-quoc-gia/?ref=/phim/not-cool-3617/download.html
Nhìn theo cấu trúc URL, ta có thể đoán được giá trị của ref là liên kết mà phimmoi sẽ chuyển hướng người dùng tới sau khi xác nhận xong. Mà dữ liệu dạng GET này thường sẽ được in lại trong mã nguồn ở đâu đó. Tớ liền nhấn Ctrl+U, Ctrl+F và nhập vào từ khóa "not-cool":
Quả nhiên là có in dữ liệu trong mã nguồn, Chrome trả về 5 kết quả. Chú ý vào nhóm kết quả thứ nhất, ta có thể thấy dữ liệu đã được mã hóa các ký tự HTML. Nhưng ở vị trí 2 và 3 thì các ký tự "/" không bị mã hóa thành "%2F" nữa? Tới đây thì chúng ta có thể bắt đầu nghi ngờ về việc lỗ hổng XSS có thể xảy ra.
2. Xác nhận sự tồn tại của lỗ hổng XSS
Giai đoạn xác nhận lỗ hổng thường diễn ra khá nhanh chóng, mọi thứ bạn cần làm chỉ là cố gắng làm hiển thị một hộp thoại với dòng chữ "XSS" hoặc "Tên bạn"... Nói chung là tìm cách chứng minh khả năng HTML có thể chèn vào trong trang thông qua dữ liệu đầu vào, từ đó thực thi các đoạn mã JavaScript.
Trước tiên, ta cần chọn vị trí thuận lợi để Inject. Như trong hình phía trên thì chúng ta có 5 vị trí, nhưng 3 vị trí đầu đã mã hóa. Như vậy, còn 2 vị trí khả thi. Thử chèn một tag bất kỳ:
http://www.phimmoi.net/xac-nhan-quoc-gia/?ref=%3Cxss%3E
Xem mã nguồn và tìm
<xss>
thì chỉ còn lại 1 kết quả nằm trong một input ẩn:<input type="hidden" name="ref" value="<xss>" />
Áp dụng vector khai thác cơ bản khi dữ liệu nằm trong giá trị thuộc tính:
- Đóng thuộc tính:
"
- Đóng thẻ:
>
- Tạo script hiển thị hộp thoại XSS:
<script>alert("XSS")</script>
Kết hợp lại ta được vector:
"><script>alert("XSS")</script>
Liên kết khai thác (đã mã hóa URL): http://www.phimmoi.net/xac-nhan-quoc-gia/?ref=%22%3E%3Cscript%3Ealert(%22XSS%22)%3C/script%3E
Khi truy cập từ Chrome sẽ không thấy hộp thoại nào xuất hiện cả vì Chrome có bộ lọc XSS, nhưng xem mã nguồn các bạn sẽ thấy phần highlight màu đỏ đánh dấu đoạn vector XSS:
3. Khai thác lỗi bảo mật XSS trên Phimmoi.net
Có rất nhiều kịch bản khai thác lỗ hổng XSS khác nhau nhưng thông dụng nhất vẫn là khai thác cookie để chiếm phiên làm việc. Tuy nhiên trong video dưới đây tớ sẽ chia sẻ 2 kịch bản thú vị hơn!
4. Tổng kết
Tại thời điểm đăng bài này, lỗ hổng đã được báo cáo tới quản trị viên của Phimmoi.net và đã được khắc phục.
Bật mí: Đây cũng không phải lần đầu tiên Phimmoi.net dính XSS.
Đọc thêm: Phimmoi.net - Bug nhỏ trong trang Download
Đọc thêm: Phimmoi.net - Bug nhỏ trong trang Download