Chào mọi người hôm nay mình xin trình bày về lỗ hổng bảo mật liên quan đến phần xác thực người dùng và một số vấn đề râu ria khác. Chả là target này là của công ty bạn mình - một công ty tổng hợp bàn ăn và đặt bàn online, lượng khách hàng cũng khá lớn nó bao gồm cả nền tảng web và mobile app. Vì khá có hứng thú với chuyện ăn uống nên mình đặt quyết tâm target này trong 2 tuần.
1. Wireshark
Sau khi thử với website pasgo.vn không tìm được api của nó mình tiến hành thử với app android của pasgo cùng genymotion + wireshark (cách cài đặt các bạn có thể google nhé, ngoài ra còn có các công cụ để view khác như charles proxy ). Tiến hành đăng nhập và khởi động wireshark, bên wireshark mình bắt đầu thấy các request từ app, lọc theo http thu được các request dưới dạng đầy đủ từ login, tìm kiếm.
![]() |
Wireshark 1 |
Sở dĩ thấy được là do khi gọi services các gói tin không được mã hóa nên ta thấy được các gói tin dưới dạng http đồng thời với đó là các thông tin dưới dạng clear-text. Các services ở đây mình thấy được như: login, getDanhmuc, ... đều có rõ request và response của nó. Tiếp đó mình đi vào nội dung từng request. Rõ ràng ở đó mọi thông tin đều ở dạng clear-text (rất nguy hiểm phải không nào, khi khách hàng dùng mạng LAN truy cập vào app sẽ bị ăn cắp thông tin tài khoản một cách dễ dàng), các bạn có thể thử với Ettercap. Đây là cũng là một lý do khuyên các bạn không nên truy cập các trang web có thông tin quan trọng khi sử dụng mạng công cộng.
![]() |
Wireshark 2 |
Và ta đã có được đường dẫn các services của trang web.
2. Vấn đề Authentication của services
Việc đầu tiên là mình xem yếu tố xác thực của các services yêu cầu quyền người dùng. Công cụ test services như thường lệ là Postman, các thông số của request thì cứ nhìn bên wireshark là ra thôi. Sau khi thử các chức năng chính có yêu cầu quyền người dùng mình thấy các request này chỉ cần tham số là nguoidungId, bắt đầu rồi đây, ... tham số mà lập trình viên sử dụng ở đây là chuỗi 16 ký tự được sinh ra từ hàm sinh id trong C#. Chỉ cần nguoidungId thôi à, thế nếu mình dùng Id người khác để mượn quyền rồi đặt bàn đổi thông tin thì sao nhỉ. Vấn đề bây giờ là lấy nguoidungId không thể đoán được vì là hàm sinh từ server (chắc lập trình viên cũng chủ quan vì suy nghĩ này).
Lần theo các chức năng để xuất hiện các người dùng khác trong phần bình luận, kết quả trả về từ server có bao gồm cả Id của họ ^^. Lúc này mình thử sử dụng Id đó xem thông tin cá nhân và thực hiện thao tác khác thì quả thật mình đang sử dụng app trên danh nghĩa người đó rồi.
![]() |
Postman 1 |
Thấy được lỗ hổng mình có email report cho bộ phận IT của pasgo và rất mừng bên đó phản hồi rất nhanh và nhiệt tình:
09:09, 25 thg 5, 2018: Email thông báo về lỗ hổng
09:28, 25 thg 5, 2018: Nhận được phản hồi từ pasgo và lỗ hổng đã được khắc phục ngay lập tức (bằng cách thêm token), rất chuyên nghiệp.
...tiếp tục trao đổi một số vấn đề khác.
Trên đây là bài viết của mình về vấn đề mã hóa request và xác thực người dùng. Mong các bạn ủng hộ và đón xem những phần tiếp theo.
Không có nhận xét nào:
Đăng nhận xét