SQL injection là gì và cách phòng chống-Phần 1

sql injection va cach chongHôm nay mình sẽ giới thiệu cho mọi người về SQL injection, chúng ta sẽ xem nó là gì và tại sao mọi người lại phải chú ý đến nó.
1. SQL injection là gì?
SQL Injection là một trong những kiểu hack web đang dần trở nên phổ biến hiện nay. Bằng cách inject các mã SQL query/command vào input form trước khi chuyển cho ứng dụng web xử lí, bạn có thể login mà không cần username và password, remote execution, dump data và lấy root của SQL server. Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như Internet Explorer, Chrome, Firefox,...
2. Những nơi thường bị tấn công
Những nơi thường bị tấn công đó là các form đăng nhập, tìm kiếm, liên hệ,... Những form này là nơi tiếp nhận dữ liệu và sẽ được đưa vào trong để xử lí. Giả sử bây giờ chúng ta thử đăng nhập với 2 giá trị là username và password:
username: hack day' or 1=1--
password: hack day' or 1=1--
Và các giá trị này sẽ được coi như giá trị đầu vào của form login này. Nhưng tại sao những giá trị này lại có thể giúp chúng ta đăng nhập mà không cần biết chính xác mật khẩu là gì? Vậy chúng ta hãy cùng xem tại sao lại như thế.
Bình thường chúng ta sẽ viết câu query sql như sau:
SELECT COUNT(*) FROM tblUsers WHERE userName='+txtUserName+' AND password='+txtPassword+';
Trên đây là một ví dụ mình minh họa thôi :). Tiếp theo khi bạn nhập chuỗi trên vào thì nó sẽ trở thành:
 SELECT COUNT(*) FROM tblUsers WHERE userName='hack day'or 1=1--' AND password='hack dat' 1=1--';
Bạn có thể chạy và thấy 2 điều:
a. khi nó xác nhận giá trị cho userName thì chuỗi "hack day" là một chuỗi không chính xác nhưng 1=1 lại là luôn đúng-> câu lệnh có thể tiếp tục chạy
b. Bạn có thể để ý hai dấu "--" chính là chuỗi comment trong sql và khi gặp 2 dấu này thì đoạn đằng sau coi như là comment và câu lệnh sẽ chạy mà không quan tâm đến chuỗi đằng sau.
Và lúc này bạn đã có thể đăng nhập một cách ngon lành mà không gặp khó khăn gì.
3. Thực thi SQL injection từ xa
Nếu cài đặt với chế độ mặc định mà không có điều chỉnh gì, MS SQL Server sẽ chạy ở mức SYSTEM, tương đương với mức truy cập Administrator trên Windows. Có thể dùng store procedure xp_cmdshell trong CSDL master để thi hành lệnh từ xa:
'; exec master..xp_cmdshell 'ping 10.10.1.2'--
Hãy thử dùng dấu nháy đôi (") nếu dấu nháy đơn (') không làm việc.
Dấu chấm phẩy (sẽ kết thúc dòng SQL query hiện tại và cho phép thi hành một SQL command mới. Để kiểm tra xem lệnh trên có được thi hành hay không, có thể listen các ICMP packet từ 10.10.1.2 bằng tcpdump như sau:
#tcpdump icmp
Nếu nhận được ping request từ 10.10.1.2 nghĩa là lệnh đã được thi hành.
Phần 2
Phần 3

2 nhận xét:

cảm ơn bạn...........tài liệu hay lắm...có thể kết bạn để trao đổi kiến thức không nek`
gmail của mình nek : truongtk152@gmail.com

lúc 18:10 21 tháng 11, 2012 comment-delete

@Nguyễn An Phi Trường
Mình rất thích giao lưu và trao đổi kiến thức với mọi người. Đây là email của mình: timeislifesgift@gmail.com. Rất mong được giao lưu với bạn ^_^

lúc 16:57 6 tháng 12, 2012 comment-delete

Đăng nhận xét