Chào mọi người, lại là Bách đây! Nay chúng ta cùng chia sẻ một lỗ hổng mang tính chất chủ quan của người lập trình nhé!
Summary
Như các bạn cũng đã biết, lỗ hổng không tự nhiên sinh ra cũng như tự nhiên mất đi, nó chỉ chuyển hoá từ dạng này sang dạng khác. Lần này, mình có một case cũng không quá khó, ở mức dễ so với các anh em vừa đụng vào pentest.
Dò quét
Mình có lướt qua một số trang, và vô tình phát hiện một trang bán hàng nhìn cũng khá uy tín
Có lướt dạo qua vài vòng và tìm hiểu thông tin của hệ thống như scan port, scan vuln, fuzz directory, subdomain, sử dụng tính năng như người bình thường. Sau khoảng 5p tìm hiểu nghiệp vụ thì mình táy máy khi nhìn thiết kế này khá đẹp và có nhiều bề mặt để thử. Và các công cụ trả về kết quả có vẻ như không hữu dụng lắm, không khai thác thêm được gì cả.
Mình tạo một tài khoản người dùng như bình thường và lướt tiếp xem nghiệp vụ thế nào, cộng với đó là thả vài cái payload xss, sqli đơn giản để kiểm tra thử tính khả thi.
Giờ bật Burp lên nào
Như các trang web có đăng ký user, thì theo kinh nghiệm cá nhân của bản thân, mình luôn ưu tiên các lỗi có thể ảnh hưởng đến quyền riêng tư của người dùng, ảnh hưởng đến các thông tin cá nhân của user trên hệ thống. Thế là mình thử ngay việc tìm đến endpoint load thông tin người dùng để test ngay cái IDOR cho nóng.
À đây rồi, nhìn ảnh có thể thấy, Dev đã chủ quan mà trả về thông tin rất nhạy cảm khi gọi đến api trên bao gồm:
- Pass
- isAdmin etc... Việc trả về các giá trị như Pass hay isAdmin là khá nhạy cảm, nhưng rất may là Dev cũng có bảo mật cho Password với dạng Bcrypt, cái này mình chịu, không có thời gian để brute force :V Và các bạn đoán xem, lỗi này tên gì ạ?
Đúng rồi là IDOR!
Nhưng có một vấn đề sinh ra ở đây để có được IDOR, đấy chính là id người dùng đã được hash ( Đây là việc mình lại không can thiệp được. Lúc này mình lục lại các request khác không liên quan để xem thử liệu có thứ gì đó mang lại thông tin hữu ích hơn không?
Rất may, thông tin của một sản phẩm trên hệ thống cũng đi kèm với thông tin của người đăng bài về sản phẩm. Nó khá là hữu ích!
Mình cuối cùng cũng dò ra isAdmin: true, rất dễ phải không?
Giờ mình có ID thì làm gì tiếp theo?
Leo thang
Ở đây, chúng ta đang có được lỗ hổng IDOR rồi đúng không? Đây là điều kiện cần cho việc leo từ người dùng lên thành admin. Từ thông tin id đã có, IDOR tồn tại, ==> Mình có hết thông tin trên hệ thống của admin, nhưng ngặc cái là trường password đã bị hash. Làm sao đây?
Tiếp tục thực hiện các hành động liên quan đến việc Authen xem thử có Mass Assignment hay lỗi gì đó khiến mình có thể trở thành isAdmin: true không? Nhưng nếu thế thì lại không dùng được IDOR. Và mình nhớ ra là chưa thử một một chức năng đang có là lấy lại mật khẩu.
Kiểm tra user chưa quên bao giờ thử nào?
Sau đó thử kiểm tra lại thông tin user này khi gửi request quên mật khẩu thử nào?
Bất ngờ chưa bà zà!!!
Mình đã có hướng đi mới để tăng thêm tính phức tạp khi leo thang quyền người dùng. trường forgotPasswordInfo tự nhiên từ đâu ra dị, cơ mà do mình dùng mail fake nên là có quên thật mà không biết thì vẫn lấy lại được đúng không anh em? Nhưng mà sâu hơn thì attacker lợi dụng qua lỗ hổng này để chiếm quyền người dùng khác là điều hoàn toàn bình thường!
Và tadaaaaaaa
Mình đã leo lên thành admin thành công!
Kết luận
Qua case này, mình tự tổng kết được một điều rằng, làm nhiều khiến cho sự hên xui tăng lên đáng kể và Dev chủ quan sẽ khiến cho web chứa nhiều lỗ hổng nguy hiểm. Lần này chuỗi tấn công không quá dài, có thể nhìn qua là việc sử dụng IDOR ==> Misconfig ==> Admin. Và lưu ý hơn việc thực hiện test tại các chức đăng ký, đăng nhập và quên mật khẩu, tuy dễ nhưng lại có thể chiếm quyền người dùng cũng như leo thang quyền lên dễ dàng. Lỗi này sẽ make noice hệ thống khá lớn, vì vậy trong thực tế, các trang lớn thì tỉ lên là hên xui, dính cái là có khi fix trong 2p :V
Bài sau, mình sẽ chia sẻ thêm một case OTP Logon Bypass và kết hợp IDOR để tiêu tiền người dùng trong hệ thống, mong là còn hình ảnh evidence để dễ mô tả cho mọi người. Tích cực viết để reset lại văn phong, chứ làm việc với máy nhiều, mình thấy mình nói chuyện với người khác họ dần không hiểu mình nữa ( Anh em ai đọc bài góp chút ý kiến hộ mình nhé! Mình cảm ơn mọi người