Đăng nhập vào quản trị không cần biết mật khẩu, kỹ thuật gọi là bypass login.

Khi bạn muốn đăng nhập vào website nào đó? Chỉ cần có user + mật khẩu là ok - đoán pass thần chưởng chăng... kaka. Tuy nhiên, đâu dễ gì mà đoán pass, dò mật khẩu được đâu. Không cần mật khẩu, mình vẫn có thể đăng nhập được - bypass login

Bypass login là 1 kỹ thuật khá phổ biến mà hacker thích thử để tấn công website. Tỉ lệ thành công cũng khá cao, nhất là khi hacker gặp các website cùi bắp, như blog.itnet.vn chẳng hạn.

Bypass login là gì? Đây là 1 kỹ thuật mà hacker gõ 1 vài kí tự vớ va vở vẫn nào đó, nhằm vượt qua cơ chể kiểm tra của chương trình. Làm cho chương trình hiểu là chúng ta đang đường đường chính chính vào phần quản trị web.

Phân tích đăng nhập vào website

Khi xử lí  thực hiện việc đăng nhập vào website của người dùng, Lập trình viên thông thường sẽ thực hiện 02 thao tác như sau:

1. Lấy thông tin người đăng nhập thông qua phương thức post, (ở đây, không có lập trình viên nào tồi đến nỗi sử dụng phương thức get đâu nhỉ?), ở đây chỉ có 2 trường dữ liệu là tài khoản đăng nhậpmật khẩu, ở đây mình tạm gọi là user, pass cho ... IT nhé.

2. Thực hiện câu lệnh SQL để kiểm tra user, pass có trùng trong dữ liệu hay không? nếu có thì ---> đăng nhập thành công và chuyển trang vào phần quản trị web để người dùng quản lí dữ liệu của mình.

Câu lệnh như sau: (Minh họa bằng code PHP và dữ liệu MySQL

Rõ ràng, xét về mặt logic thì đoạn chương trình trên hoạt động bình thường, cho kết quả đúng. Tuy nhiên, vấn đề không hề đơn giản như vậy. Hacker đầu óc nó quái dị (như mình chẳng hạn  cheeky  kaka ) -  mình không chịu nhập vào những giá trị thông thường, mà hay nhập vào những thứ linh tinh vớ vẩn như sau:

Theo các bạn, chuyện gì sẽ xẩy ra?

Chúng ta kiểm tra từng bước nhé.

Dòng số 8 và dòng số 9, chương trình sẽ lấy 2 giá trị tương ứng, gán cho 2 biến $user và $pass.

Giá trị của chúng sẽ là:

$user = admin

$pass= ' OR '1'='1' --

Dòng số 10, 2 biến này sẽ được thay thế trong câu lệnh SQL

Câu lệnh SQL sẽ trở thành:

$sql = SELECT * FROM itnetvn_user WHERE user_name='admin' AND password='' OR '1'='1' --

Rõ ràng, trong mệnh đề OR, chỉ cần 1 đúng là tất cả đều đúng. Do đó, với câu lệnh này, chương trình sẽ lấy toàn bộ tài khoản có trong bảng: itnetvn_user.

Điều đó chứng tỏ dòng số 12 là mệnh đề đúng (ngoại trừ trường hợp bảng: itnetvn_user không có tài khoản nào cheeky )

Chuyện gì đến nó sẽ đến!

 

Xem thêm