Xin chào cả nhà, lại là tôi anh Sáu vê-lốc đây. Đã quá lâu rồi kể từ bài viết cuối cùng của tôi. Ngày hôm nay tôi sẽ trở lại với 1 seri bàn về 1 lần đi “check dạo” của tui hehe.
Chả là tầm này năm ngoái khi mà con số của những ca nhiễm mới do Covid 19 tăng đến chóng mặt, cả nước bị đưa vào trạng thái chống dịch cao nhất – tui đăng kí 1 khoá học online, sự việc vẫn diễn ra bình thường cho đên 1 ngày chủ nhật đẹp trời khi mà các lớp học bị tạm đóng cửa liên tục để bảo trì hệ thống. Tui tự nhủ: Quái cái trung tâm này có cái gì mà ăn rồi nâng cấp miết?. Thế là để đi tìm câu trả lời cho câu hỏi của mình, tui quyết định tìm thử xem cái nền tảng mà tui đang học nó có cái giống gì? . Đầu tiên tui dạo tất cả các page mà tui có quyền truy cập hợp lệ bằng tài khoản mà tui có. Cũng được vài cái lỗi cơ bản như XSS này kia, cơ mà theo đánh giá thì nó chỉ là phía client thôi, lớp cũng chỉ được có 6 người, thê nên lâu lâu tui cũng chỉ đem đi trêu mấy cô cho vui thôi. Tuy nhiên sau vài ngày tui vô tình kiểm tra lại các api mà nền tảng này gọi để lấy tài nguyên thì bất ngờ tui thấy có log được gửi từ phía người dùng về. Các log này có đủ thể loại, từ thông tin truy cập người dùng, lịch sử đánh giá, lịch sử truy cập… các API này được gọi từ url: portal.chotuihoctienganhonlinexyz.edu.vn là domain tôi rename thôi còn domain thật sự không tiết lộ được. Và đáng ngạc nhiên hơn là các API này hoàn toàn public. Tui nghĩ chắc chẳng có gì thì ngừoi ta mới public nó như thế. Nhưng mà tui đã hoàn toàn nhầm các ông ạ. Ở đây có đến n+1 cái đáng để chặn truy cập từ người dùng bên ngoài như:
+ Toàn bộ thông tin của các học viên, bao gồm: Họ tên,SDT, email, password(hash bằng bcrypt)…
+ Toàn bộ lịch sử truy cập của học viên, bao gồm cả access token cho phép người dùng sử dụng token này truy cập trực tiếp vào lớp học mà không cần tài khoản xác thực.
Bây giờ mình sẽ đi từng hạng mục của “công trình này nhé”:
Thông tin người dùng có thể truy cập trực tiếp bằng API.
Đây là mục “đáng giá” nhất nên tui để đầu tiên. API để truy cập này rất đơn giản, không những đơn giản mà các dev còn “tận tình” hướng dẫn cú pháp để trích xuất API. Thậm chí nếu chỉ cần có các kiến thức cơ bản về web cũng có thể sử dụng nó để đọc thông tin người dùng. API có dạng: portal.chotuihoctienganhonlinexyz.edu.vn/
Đấy các bạn thấy đấy, hướng dẫn rất tận tình và chi tiết từng API cho đến các tham số. Ở đây mình thấy có 1 API rất đáng chú ý đó là:
portal.chotuihoctienganhonlinexyz.edu.vn/usersData{?page,size,sort}
Và đây là những gì mà tui thu được. Và mọi người có biết bao nhiêu cái tương tự như này không? Con số là hơn 130k người dùng và thông tin bao gồm tất cả những thứ như phía dưới.
Và bằng 1 vài dòng code python cực kì cơ bản thì tui có thể parse hết cái đám data này ra 1 file excel cực kì hoàn chỉnh. Data hình như hơi dễ lấy thì phải.
Truy cập vào các lớp học mà không cần xác thực.
Mọi người không nghe nhầm đâu, là thật đấy. Trong cái đám API này tui cũng tìm ra 1 cái hay ho nữa đó là các access token trong lịch sử đăng nhập của người dùng. Các access token này chỉ được mã hoá bằng base64, khi giải mã ra nó có thể bị sửa đổi thông tin người dùng khi truy cập vào lớp như: tên, chức năng người dùng- có thể trở thành admin của lớp học, đọc lịch sử chat riêng của giữa những người đó.
Theo mình suy đoán thì có thể họ sử dụng session cookie để lưu những thông tin này tạm trên server và sau đó xoá nó đi vì mình có để 1 thời gian thì lịch sử chat không thể load lại nữa, ngoài ra mình cũng test thử bằng việc gửi các tin nhắn bằng các HTTP request thì thấy client side không load trực tiếp tin nhắn từ server về nên mình đoán các đoạn chat này chỉ được load khi người dùng chưa có cookie còn không thì lịch sử chat sẽ được lưu lại tại cookie phía client. Theo chân tui nhé.
Đầu tiên là vào API:
http://portal. chotuihoctienganhonlinexyz.edu.vn/joinRoomHistories?page=xxxxx
Như hình dưới tui có nguyên cái access token định dạng base64.
Tui đem decode nó thì tui được cái như này.
Nếu ở đây tui chỉnh sửa thông tin và encode lại chắc chắn server sẽ thực thi theo các thông tin như cấu hình bên trong. ở đây tui có userRole là Audit. Để tui thử truy cập xem như thế nào nhé:
Ở đây tui chỉ là dự thính chẳng thể làm được gì, nhưng để tui thay đổi 1 role khác xem sao .
Như dưới đây tui đã có được quyền cao hơn với khá nhiều tính năng. Có 1 chức năng đặc biệt và cực kì đáng chú ý đó là chức năng upload file. Về chức năng này tui sẽ có 1 bài viết phân tích cụ thể và đi sâu về nó hơn.
Túm váy lại.
Như các bạn thấy đấy rõ ràng không phải chỉ các tổ chức, cá nhân nhỏ lẻ mắc các lỗi trong quá trình xây dựng hệ thống của mình mà thậm chí các tổ chức lớn và uy tín cũng có thể mắc các lỗi này dẫn đến nguy cơ gây mất an toàn cho thông tin người dùng, với các lỗ hổng mô tả ở trên, tui 1 tay gà mờ trong giới security cũng có thể dễ dàng lấy được toàn bộ thông tin của hơn 130k người dùng này nếu muốn, vậy với các “tay to” khác thì liệu họ còn có thể làm gì nữa thì tui không chắc lắm vì tui chưa có đạt tới cái tầm đó. Bài này tạm đến đây thôi. Hẹn các bạn dịp khác nhé. C ya