Download SQL Injection và phân loại and more Slides Network security in PDF only on Docsity!
SQL INJECTION
Lê Văn Vĩ
Nguyễn Thành Long
Bùi Xuân Huy
Phạm Anh Tuấn
SQL Injection
- Giới thiệu về SQL Injection
- Các kịch bản tấn công
- Các cách phòng chống
- Demo
- Giới thiệu về SQL Injection Nguyên nhân: (^) Dữ liệu đầu vào từ người dùng hoặc từ các nguồn khác không được kiểm tra hoặc kiểm tra không kỹ lưỡng (^) Ứng dụng sử dụng các câu lệnh SQL động, trong đó dữ liệu được kết nối với mã SQL gốc để tạo câu lệnh SQL hoàn chỉnh
- Giới thiệu về SQL Injection Tùy vào mức độ tinh vi, SQL Injection có thể cho phép kẻ tấn công: (^) Vượt qua các khâu xác thực người dùng (^) Chèn, xóa hoặc sửa đổi dữ liệu (^) Đánh cắp các thông tin trong CSDL (^) Chiếm quyền điều khiển hệ thống
- Giới thiệu về SQL Injection (^) Đây là dạng tấn công phổ biến nhất và cũng dễ để khai thác lỗ hổng SQL Injection nhất (^) Xảy ra khi hacker có thể tổ chức tấn công và thu thập kết quả trực tiếp trên cùng một kênh liên lạc (^) In-Band SQLi chia làm 2 loại chính: (^) Error-based SQLi (^) Union-based SQLi In-band SQLi (Classic SQLi)
- Giới thiệu về SQL Injection (^) Là một kỹ thuật tấn công SQL Injection dựa vào thông báo lỗi được trả về từ Database Server có chứa thông tin về cấu trúc của cơ sở dữ liệu. (^) Trong một vài trường hợp, chỉ một mình Error-based là đủ cho hacker có thể liệt kê được các thuộc tính của cơ sở dữ liệu Error-based SQLi
- Giới thiệu về SQL Injection (^) Không giống như In-band SQLi, Inferential SQL Injection tốn nhiều thời gian hơn cho việc tấn công do không có bất kì dữ liệu nào được thực sự trả về thông qua web application và hacker thì không thể theo dõi kết quả trực tiếp như kiểu tấn công In-band (^) Thay vào đó, kẻ tấn công sẽ cố gắng xây dựng lại cấu trúc cơ sở dữ liệu bằng việc gửi đi các payloads, dựa vào kết quả phản hồi của web application và kết quả hành vi của database server. (^) Có 2 dạng tấn công chính (^) Blind-boolean-based (^) Blind-time-based SQLi Inferential SQLi (Blind SQLi)
- Giới thiệu về SQL Injection (^) Là kĩ thuật tấn công SQL Injection dựa vào việc gửi các truy vấn tới cơ sở dữ liệu bắt buộc ứng dụng trả về các kết quả khác nhau phụ thuộc vào câu truy vấn là true hay false. (^) Tuỳ thuộc kết quả trả về của câu truy vấn mà HTTP reponse có thể thay đổi, hoặc giữ nguyên (^) Kiểu tấn công này thường chậm (đặc biệt với cơ sở dữ liệu có kích thước lớn) do người tấn công cần phải liệt kê từng dữ liệu, hoặc mò từng kí tự Boolean-based SQLi
- Giới thiệu về SQL Injection (^) Out-of-band SQLi không phải dạng tấn công phổ biến, chủ yếu bởi vì nó phụ thuộc vào các tính năng được bật trên Database Server được sở dụng bởi Web Application. Kiểu tấn công này xảy ra khi hacker không thể trực tiếp tấn công và thu thập kết quả trực tiếp trên cùng một kênh (In-band SQLi), và đặc biệt là việc phản hồi từ server là không ổn định (^) Kiểu tấn công này phụ thuộc vào khả năng server thực hiện các request DNS hoặc HTTP để chuyển dữ liệu cho kẻ tấn công. (^) Ví dụ như câu lệnh xp_dirtree trên Microsoft SQL Server có thể sử dụng để thực hiện DNS request tới một server khác do kẻ tấn công kiểm soát, hoặc Oracle Database’s UTL HTTP Package có thể sử dụng để gửi HTTP request từ SQL và PL/SQL tới server do kẻ tấn công làm chủ Out-of-band SQLi
- Các kịch bản tấn công (^) Vượt qua khâu xác thực người dùng (^) Sửa đổi, xóa dữ liệu (^) Đánh cắp thông tin trong cơ sở dữ liệu (CSDL) (^) Chiếm quyền điều khiển hệ thống
2.1 Vượt qua khâu xác thực người dùng (^) Nếu người dùng nhập admin vào trường username và abc vào trường passwd của form, mã xử lý hoạt động đúng:
- Nếu tồn tại người dùng với username và password sẽ cho phép đăng nhập;
- Nếu không tồn tại người dùng với username và password sẽ từ chối đăng nhập và báo lỗi. (^) Nếu người dùng nhập aaaa' OR 1=1-- vào trường username và một chuỗi bất kỳ vào trường passwd của form, mã xử lý hoạt động sai: (^) • Chuỗi chứa câu truy vấn SQL trở thành: SELECT * FROM tbl_accounts WHERE username='aaaa' OR 1=1--' AND passwd='aaaa'
2.2 Sửa đổi, hoặc xóa dữ liệu Ví dụ: form HTML tìm kiếm sản phẩm:
(^) giả thiết đã kết nối với CSDL SQL server qua connection conn và bảng **tbl_products** lưu thông tin sản phẩm (^) Dim keyword, sqlString, rsSearch (^) lấy dữ liệu từ form **keyword = Request.Form(" keyword")** (^) tạo và thực hiện câu truy vấn sql sqlString = **"SELECT * FROM tbl_products WHERE product_name like '%" & keyword & "%'"**
2.2 Sửa đổi, hoặc xóa dữ liệu (^) Bằng thủ thuật tương tự, kẻ tấn công có thể thay lệnh DELETE bằng lệnh UPDATE hoặc INSERT để xóa hoặc chèn dữ liệu. (^) Cập nhật mật khẩu của người quản trị: iphon e 7plus ';UPDATE tbl_administrators SET password=abc123 WHERE username = 'admin';-- (^) Chèn thêm bản ghi: iphon e 7plus ';INSERT INTO tbl_administrators (username, password) VALUES ('attacker', 'abc12345');-- (^) Xóa cả bảng dữ liệu: iphon e 7plus ';DROP TABLE tbl_products;--
2.3 Đánh cắp các thông tin trong CSDL Lỗi chèn mã SQL có thể cho phép tin tặc đánh cắp dữ liệu nhạy cảm trong CSDL thông qua 1 số bước: (^) Tìm lỗi chèn mã SQL và thăm dò các thông tin về CSDL:
- Phiên bản máy chủ CSDL: nhập các câu lệnh lỗi và kiểm tra thông báo lỗi; hoặc sử dụng @@version (MS SQL), hoặc version() (MySQL) trong UNION SELECT. (^) Trích xuất thông tin về tên các bảng, trường trong CSDL (^) Sử dụng lệnh UNION SELECT để ghép các thông tin định trích xuất vào câu query hiện tạ