📌 Bài viết này thuộc chuỗi write-up quá trình tiếp cận và đáp án cho các bài lab từ Portswigger Web Academy mà mình đã làm trong thời gian thực tập tại NCSC.
Mình không thích lắm cái cách mấy idol viết write-up lab theo kiểu cứ như thể họ đã biết đáp án từ đầu – họ chẳng bao giờ đủ kiên nhẫn để giải thích cặn kẽ tại sao họ lại làm một cái gì đó. Vậy nên, write-up phong cách bạn Tiểu ra đời. Mình mong là bạn có được những câu trả lời thoả đáng qua loạt bài này. Những ý kiến góp ý, thảo luận, báo lỗi – luôn luôn được hoan nghênh dưới mục comment.
Đề bài
Bài lab này sẽ xổ ra một tràng dài thông báo lỗi, trong đó chứa thông tin về việc ứng dụng đang sử dụng một phiên bản không an toàn của framework bên thứ ba.
Phân tích
Bạn làm thế nào thì làm, miễn cái web báo lỗi là được. Như đề cho thì trang báo lỗi sẽ có thông tin gì đó mà ta cần tìm.
Có nhiều cách để bắt một trang báo lỗi, nhưng thông dụng nhất thì có hai cách:
- Truy cập đến tài nguyên vốn không được cho phép
- Gửi request không hợp lệ
Bài học cho các anh em dev ở đây là phải handle exception và lỗi làm sao đó để thông tin về ứng dụng không bị lộ lọt. Thú thực là tôi cũng hơi bị ớn mấy quả ngồi test từng lỗi một để bắt (catch) được chúng, nhưng thà vất vả bây giờ thì sau này (mong là) nhàn hạ hơn. Xin đừng để mấy cái lỗi khiến cho bao nhiêu log rồi thông báo dài như sớ người ta nhìn thấy hết…
Lời giải
Tôi nghĩ ngay tới bước đầu tiên khi recon tìm lỗ hổng SQL injection. Thêm dấu nháy đơn (`) đằng sau productId và tôi đã nhận được Internal Server Error
:
