Tải bản đầy đủ (.pptx) (17 trang)

TÌM HIỂU VỀ SQL INJECTION

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (432.37 KB, 17 trang )

TÌM HIỂU VỀ SQL
INJECTION

Lê Văn Thông
Đinh Thị Tố Nga


Mục lục
1.
2.
3.
4.
5.

SQL Injection là gì?
Các dạng tấn công Sql Injection
Kỹ thuật tấn công Sql Injection
Phương pháp phòng chống SQL Injection
Demo


1. SQL Injection là gì?
1. 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ì?

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...


2. 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


2.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ệ.



2.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…


2.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



2.4. Dạng tấn công sử dụng storedprocedures
 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.


3. 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


3.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.


3.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.



3.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.


3.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.


3.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.


4. 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


5. Demo



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×