Tôi đã login vào concung.com mà không cần mật khẩu
hacking
22
Security
35
web developer
16
White

bugjoker viết ngày 09/07/2019

Chào các bạn, quên mật khẩu - hay reset mật khẩu, đặt lại mật khẩu là một tính năng phổ biến mà gần như website nào cũng có. Nó sẽ được sử dụng khi user login vào hệ thống mà quên mất mật khẩu của mình là gì.

Vì là một tính năng "phổ thông" nên đôi khi nó thường bị ghẻ lạnh bởi các developer. Chính vì sự vô tâm đó, nên tại đây thường tồn tại rất nhiều lỗ hổng bảo mật nghiêm trọng.

Tôi đã login vào concung.com mà không cần mật khẩu

Vào một ngày nóng như lửa ở Hà Nội, tôi lần đầu nghe tới hệ thống thương mại điện tử concung.com. Ngay lập tức, tôi mở trình duyệt lên, gõ vào thành địa chỉ https://concung.com để xem có lỗ hổng bảo mật nào không. Như mọi lần, tôi đăng ký một tài khoản bằng chính số điện thoại của mình. Sau khi đăng ký xong, tôi vào trang cá nhân, ở các ô input, textarea tôi thử nhập script để xem có bug xss nào không. Nhưng thật buồn, không có bug nào cả. Đội dev của cungcung.com đã tự động loại bỏ hết các ký tự đặc biệt có thể gây ra lỗi xss ở các ô input. Không bỏ cuộc, tôi tìm đến ô upload ảnh, cố gắng upload 1 file shell. Nhưng cũng không up được, đội dev của concung.com một lần nữa chiến thắng.

Tôi logout tài khoản, và đăng nhập lại nhưng... lại quên mật khẩu mà tôi đã tạo cách đây vài phút. Ngay dưới nút đăng nhập, tôi thấy tính năng quên mật khẩu. Bấm vào, concung yêu cầu tôi cung cấp số điện thoại đăng ký (đương nhiên là tôi nhớ), tôi làm theo hướng dẫn của concung, sau đó tôi nhận từ điện thoại một mã OTP mà concung gửi về để đặt lại mật khẩu.

Mã OTP mà concung gửi cho tôi là một mã gồm 4 chữ số. Nhận thấy điều này có vẻ kém bảo mật, tôi đã cố tình nhập sai mã OTP, rồi lại nhập sai mã OTP, rồi lại nhập sai mã OTP lần nữa,... cứ thế tôi nhập sai 10 lần, đến lần thứ 11 thì nhập đúng.

Cứ nghĩ là sau 10 lần nhập sai, mã OTP sẽ bị xóa. Nhưng không, lần thứ 11 tôi nhập đúng thì vẫn có thể reset mật khẩu. Điều này có nghĩa là mã OTP của concung không hề bị hết hạn, hay bị xóa cho dù bạn có nhập sai bao nhiêu lần (ít nhất là 10 lần). Mặt khác, mã OTP lại chỉ gồm có 4 chữ số.

Tôi bèn lên ý tưởng cho một tool có thể login vào concung.com nhờ tận dụng lỗ hổng này. Ý tưởng như sau

  • Tool cho phép nhập vào số điện thoại của tài khoản mình muốn tấn công
  • Tool cho phép nhập vào mật khẩu mới mà mình muốn tài khoản bị tấn công sẽ đổi thành
  • Tool sẽ gửi đến endpoint reset mật khẩu của concung, tự động điền mã OTP từ 0000 đến 9999

Tool này khá đễ chỉ với một chút kiến thức về js, hoặc php.

Tôi để cho tool chạy xong (khoảng 2h vì phải gửi 9999 request), quay lại login bằng số điện thoại của tài khoản tôi muốn tấn công, kèm theo mật khẩu mới do tôi tự đặt ra từ trước. Thì kết quả là thành công.

Vậy các bạn thấy rằng để login vào bất kỳ tài khoản nào concung.com, cái duy nhất mình cần là số điện thoại của tài khoản đó và một chút lòng kiên nhẫn.

Em test kỹ lắm rồi

Hiện tại tôi đã report lỗ hổng này cho concung.com, bên họ cũng đã xác nhận và fix lỗi. Họ hứa sẽ tặng tôi mã giảm giá khi bên họ có chương trình marketing phù hợp.

Làm tính năng quên mật khẩu sao cho an toàn

Một số cách làm tính năng "Quên mật khẩu" mà mình cảm thấy là an toàn

  • Cách 1: Sử dụng mã OTP hết hạn sau 5 phút hoặc 3 lần nhập sai
  • Cách 2: Gửi tới khách hàng 1 đường link chứa token (đảm bảo token là duy nhất và có thời gian hết hạn). Khách hàng đi vào link này thì sẽ có thể đặt lại mật khẩu mới.
  • Cách 3: Bổ sung thêm captcha trong bước reset mật khẩu

Bonus "Không tự ý đổi mật khẩu của khách"

Phần này tôi kể thêm, tôi từng vào một trang web. Chọn tính năng quên mật khẩu, hệ thống đó yêu cầu tôi nhập vào số điện thoại của mình. Sau khi nhập xong, tôi nhận được một tin nhắn thông báo "tài khoản của bạn đã được đổi mật khẩu thành xxx, vui lòng đăng nhập với mật khẩu mới này". Tính năng này xem ra rất tiện nhỉ, hệ thống tự đổi mật khẩu mới và gửi cho mình, mình đỡ phải tự đổi.

Nhưng các bạn có nhận thấy điều gì không? Giả sử tôi muốn phá tài khoản nào đó, tôi chỉ cần nhập số điện thoại của họ vào tính năng quên mật khẩu và nhấn gửi. Ngay lập tức, tài khoản của họ sẽ bị đăng xuất khỏi hệ thống vì mật khẩu của họ đã bị đổi sang mật khẩu mới. Tuy tôi không ăn cắp được tài khoản, nhưng như vậy là đủ làm trải nghiệm của người dùng đi xuống. Nguy hiểm hơn, nếu tôi có số điện thoại của tất cả user trên website đó thì sao? Tôi hoàn toàn có thể làm cho tất cả tài khoản của họ bị đăng xuất ra khỏi hệ thống - một người có thể không ảnh hưởng nhiều, nhưng nếu nhiều người thì chắc chắn sẽ gây thiệt hại lớn.

Lời kết

Làm web cũng như xây nhà vậy, công trình phụ thực chất mới là công trình chính. Quên mật khẩu là tính năng giúp người dùng lấy lại tài khoản, vậy nếu tính năng này mà có lỗ hổng, thì giống như một đòn đánh chí mạng vào hệ thống rồi còn gì.

Qua bài viết này, chỉ mong các bạn đừng "ghẻ lạnh" với những tính năng phụ, hãy công bằng, bình đẳng mà đối xử với tất cả các tính năng nhé.

Nguồn: https://bugjoker.com/bai-viet/quen-mat-khau/

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

bugjoker

2 bài viết.
8 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
4 1
Một website sẽ được chia ra làm 2 phần là backend và frontend. Backend là nơi xử lý dữ liệu từ người dùng, còn fronted là nơi hiển thị giao diện ch...
bugjoker viết 3 tháng trước
4 1
Bài viết liên quan
White
40 3
(Ảnh) Giới thiệu thư viện VisSense.js Chắc hẳn hiện giờ những bạn nào thường xuyên dùng Facebook đều biết một chức năng hay ho của mạng xã hội n...
Juno_okyo viết hơn 3 năm trước
40 3
White
39 11
Có 1 kiểu tấn công vào website mà chúng ta không thể nào chống được, dù có làm thế nào đi nữa: DDOS. Đây cũng là một từ rất hay dc nhắc đến và rất...
quocnguyen viết hơn 3 năm trước
39 11
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
2 bài viết.
8 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!