it-swarm-vi.com

SQL tiêm với AND 1 = 1

Hãy giải thích ý nghĩa của "AND 1 = 1 "trong một cuộc tấn công SQL SQL. Đó là từ một bài tập trong trường đại học của tôi. Ví dụ:.

select * from user where id = 'smith'' AND 1=1;--  and birthdate = 1970;

hoặc là

select * from user where id = 'smith' and birthdate = 1970 AND 1=1;--;
20
Alex

Câu hỏi cụ thể là SQL tiêm với VÀ 1 = 1 và không HOẶC 1 = 1. Có một sự khác biệt lớn ở đây trong những gì OP đang hỏi về. Nếu tôi là giáo viên của bạn và bạn cung cấp cho tôi câu trả lời của JonathanMueller, bạn sẽ nhận được điểm kém vì bạn không hiểu câu hỏi.

VÀ 1 = 1 được sử dụng phổ biến trong tiêm SQL mù . Đây là khi bạn phải xác định giữa trạng thái đúng hay sai từ kết quả của ứng dụng để tìm ra kết quả thực tế là gì. Bạn không nhận được dữ liệu được liệt kê trong kết quả, điều duy nhất được trả về là trạng thái thay đổi.

Nếu bạn cố gắng khai thác phép tiêm SQL mù với OR 1 = 1 bạn sẽ thất bại vì việc sử dụng chính OR 1 = 1 là để luôn luôn đúng câu lệnh để lấy hầu hết dữ liệu ra khỏi cơ sở dữ liệu hoặc để buộc một câu lệnh đúng trong trường hợp tập lệnh đăng nhập được khai thác.

Một ví dụ khai thác SQL mù thực tế:

Chúng tôi sử dụng ví dụ của mình: http://www.site.com/news.php?id=7 Hãy kiểm tra nó: http://www.site.com/news.php ? id = 7 và 1 = 1 <--- điều này luôn đúng và trang tải bình thường, điều đó ổn.

http://www.site.com/news.php?id=7 và 1 = 2 <--- điều này là sai, vì vậy nếu một số văn bản, hình ảnh hoặc một số nội dung bị thiếu trên trang trả về sau đó trang web đó dễ bị tổn thương khi tiêm sql mù.

Một ví dụ khác mà bạn cố gắng tìm ra phiên bản MySQL:

http://www.site.com/news.php?id=7 và chuỗi con (@@ phiên bản, 1,1) = 4 Điều này sẽ trả về TRUE nếu phiên bản của MySQL là 4. Thay thế 4 với 5 và nếu truy vấn trả về TRUE thì phiên bản là 5.

Ví dụ được lấy từ: http://www.Exloit-db.com/doad_pdf/14475

34
Chris Dale

Thông thường, bạn sẽ thấy cụm từ là "HOẶC 1 = 1 '". Lý do là, nếu lập trình viên không xử lý đúng các tham số (như id người dùng), thì kẻ tấn công có thể sử dụng OR 1=1 để trả về tất cả dữ liệu trong bảng.

Ví dụ: giả sử chúng tôi muốn nhận thông tin chi tiết về người dùng có tên smith. Truy vấn có thể là select * from user where id = '?', trong đó dấu hỏi được thay thế bằng tham số từ đầu vào của người dùng. Nếu kẻ tấn công vượt qua smith' OR 1=1--, SQL kết quả sẽ là select * from user where id = 'smith' OR 1=1--'. Trong trường hợp này, trích dẫn đơn thứ hai từ truy vấn ban đầu bị bỏ qua vì đây là một phần của nhận xét và truy vấn sẽ trả về tất cả dữ liệu trong bảng người dùng.

15
JonathanMueller

Để đưa ra một ví dụ (hơi tầm thường, ngoài đầu) về tiêm sql, hãy tưởng tượng truy vấn này ở đâu đó trong mã ứng dụng của bạn ...

select 1 from user where name='[NAME]' and password='[PASS]'

sau khi Malicy Guy đặt các tham số có tên ở trên cho lựa chọn của mình, bạn nhận được:

select 1 from user where name='admin' --' and password='[PASS]'
[.___] .]

Do đó, giả sử truy vấn có nghĩa là trả về 1 cho thành công và tập hợp trống cho người dùng hoặc vượt qua không hợp lệ, 1 sẽ bị trả lại nhầm, cho phép người dùng xấu này đăng nhập với tư cách là tài khoản "quản trị viên".

0
Garrett