Nội dung chính: 1.Giới thiệu về SQL Injection 2.Các dạng tấn công SQL Injection 3.Cách phòng chống tấn công SQL Injection 4.Demo tấn công SQL Injection
1. Giới thiệu về SQL INJECTION
SQL là gì? Là hình thức tấn công cho phép những kẻ tấn công lợi dụng lỗ hỏng của việc kiểm tra dữ liệu đầu vào của các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu để đưa vào thi hành các câu lệnh SQL bất hợp pháp. Điều này gây ra tác hại rất lớn do tin tặc có toàn quyền sử dụng và thay đổi toàn bộ hệ cơ sở dữ liệu. Cách tấn công vào các kho lưu trữ dữ liệu vừa đơn giản vừa hiệu quả. 1.1 Mục đích tấn công SQL INJECTION Đánh cắp dữ liệu từ cơ sở dữ liệu Thay đổi dữ liệu trong cơ sở dữ liệu Đánh sập một website 1.2 Cách thức hoạt động 2. Phân loại các kiểu tấn công SQL INJECTION Có 3 kiểu tấn công: 1. In-band SQLi 2. Inferential SQLi (Blind SQLi) 3. Out-of-band SQLi 2.1 In-band SQLi Đây là kiểu thường thấy và đơn giản nhất để khai thác thông tin Là kiểu tấn công thực hiện việc chèn mã độc và trực tiếp nhận về kết quả trên cùng 1 kênh In-band SQLi được chia làm 2 loại chính là: Error-base SQLi : là kiểu tấn công làm cơ sở dữ liệu tạo ra thông báo lỗi để lợi dụng khai thác thông tin Union-base SQLi :là kỹ thuật lợi dụng toán tử UNION SQL để kết hợp nhiều câu lệnh được tạo bởi Cơ sở dữ liệu để nhận được một HTTP response, thông tin được chứa trong đó và có thể khai thác dễ dàng 2.2 Inferential SQLi (Blind SQLi) Kiểu tấn công này phát sinh khi 1 ứng dụng dễ bị tấn công bởi SQL INJECTION nhưng lại có bảo mật cao hơn 1 chút khi không trả về các kết quả truy vấn SQL mà được nhập vào từ input như kiểu In-band Inferential SQLi diễn ra chậm do nó dựa trên phản ứng và các hành vi hoạt động của server, nhưng độ thiệt thì tương tự với In-band Inferential có 2 dạng chính: Boolean-base: tấn công dựa việc đánh giá phản hồi dạng true hoặc false từ web app Time-base: Tấn công dựa vào thời gian phản hồi từ app Giả sử khi truy cập 1 trang web bán hàng online, URL có dạng:
URL trên sẽ hiển thị thông tin chi tiết của sản phẩm của id=1 được lấy từ cơ sở dữ liệu. Câu lệnh SQL lúc này sẽ là:
Nếu kẻ tấn công thêm chuỗi and 1 = 1
Lúc này câu lệnh SQL sẽ thành Do 1=1 luôn luôn đúng nên trả về true hiển thị chi tiết sản phẩm có id=1 2.3 Out-of-band SQLi Cách này thường ít được dùng do nó cần sử dụng các tính năng mà phải được cho phép ở sever và được dùng bởi app Cách này không thể nhập đầu vào và thu về kết quả trên cùng một kênh (không dùng được In-band), hoặc khi sever quá chậm hoặc không ổn định (không dùng được Inferential) Cách này sẽ khiến app gửi kết quả truy vấn về một kênh khác mà tin tặc kiểm soát Nếu một trang web có một form tìm kiếm và người dùng nhập vào một câu lệnh SQL không hợp lệ, hacker có thể sử dụng form tìm kiếm đó để gửi câu lệnh và thiết lập một trang web khác như là một đích đến để nhận kết quả trả về từ cơ sở dữ liệu 3. Cách phòng chống Loại bỏ các ký tự và từ khóa nguy hiểm (như: --, select, where,...) Nên loại bỏ bất kì thông tin kỹ thuật nào chứa trong thông điệp chuyển xuống cho người dùng khi có lỗi Kiểm soát chặc chẽ tất cả các dữ liệu nhận được từ đối tượng Request (như: giới hạn chiều dài của chuỗi nhập liệu) Tránh dùng đến các quyền như dbo hay sa 4. Demo tấn công SQL INJECTION