Hướng dẫn SQL Injection: Tìm hiểu với ví dụ

Mục lục:

Anonim

Dữ liệu là một trong những thành phần quan trọng nhất của hệ thống thông tin. Các ứng dụng web hỗ trợ cơ sở dữ liệu được tổ chức sử dụng để lấy dữ liệu từ khách hàng. SQL là từ viết tắt của Ngôn ngữ truy vấn có cấu trúc. Nó được sử dụng để lấy và thao tác dữ liệu trong cơ sở dữ liệu.

SQL Injection là gì?

SQL Injection là một cuộc tấn công đầu độc các câu lệnh SQL động để nhận xét ra các phần nhất định của câu lệnh hoặc thêm vào một điều kiện sẽ luôn đúng. Nó lợi dụng các lỗ hổng thiết kế trong các ứng dụng web được thiết kế kém để khai thác các câu lệnh SQL để thực thi mã SQL độc hại.

Trong hướng dẫn này, bạn sẽ tìm hiểu các kỹ thuật SQL Injection và cách bạn có thể bảo vệ các ứng dụng web khỏi các cuộc tấn công như vậy.

  • Cách hoạt động của SQL Injection
  • Hoạt động lấy cắp dữ liệu: SQL Chèn ứng dụng web
  • Các kiểu tấn công SQL Injection khác
  • Công cụ tự động hóa cho SQL Injection
  • Cách ngăn chặn các cuộc tấn công SQL Injection
  • Hoạt động lấy cắp dữ liệu: Sử dụng Havji cho SQL Injection

Cách hoạt động của SQL Injection

Các loại tấn công có thể được thực hiện bằng cách sử dụng SQL injection khác nhau tùy thuộc vào loại công cụ cơ sở dữ liệu. Cuộc tấn công hoạt động trên các câu lệnh SQL động . Câu lệnh động là một câu lệnh được tạo tại thời điểm chạy bằng cách sử dụng mật khẩu tham số từ biểu mẫu web hoặc chuỗi truy vấn URI.

Hãy xem xét một ứng dụng web đơn giản với một biểu mẫu đăng nhập. Mã cho biểu mẫu HTML được hiển thị bên dưới.

ĐÂY,

  • Biểu mẫu trên chấp nhận địa chỉ email và mật khẩu, sau đó gửi chúng vào tệp PHP có tên là index.php.
  • Nó có tùy chọn lưu trữ phiên đăng nhập trong cookie. Chúng tôi đã suy luận điều này từ hộp kiểm nhớ_me. Nó sử dụng phương pháp đăng để gửi dữ liệu. Điều này có nghĩa là các giá trị không được hiển thị trong URL.

Giả sử câu lệnh ở phần phụ trợ để kiểm tra ID người dùng như sau

CHỌN * TỪ người dùng WHERE email = $ _POST ['email'] AND password = md5 ($ _ POST ['password']);

ĐÂY,

  • Câu lệnh trên sử dụng trực tiếp các giá trị của mảng $ _POST [] mà không cần xóa chúng.
  • Mật khẩu được mã hóa bằng thuật toán MD5.

Chúng tôi sẽ minh họa cuộc tấn công SQL injection bằng cách sử dụng sqlfiddle. Mở URL http://sqlfiddle.com/ trong trình duyệt web của bạn. Bạn sẽ nhận được cửa sổ sau.

Lưu ý: bạn sẽ phải viết các câu lệnh SQL

Bước 1) Nhập mã này vào khung bên trái

CREATE TABLE `users` (`id` INT NOT NULL AUTO_INCREMENT,`email` VARCHAR(45) NULL,`password` VARCHAR(45) NULL,PRIMARY KEY (`id`));insert into users (email,password) values ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));

Bước 2) Nhấp vào Bản dựng lược đồ

Bước 3) Nhập mã này vào khung bên phải

chọn * từ người dùng;

Bước 4) Nhấp vào Chạy SQL. Bạn sẽ thấy kết quả sau

Giả sử người dùng cung cấp Địa chỉ email này đang được bảo vệ khỏi spam bots. Bạn cần bật Javascript để xem nó. 1234 làm mật khẩu. Câu lệnh được thực thi dựa trên cơ sở dữ liệu sẽ là

SELECT * FROM users WHERE email = ' Địa chỉ email này đang được bảo vệ khỏi spam bots. Bạn cần bật Javascript để xem nó. ' Mật khẩu AND = md5 ('1234');

Đoạn mã trên có thể được khai thác bằng cách bình luận về phần mật khẩu và thêm vào một điều kiện sẽ luôn đúng. Giả sử kẻ tấn công cung cấp thông tin đầu vào sau trong trường địa chỉ email.

Địa chỉ email này đã được bảo vệ từ spam bots. Bạn cần bật Javascript để xem nó. ' HOẶC 1 = 1 GIỚI HẠN 1 - ']

xxx cho mật khẩu.

Câu lệnh động được tạo sẽ như sau.

SELECT * FROM users WHERE email = ' Địa chỉ email này đang được bảo vệ khỏi spam bots. Bạn cần bật Javascript để xem nó. ' HOẶC 1 = 1 GIỚI HẠN 1 - '] VÀ mật khẩu = md5 (' 1234 ');

ĐÂY,

  • Địa chỉ email này đã được bảo vệ từ spam bots. Bạn cần bật Javascript để xem nó. kết thúc bằng một câu trích dẫn duy nhất hoàn thành câu trích dẫn chuỗi
  • HOẶC 1 = 1 GIỚI HẠN 1 là điều kiện luôn đúng và giới hạn kết quả trả về chỉ trong một bản ghi.
  • - 'VÀ ... là một chú thích SQL loại bỏ phần mật khẩu.

Sao chép câu lệnh SQL ở trên và dán nó vào hộp văn bản SQL FiddleRun SQL như được hiển thị bên dưới

Hoạt động lấy cắp dữ liệu: SQL Chèn ứng dụng web

Chúng tôi có một ứng dụng web đơn giản tại http://www.techpanda.org/ dễ bị tấn công SQL Injection chỉ cho mục đích trình diễn. Mã biểu mẫu HTML ở trên được lấy từ trang đăng nhập. Ứng dụng cung cấp bảo mật cơ bản như khử trùng trường email. Điều này có nghĩa là mã ở trên của chúng tôi không thể được sử dụng để bỏ qua đăng nhập.

Để làm tròn điều đó, thay vào đó chúng ta có thể khai thác trường mật khẩu. Sơ đồ dưới đây cho thấy các bước mà bạn phải làm theo

Giả sử kẻ tấn công cung cấp thông tin đầu vào sau

  • Bước 1: Nhập Địa chỉ email này đang được bảo vệ từ spam bots. Bạn cần bật Javascript để xem nó. như địa chỉ email
  • Bước 2: Nhập xxx ') HOẶC 1 = 1 -]
  • Bấm vào nút Gửi
  • Bạn sẽ được dẫn đến trang tổng quan

Câu lệnh SQL được tạo sẽ như sau

SELECT * FROM users WHERE email = ' Địa chỉ email này đang được bảo vệ khỏi spam bots. Bạn cần bật Javascript để xem nó. ' AND password = md5 ('xxx') OR 1 = 1 -] ');

Sơ đồ dưới đây minh họa câu lệnh đã được tạo.

ĐÂY,

  • Tuyên bố giả định một cách thông minh mã hóa md5 được sử dụng
  • Hoàn thành dấu ngoặc kép và dấu ngoặc đơn
  • Thêm một điều kiện cho câu lệnh sẽ luôn đúng

Nói chung, một cuộc tấn công SQL Injection thành công sẽ cố gắng thực hiện một số kỹ thuật khác nhau, chẳng hạn như các kỹ thuật đã trình bày ở trên để thực hiện một cuộc tấn công thành công.

Các kiểu tấn công SQL Injection khác

SQL Injjection có thể gây hại nhiều hơn là chỉ chuyển các thuật toán đăng nhập. Một số cuộc tấn công bao gồm

  • Xóa dữ liệu
  • Cập nhật dữ liệu
  • Chèn dữ liệu
  • Thực thi các lệnh trên máy chủ có thể tải xuống và cài đặt các chương trình độc hại như Trojan
  • Xuất dữ liệu có giá trị như chi tiết thẻ tín dụng, email và mật khẩu tới máy chủ từ xa của kẻ tấn công
  • Lấy chi tiết đăng nhập của người dùng, v.v.

Danh sách trên không toàn diện; nó chỉ cung cấp cho bạn một ý tưởng về những gì SQL Injection

Công cụ tự động hóa cho SQL Injection

Trong ví dụ trên, chúng tôi đã sử dụng các kỹ thuật tấn công thủ công dựa trên kiến ​​thức rộng lớn của chúng tôi về SQL. Có những công cụ tự động có thể giúp bạn thực hiện các cuộc tấn công hiệu quả hơn và trong thời gian ngắn nhất có thể. Những công cụ này bao gồm

  • SQLSmack - https://securiteam.com/tools/5GP081P75C
  • SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
  • SQLMap - http://sqlmap.org/

Cách ngăn chặn các cuộc tấn công SQL Injection

Một tổ chức có thể áp dụng chính sách sau để tự bảo vệ mình khỏi các cuộc tấn công SQL Injection.

  • Đầu vào của người dùng không bao giờ được tin cậy - Nó phải luôn được làm sạch trước khi được sử dụng trong các câu lệnh SQL động.
  • Các thủ tục được lưu trữ - những thủ tục này có thể đóng gói các câu lệnh SQL và coi tất cả đầu vào là các tham số.
  • Câu lệnh chuẩn bị - các câu lệnh được chuẩn bị sẵn để hoạt động bằng cách tạo câu lệnh SQL trước rồi xử lý tất cả dữ liệu người dùng đã gửi dưới dạng tham số. Điều này không ảnh hưởng đến cú pháp của câu lệnh SQL.
  • Biểu thức chính quy - những biểu thức này có thể được sử dụng để phát hiện mã có hại tiềm ẩn và loại bỏ nó trước khi thực thi các câu lệnh SQL.
  • Quyền truy cập của người dùng kết nối cơ sở dữ liệu - chỉ những quyền truy cập cần thiết nên được cấp cho các tài khoản được sử dụng để kết nối với cơ sở dữ liệu. Điều này có thể giúp giảm những gì các câu lệnh SQL có thể thực hiện trên máy chủ.
  • Thông báo lỗi - những thông báo này không được tiết lộ thông tin nhạy cảm và chính xác nơi xảy ra lỗi. Các thông báo lỗi tùy chỉnh đơn giản như “Xin lỗi, chúng tôi đang gặp lỗi kỹ thuật. Đội ngũ kỹ thuật đã được liên hệ. Vui lòng thử lại sau ”có thể được sử dụng thay vì hiển thị các câu lệnh SQL gây ra lỗi.

Hoạt động lấy cắp dữ liệu: Sử dụng Havij cho SQL Injection

Trong tình huống thực tế này, chúng ta sẽ sử dụng chương trình Havij Advanced SQL Injection để quét các lỗ hổng bảo mật trên trang web.

Lưu ý: chương trình chống vi-rút của bạn có thể gắn cờ nó do bản chất của nó. Bạn nên thêm nó vào danh sách loại trừ hoặc tạm dừng phần mềm diệt vi-rút của mình.

Hình ảnh dưới đây cho thấy cửa sổ chính của Havij

Công cụ trên có thể được sử dụng để đánh giá lỗ hổng của một trang web / ứng dụng.

Tóm lược

  • SQL Injection là một kiểu tấn công khai thác các câu lệnh SQL xấu
  • SQL injection có thể được sử dụng để bỏ qua các thuật toán đăng nhập, truy xuất, chèn, cập nhật và xóa dữ liệu.
  • Các công cụ chèn SQL bao gồm SQLMap, SQLPing và SQLSmack, v.v.
  • Một chính sách bảo mật tốt khi viết câu lệnh SQL có thể giúp giảm các cuộc tấn công SQL injection.