Hướng dẫn what is sql injection attack in php? - tấn công sql injection trong php là gì?

Nhiều nhà phát triển web không biết làm thế nào các truy vấn SQL có thể bị giả mạo và cho rằng truy vấn SQL là một lệnh đáng tin cậy. Điều đó có nghĩa là các truy vấn SQL có thể phá vỡ các điều khiển truy cập, do đó bỏ qua kiểm tra xác thực và ủy quyền tiêu chuẩn và đôi khi các truy vấn SQL thậm chí có thể cho phép truy cập vào các lệnh cấp hệ điều hành máy chủ.

Tiêm lệnh SQL trực tiếp là một kỹ thuật mà kẻ tấn công tạo hoặc thay đổi các lệnh SQL hiện có để hiển thị dữ liệu ẩn hoặc ghi đè các lệnh có giá trị hoặc thậm chí để thực hiện các lệnh cấp hệ thống nguy hiểm trên máy chủ cơ sở dữ liệu. Điều này được thực hiện bằng ứng dụng lấy đầu vào của người dùng và kết hợp nó với các tham số tĩnh để xây dựng truy vấn SQL. Các ví dụ sau đây dựa trên những câu chuyện có thật, thật không may.

Do thiếu xác thực đầu vào và kết nối với cơ sở dữ liệu thay mặt cho một siêu người dùng hoặc người có thể tạo người dùng, kẻ tấn công có thể tạo một siêu người dùng trong cơ sở dữ liệu của bạn.

Ví dụ #1 chia kết quả được đặt thành các trang ... và tạo siêu người dùng [PostgreSQL]

Người dùng bình thường Nhấp vào các liên kết 'tiếp theo', 'trước' trong đó $ offset được mã hóa vào URL. Kịch bản hy vọng rằng bù $ đến là một số thập phân. Tuy nhiên, điều gì sẽ xảy ra nếu ai đó cố gắng đột nhập bằng cách nối thêm một dạng urlencode [] 'urlencode[]'d form of the following to the URL

0;
insert into pg_shadow[usename,usesysid,usesuper,usecatupd,passwd]
    select 'crack', usesysid, 't','t','crack'
    from pg_shadow where usename='postgres';
--

Nếu nó xảy ra, thì kịch bản sẽ trình bày một siêu người dùng truy cập vào anh ta. Lưu ý rằng 0; là cung cấp một phần bù hợp lệ cho truy vấn ban đầu và chấm dứt nó.

Ghi chú::

Đó là kỹ thuật phổ biến để buộc trình phân tích cú pháp SQL bỏ qua phần còn lại của truy vấn được viết bởi nhà phát triển với --, đó là dấu hiệu nhận xét trong SQL.

Một cách khả thi để có được mật khẩu là phá vỡ các trang kết quả tìm kiếm của bạn. Điều duy nhất mà kẻ tấn công cần làm là xem liệu có bất kỳ biến được gửi nào được sử dụng trong các câu lệnh SQL không được xử lý đúng cách không. Các bộ lọc này có thể được đặt phổ biến ở dạng trước để tùy chỉnh các điều khoản WHERE, ORDER BY, LIMITOFFSET trong các câu lệnh SELECT. Nếu cơ sở dữ liệu của bạn hỗ trợ cấu trúc

'
union select '1', concat[uname||'-'||passwd] as name, '1971-01-01', '0' from usertable;
--
0, kẻ tấn công có thể cố gắng nối toàn bộ truy vấn vào bản gốc để liệt kê mật khẩu từ một bảng tùy ý. Sử dụng các trường mật khẩu được mã hóa được khuyến khích mạnh mẽ.

Ví dụ #2 Liệt kê các bài viết ... và một số mật khẩu [bất kỳ máy chủ cơ sở dữ liệu nào]

Bài Viết Liên Quan

Chủ Đề