Bypass là gì? trong login, đăng nhập bypass định nghĩa như thế nào?

Thảo luận trong 'Tin tức lập trình Website' bắt đầu bởi phamcongson, 14/8/16.

  1. phamcongson
    Tham gia ngày:
    3/6/13
    Bài viết:
    474
    Đã được thích:
    93
    Điểm thành tích:
    28
    Giới tính:
    Nam
    Trong lập trình sử dụng tới database, mysql, sqlsever,... khi xử lý code phần sever bạn thường nghe thuật ngữ Bypass trong đăng nhập.

    Nay mình viết bài này giúp các bạn hiểu rõ hơn thuật ngữ Bypass này hơn.

    bypass-la-gi-trong-login-dang-nhap.jpg

    1. Bypass là gì?
    • Bypass là thuật ngữ dùng để chỉ cách vượt qua cổng đăng nhập, login của hệ thống website, phần mềm,... nào đó.
    • Hacker sử dụng các thủ thuật trên cổng kết nối để đăng nhập vào tài khoản admin, tài khoản quản trị mà không cần mật khẩu và user chính xác.
    2. Bypass hoạt động như thế nào?
    • Trong lập trình web, phần mềm, application chúng ta thường lập trình theo trình tự: tầng giao diện (tầng người dùng nhìn thấy, giao diện web, ứng dụng word, excel,..), tầng code behind (Code C#, C++, PHP, Java,..), tầng xử lý cơ sở dữ liệu (sql, mysql, oracle, LingQ, Access...). Ngoài ra lập trình viên còn sử dụng các mô hình như: mô hình 3 lớp, mô hình MVC,..
    • Khi ta sử dụng các mô hình, hay các tầng giao diện trên phần quản trị dữ liệu, bảo mật dữ liệu là phần không thể thiếu của 1 hệ thống hoặc 1 website. Phần quản trị này hầu hết phải sử lý các sự kiện đăng nhập, login để chống hacker lấy và phá dữ liệu bảo mật. Xử lý đăng nhập được mã hóa bởi UserName (tên đăng nhập) và Password (mật khẩu).
    VD: 1 trang login như sau để đăng nhập vào quan trị dữ liệu
    Mã:
    https://itseovn.com/demo/login/index.html
    
    Ví dụ 1 đoạn code và cách bypass như sau:
    • Code trong sql xử lý truyền thông tin uesername và password.
    Mã:
    select * from username where username=' "  +  @username + " ' and password=' "  +  @password + " '
    
    • Xử lý xong câu lệnh trên ta sẽ cho dữ liệu vào 1 datatable hoặc datarow. Sau đó xử lý dữ liệu này như sau:
    Mã:
    DataTable dt = new DataTable();
    dt=..... câu lệnh kết nối lấy dữ liệu từ SQL trên.
    if(dt.rows.count >0)
    {
              //truy cập vào trang quản trị dữ liệu.
    }
    else
    {
             //báo lỗi không đúng username mật khẩu.
    }
    
    Diễn giải code:
    • Khi code truyền vào SQL với 2 tham số người dùng nhập vào là @username=123456 và @password=654321, nếu có dữ liệu thì DataTable dt sẽ có 1 dòng dữ liệu (có thể có 1 hoặc 2 vì nhiều khi dữ liệu bạn bị lỗi gì đó). Và câu SQL sẽ được truy cập là:
    Mã:
    select * from username where username=' 123456 ' and password='654321'
    
    • Lệnh if sẽ kiểm tra nếu có dữ liệu thì cho phép truy cập vào trang quản trị dữ liệu, bảo mật thông tin. Còn sai sẽ thông báo không đúng thông tin tài khoản.
    Bypass sẽ thực hiện tại bước này.
    • Với câu SQL trên thay vì người dùng nhập @username và @password như trên, người dùng sẽ nhập khác là
    Mã:
    @username=123456 và @password='  or '1'='1
    
    • Câu SQL sẽ bị đổi là:
    Mã:
    select * from username where username = ' 123456 ' and password = ' ' or '1'='1'
    
    • Câu SQL này có nghĩa là không cần quan tâm tới username và passowrd nhập vào chỉ cần 1=1 là sẽ cho ra 1 dòng dữ liệu (1 thì lúc nào mà không bằng 1), nên câu lệnh luôn đúng.
    • Code trong lệnh IF kiểm tra có dữ liệu và cho truy cập vào tài quản quản trị dữ liệu (thế là hacker có thể làm bất kỳ điều gì mình muốn với tài khoản này).
    Điều kiện khác của '1'='1':

    Ngoài điều kiện '1'='1' ra ta có thể chế thêm các điều kiện khác như:
    • '1' <> '0' : nghĩa là nếu 1 khác 0, 1 không phải là số 0 (1 lúc nào cũng khác không và không phải là số 0 rồi).
    • 2 > 1 : 2 lớn hơn 1.
    • 'b' = 'b' ,... và hàng ngàn, hàng tỷ cách viết khác.
    Bypass khác:
    • Dấu -- trong sql và mysql được hiểu là chú thích, không xử lý tới dữ liệu sau dấu -- này.
    • Chính vì dấu -- ta có thể tùy biến thêm để câu lệnh ' or '1'='1 không có khả năng bị lỗi và có thêm các lệnh xử lý phía sau bằng cách chèn thêm như sau: ' or '1'='1 --
    • Truyền thêm ' or '1'='1 -- thì SQL sẽ được đổi như sau:
    Mã:
    select * from username where username = ' 123456' and password = ' ' or '1'='1' --'
    
    • Nghĩa là đấu ' đóng câu lệnh SQL sẽ không có tác dung vì nó nằm sau bị ghi chú lại bởi dấu --
    Ngoài ra bạn có thể tùy biến như sau : VD: bạn truy cập như sau
    Mã:
    @username=123456'-- và @password=123456
    
    • Câu SQL sẽ bị đổi là:
    Mã:
    select * from username where username = ' 123456'-- ' and password = ' ' or '1'='1'
    
    • Nghĩa là: chỉ cần đúng username là được, không quan tâm tới mật khẩu ra sao. Như vậy chỉ cần tìm hiểu username quản trị là gì ta điền vào là có thể truy cập vào tài khoản quản trị ngay.
    Trên là những kiến thức tổng hợp và tự tìm hiểu, bạn nào còn thêm kiểu, phương thức Bypass nào thì viết dưới tiếp nhé.

    Bài viết được bảo vệ bởi DMCA.com Protection Status
     
    Cảm ơn đã xem bài:

    Bypass là gì? trong login, đăng nhập bypass định nghĩa như thế nào?

    Last edited by a moderator: 14/8/16


Chủ để tương tự : Bypass trong
Diễn đàn Tiêu đề Date
Tin tức lập trình Website Lỗi: Không sử dụng trình nghe bị động để cải thiện hiệu suất cuộn trong wordpress 25/12/20
Tin tức lập trình Website Cảnh báo lỗi: Missing theme-color trong meta website 24/12/20
Tin tức lập trình Website Chọn màu sắc theo phong thủy trong thiết kế website du lịch 9/1/20
Tin tức lập trình Website Bố cục trong thiết kế website du lịch 8/1/20
Tin tức lập trình Website Cài đặt www cho subdomain trong quản lý DNS domian như thế nào? 4/7/19