- Tổng đài 24/7: 1800 646 881
- Đăng nhập
- 3
SQL Injection là một kỹ thuật tấn công vào cơ sở dữ liệu của một ứng dụng web, mà người tấn công có thể thực thi các câu lệnh SQL không mong muốn và có thể gây ra thiệt hại nghiêm trọng cho hệ thống. Điều này làm cho SQL Injection trở thành một trong những lỗ hổng bảo mật nghiêm trọng nhất đối với các ứng dụng web. Vậy SQL Injection là gì? Tại sao nó lại đáng lo ngại đến vậy? Hãy cùng tìm hiểu qua bài viết này.
SQL Injection (tạm dịch là “tiêm SQL”) là một kỹ thuật tấn công được sử dụng để khai thác lỗ hổng bảo mật trong các ứng dụng web. Khi một ứng dụng web không kiểm tra hoặc xử lý đầu vào từ người dùng đúng cách, kẻ tấn công có thể tiêm vào các câu lệnh SQL không mong muốn vào cơ sở dữ liệu của ứng dụng.
SQL Injection là một trong những phương thức tấn công phổ biến nhất, và nó có thể gây ra những thiệt hại nghiêm trọng cho hệ thống. Kẻ tấn công có thể sử dụng SQL Injection để truy cập, thay đổi hoặc xóa dữ liệu, hoặc thậm chí là thực thi các câu lệnh SQL để kiểm soát hoàn toàn hệ thống. Điều này có thể gây ra những hậu quả nghiêm trọng, bao gồm mất dữ liệu, thiệt hại tài chính, hoặc thậm chí là tiết lộ thông tin nhạy cảm.
SQL injection hoạt động bằng cách sử dụng các câu lệnh SQL không đúng được chèn vào các ô nhập liệu trên trang web. Khi người dùng nhập và gửi dữ liệu lên trang web, các câu lệnh SQL này sẽ được gửi đến cơ sở dữ liệu và được thực thi.
Ví dụ, nếu một trang web yêu cầu người dùng nhập tên đăng nhập và mật khẩu để đăng nhập, hacker có thể sử dụng câu lệnh SQL injection để thêm các câu lệnh khác vào ô nhập tên đăng nhập. Ví dụ, nếu hacker nhập “admin' OR '1'='1
” vào ô nhập tên đăng nhập, câu lệnh SQL sẽ trở thành “SELECT * FROM users WHERE username='admin' OR '1'='1' AND password='[password]'
” và sẽ trả về tất cả các bản ghi trong bảng người dùng, bởi vì câu lệnh “OR '1'='1'
” luôn luôn đúng.
Các hacker cũng có thể sử dụng các câu lệnh SQL injection để thực hiện các hành động không mong muốn khác như xóa dữ liệu hoặc thay đổi thông tin trong cơ sở dữ liệu.
Tập lệnh sau đây là mã giả được thực thi trên máy chủ web. Đây là một ví dụ đơn giản về xác thực bằng ID và Password. Cơ sở dữ liệu ví dụ có một bảng được đặt tên users
với các cột sau: username
và password
.
# Define POST variables
uname = request.POST['username']
passwd = request.POST['password']
# SQL query vulnerable to SQLi
sql = “SELECT id FROM users WHERE username=’” + uname + “’ AND password=’” + passwd + “’”
# Execute the SQL statement
database.execute(sql)
Các trường đầu vào này dễ bị SQL Injection. Kẻ tấn công có thể sử dụng các lệnh SQL trong đầu vào theo cách làm thay đổi câu lệnh SQL do máy chủ cơ sở dữ liệu thực thi. Ví dụ: họ có thể sử dụng thủ thuật liên quan đến một trích dẫn và đặt passwdtrường thành:
password' OR 1=1
Kết quả là máy chủ cơ sở dữ liệu chạy truy vấn SQL sau:
SELECT id FROM users WHERE username='username' AND password='password' OR 1=1'
Do OR 1=1
, nên mệnh đề trả về giá trị id
đầu tiên từ bảng users
bất kể username
và password
là gì.
Người dùng đầu tiên trong cơ sở dữ liệu thường là quản trị viên. Bằng cách này, kẻ tấn công không chỉ bỏ qua xác thực mà còn giành được đặc quyền của quản trị viên. Họ cũng có thể nhận xét phần còn lại của câu lệnh SQL để kiểm soát thêm việc thực thi truy vấn SQL:
-- MySQL, MSSQL, Oracle, PostgreSQL, SQLite
' OR '1'='1' --
' OR '1'='1' /*
-- MySQL
' OR '1'='1' #
-- Access (using null characters)
' OR '1'='1' %00
' OR '1'='1' %16
Tấn công SQL Injection có ba loại: SQLi in-band ,SQLi Inferential và SQLi Inferential. Bạn có thể phân loại các kiểu SQL injection dựa trên phương pháp sử dụng để truy cập dữ liệu backend, hoặc khả năng gây hại của chúng.
SQLi in-band hay còn được gọi là SQLi cổ điển được sử dụng để khởi chạy các lỗi cơ sở dữ liệu và thu thập các kết quả từ cuộc tấn công đó. Loại tấn công này này hoạt động dựa trên hai kỹ thuật tấn công chính là Error-based và Union-based.
SQL injection inferential là loại tấn công khó khăn hơn, người tấn công không nhận được kết quả trực tiếp từ cơ sở dữ liệu. Thay vào đó, họ phải dựa vào các biểu hiện không rõ ràng của hệ thống để đoán dữ liệu được truy cập.
Ví dụ, 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 đó để thực hiện các truy vấn boolean và lấy dữ liệu từ các thông báo lỗi hoặc các kết quả trả về khác.
SQL injection out-of-band là một loại tấn công này không liên quan trực tiếp đến dữ liệu được truy cập. Người tấn công sử dụng các công cụ phần mềm để gửi các yêu cầu và nhận kết quả trả về từ cơ sở dữ liệu.
Ví dụ, 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.
Một số phương pháp ngăn chặn tấn công SQL injection bao gồm:
SQL Injection là một trong những lỗ hổng bảo mật nghiêm trọng nhất đối với các ứng dụng web. Để ngăn chặn SQL Injection, các nhà phát triển và quản trị hệ thống cần thực hiện các biện pháp bảo mật như sử dụng Prepared Statements, Parameterized Queries, kiểm tra và xử lý đầu vào, và sử dụng Firewall. Nếu không được kiểm soát tốt, SQL Injection có thể gây ra những hậu quả nghiêm trọng cho hệ thống và dữ liệu, do đó, nó đáng được quan tâm và giải quyết.
Vì vậy, đối với các nhà phát triển ứng dụng web, cần đảm bảo rằng các ứng dụng của họ được thiết kế và triển khai đầy đủ các biện pháp bảo mật để tránh SQL Injection. Đối với quản trị viên hệ thống, cần kiểm tra và giám sát hệ thống định kỳ, xác nhận rằng các cập nhật bảo mật đã được cài đặt và thực thi, và đảm bảo rằng tất cả các ứng dụng trên hệ thống đều đang chạy các phiên bản phần mềm mới nhất để tránh các lỗ hổng bảo mật đã biết đến.
Thuê Cloud VPS Cao Cấp tại BKHOST
Giảm giá cực sâu, chất lượng hàng đầu. Đăng ký ngay hôm nay: