Thế nào là Sql Injection, tấn công Sql Injection là gì, các phương pháp tấn công Sql Injection phổ biến, các công cụ trong tấn công website bằng Sql Injection. Cách phát hiện trang web bị lỗi sql injection và cách khai thác.
Trang 1TÌM HIỂU VỀ SQL
INJECTION
Lê Văn Thông Đinh Thị Tố Nga
Trang 2Mục lục
1 SQL Injection là gì?
2 Các dạng tấn công Sql Injection
3 Kỹ thuật tấn công Sql Injection
4 Phương pháp phòng chống SQL Injection
5 Demo
Trang 31 SQL Injection là gì?
SQL Injection là một kỹ thuật 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 trong 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 trả
về để inject (tiêm vào) và thi hành các câu lệnh SQL bất hợp pháp.
1 SQL Injection là gì?
Trang 41 SQL Injection là gì?
2 Một số đặc trưng của SQL Injection
SQL injection có thể cho phép những kẻ tấn công thực hiện các thao tác, delete, insert, update, v.v trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy.
SQL injection thường được biết đến như là một vật trung gian tấn công trên các ứng dụng web có dữ liệu được quản lý bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL, Oracle, DB2, Sysbase
Trang 52 Các dạng tấn công Sql Injection
1 Dạng tấn công vượt qua kiểm tra lúc
đăng nhập
2 Dạng tấn công sử dụng câu lệnh SELECT
3 Dạng tấn công sử dụng câu lệnh INSERT
4 Dạng tấn công sử dụng stored-procedures
Trang 62.1 Dạng tấn công vượt qua
kiểm tra lúc đăng nhập
Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờ vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web.
SELECT * FROM user WHERE username =‘$username‘ and password= ‘$password‘
Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của user và đoạn mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ.
Trang 72.2 Dạng tấn công sử dụng câu lệnh SELECT
Dạng tấn công này phức tạp hơn Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu khởi đầu cho việc tấn công
Ví dụ trong các trang tin tức, mỗi bài viết sẽ có một ID Thông thường sẽ
có 1 trang nhận ID của bài viết cần hiện thị rồi sau đó truy vấn nội dung của bài viết đấy
Câu SQL sẽ có dạng: Select * from BaiViet Where IDBaiViet=‘’;
Nếu chúng ta tấn công vào điểm yếu trên sẽ có thể khai thác được thông tin như là chèn vào các tham số điều kiện, dùng từ khoá Union để thực hện các lệnh Select khác…
Trang 82.3 Dạng tấn công sử dụng câu lệnh INSERT
Thông thường các ứng dụng web cho phép người dùng đăng kí một tài khoản
để tham gia Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng có thể xem và hiệu chỉnh thông tin của mình SQL injection có thể được dùng khi hệ thống không kiểm tra tính hợp lệ của thông tin nhập vào
Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng:
INSERT INTO TableName VALUES(‘Value One’, ‘Value Two’, ‘Value Three’)
Nếu ta nhập vào trường thứ nhất ví dụ như:
‘ + (SELECT TOP 1 FieldName FROM TableName) + ‘
Lúc này câu truy vấn sẽ là:
INSERT INTO TableName VALUES(‘ ‘ + (SELECT TOP 1 FieldName FROM
TableName) + ‘ ‘, ‘abc’, ‘def’)
Khi đó, lúc thực hiện lệnh xem thông tin, xem như bạn đã yêu cầu thực hiện thêm một lệnh nữa đó là:
SELECT TOP 1 FieldName FROM TableName
Trang 92.4 Dạng tấn công sử dụng
stored-procedures
Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng dụng được thực thi với quyền quản trị hệ thống ‘sa’
Ví dụ, nếu ta thay đoạn mã tiêm vào dạng: ‘; EXEC
xp_cmdshell ‘cmdd.exe dir C: ‘
Lúc này hệ thống sẽ thực hiện lệnh liệt kê thư mục trên ổ đĩa C:\ cài đặt server Việc phá hoại kiểu nào tuỳ thuộc vào câu lệnh đằng sau cmd.exe.
Trang 103 Kỹ thuật tấn công SQL Injection
1 Tìm kiếm mục tiêu
2 Phát hiện
3 Xác định số lượng cột trong mệnh đề select
4 Xác định thông tin
Trang 113.1 Tìm kiếm mục tiêu
• Sử dụng các công cụ tìm kiếm để tìm kiếm các mục tiêu phù hợp.
Trang 123.2 Phát hiện
Để phát hiện một ứng dụng web có dính lỗi SQL Injection hay không, ta thêm vào câu truy vấn các meta character trong các hệ quản trị cơ sở dữ liệu, chẳng hạn như dấu nháy đơn, dấu nháy kép, dấu chấm phẩy và các ký
tự comment ( , ##, /**/)… và chờ xem ứng dụng web sẽ xứ lý câu truy vấn
đó như thế nào
Trang 133.3 Xác định số lượng cột trong mệnh đề
select
Union là từ khóa dùng để gộp kết quả của nhiều mệnh đề select do đó
trong mỗi mệnh đề select đòi hỏi số lượng các trường đều phải bằng nhau
và đều bằng số lượng các trường được select trong mệnh đề select ban đầu Chúng ta sẽ sử dụng điều này để xác định số lượng cột của cở sở dữ liệu
Cụ thể, chúng ta sẽ thực hiện thử dần bằng cách tăng dần số lượng cột
trong mệnh đề select sau union (bắt đầu từ 1) Khi nào không thấy thông báo lỗi xuất hiện thì đó chính là số lượng cột cần tìm
Một cách nhanh hơn là sử dụng 'order by' Từ khóa 'order by' được dùng
để sắp xếp thứ tự cho các bản ghi thu được trong mệnh để select Sau
order by có thể là tên một cột để xác định rằng kết quả thu về sẽ được sắp xếp theo giá trị của cột đó (tăng dần hoặc giảm dần) Sau 'order by' cũng có thể là số thứ tự vị trí của cột đó Nếu giá trị sau order lớn hơn số cột được select thì chúng ta sẽ thấy thông báo lỗi
Trang 143.4 Xác định thông tin
Để biết được tên bảng, tên cột, ta sử dụng đối tượng information_schema Đối tượng này cung cấp các
thông tin về tables, columns, views và procedures… của cơ sở dữ liệu.
Trang 153.5 Xử lý thông tin thu được
Có thể làm bất kỳ việc gì tác động đến CSDL và trang web dựa vào độ quan trọng của thông tin thu thập được.
Trang 164 Phương pháp phòng tránh
Tối ưu hoá mã nguồn
Các thông báo lỗi phải che dấu được lỗi chính xác của hệ thống
Quản lý chặt chẽ dữ liệu đầu vào
Rewrite URL
Hạn chế cấp quyền ở mức cao cho người sử dụng
Trang 175 Demo