Tải bản đầy đủ - 0 (trang)
2 TỔNG QUAN VỀ SQL INJECTION

2 TỔNG QUAN VỀ SQL INJECTION

Tải bản đầy đủ - 0trang

-



Snoofing identity (Mạo danh): Những kẻ tấn công sẽ mạo danh một email hoặc một

trang web của một tổ chức để đánh lừa người dùng.



-



Changing prices (Thay đổi giá): Một trong số những vấn đề của SQL Injection là nó

có thể thay đổi dữ liệu. Ở đây, những kẻ tấn công sẽ thay đổi giá cả một trang mua

sắm trực tuyến để có thể mua sản phẩm đó với giá rẻ hơn.



-



Tamper with database records (Xáo trộn các hồ sơ cơ sở dữ liệu): Cơ sở dữ liệu

chính sẽ hồn tồn bị hư hại; thậm chí còn có khả năng đã bị thay thế hồn tồn hoặc

thậm chí bị xóa hết dữ liệu.



-



Escalation of privileges (Leo thang đặc quyền): Một khi hệ thống bị tấn cơng, kẻ

tấn cơng sẽ tìm kiếm đặc quyền truy cập cao nhất của các thành viên quản trị để có thể

chiếm quyền truy cập vào hệ thống cũng như vào mạng nội bộ.



-



Denial-of-service on the server (Từ chối các dịch vụ từ máy chủ): Từ chối dịch vụ

từ máy chủ là một dạng tấn công mà người dùng không thể truy cập vào hệ thống.

Ngày càng nhiều yêu cầu được gửi đến máy chủ mà khơng thể sử lý nó. Điều này dẫn

đến tạm ngưng dịch vụ của máy chủ.



-



Complete disclosure of all the data on the system (Lộ tất cả thông tin dữ liệu của

hệ thống): Một khi một hệ thống bị tấn công các dữ liệu quan trọng và bí mật như: số

thẻ tín dụng, chi tiết nhân viên về hồ sơ và tài chính,…v.v sẽ bị tiết lộ.



-



Destruction of data (Phá hủy dữ liệu): Những kẻ tấn cơng sau khi chiếm hồn toàn

quyền hệ thống sẽ phá hủy hoàn toàn dữ liệu, kết quả làm tổn thất rất lớn cho công ty.



-



Voiding system's critical transaction (Tránh các giao dịch quan trọng của hệ

thống): Những kẻ tấn cơng có thể vận hành hệ thống tránh tất cả các giao dịch.



-



Modifying the records (Thay đổi hồ sơ): Kẻ tấn cơng có thể sửa đổi các dữ liệu

trong cơ sở dữ liệu của công ty, gây ra trở ngại lớn cho hệ thống quản lý cơ sở dữ liệu

công ty



2.2.3 Các dạng lỗi thường gặp

- Khơng kiểm tra ký tự thốt truy vấn



8



Đây là dạng lỗi SQL injection xảy ra khi thiếu đoạn mã kiểm tra dữ liệu đầu vào trong câu

truy vấn SQL. Kết quả là người dùng cuối có thể thực hiện một số truy vấn không mong

muốn đối với cơ sở dữ liệu của ứng dụng. Dòng mã sau sẽ minh họa lỗi này:

statement = "SELECT * FROM users WHERE name = '" + userName + "';"

Câu lệnh này được thiết kế để trả về các bản ghi tên người dùng cụ thể từ bảng những người

dùng. Tuy nhiên, nếu biến "userName" được nhập chính xác theo một cách nào đó bởi người

dùng ác ý, nó có thể trở thành một câu truy vấn SQL với mục đích khác hẳn so với mong

muốn của tác giả đoạn mã trên. Ví dụ, ta nhập vào giá trị của biến userName như sau:

a' or 't'='t

Khiến câu truy vấn có thể được hiểu như sau:

SELECT * FROM users WHERE name = 'a' or 't'='t';

Nếu đoạn mã trên được sử dụng trong một thủ tục xác thực thì ví dụ trên có thể được sử dụng

để bắt buộc lựa chọn một tên người dùng hợp lệ bởi 't'='t' luôn đúng. Trong khi hầu hết các

SQL server cho phép thực hiện nhiều truy vấn cùng lúc chỉ với một lần gọi, tuy nhiên một số

SQL API như mysql_query của php lại khơng cho phép điều đó vì lý do bảo mật. Điều này

chỉ ngăn cản tin tặc tấn công bằng cách sử dụng các câu lệnh riêng rẽ mà không ngăn cản tin

tặc thay đổi các từ trong cú pháp truy vấn. Các giá trị của biến "userName" trong câu truy

vấn dưới đây sẽ gây ra việc xoá những người dùng từ bảng người dùng cũng tương tự như

việc xóa tất cả các dữ liệu được từ bảng dữ liệu (về bản chất là tiết lộ các thơng tin của mọi

người dùng), ví dụ này minh họa bằng một API cho phép thực hiện nhiều truy vấn cùng lúc:

a';DROP TABLE users; SELECT * FROM data WHERE 't' = 't

Điều này đưa tới cú pháp cuối cùng của câu truy vấn trên như sau:

SELECT * FROM users WHERE name = 'a';DROP TABLE users; SELECT * FROM

data WHERE 't' = 't';

- Xử lý không đúng kiểu

Lỗi SQL injection dạng này thường xảy ra do lập trình viên hay người dùng định

nghĩa đầu vào dữ liệu không rõ ràng hoặc thiếu bước kiểm tra và lọc kiểu dữ liệu đầu vào.

Điều này có thể xảy ra khi một trường số được sử dụng trong truy vấn SQL nhưng lập trình

viên lại thiếu bước kiểm tra dữ liệu đầu vào để xác minh kiểu của dữ liệu mà người dùng

nhập vào có phải là số hay khơng. Ví dụ như sau:

9



statement:= "SELECT * FROM data WHERE id = " + a_variable + ";"

Ta có thể nhận thấy một cách rõ ràng ý định của tác giả đoạn mã trên là nhập vào một

số tương ứng với trường id - trường số. Tuy nhiên, người dùng cuối, thay vì nhập vào một số,

họ có thể nhập vào một chuỗi ký tự, và do vậy có thể trở thành một câu truy vấn SQL hồn

chỉnh mới mà bỏ qua ký tự thốt. Ví dụ, ta thiết lập giá trị của biến a_variable là:

1;DROP TABLE users

khi đó, nó sẽ thực hiện thao tác xóa người dùng có id tương ứng khỏi cơ sở dữ liệu, vì câu

truy vấn hồn chỉnh đã được hiểu là:

SELECT * FROM data WHERE id=1;DROP TABLE users;

- Lỗi bảo mật bên trong máy chủ cơ sở dữ liệu

Đôi khi lỗ hổng có thể tồn tại chính trong phần mềm máy chủ cơ sở dữ liệu, như là

trường hợp hàm mysql_real_escape_string() của các máy chủ MySQL. Điều này sẽ cho phép

kẻ tấn cơng có thể thực hiện một cuộc tấn cơng SQL injection thành công dựa trên những ký

tự Unicode không thông thường ngay cả khi đầu nhập vào đang được thốt.Chữ đậm



CHƯƠNG 3: CÁC DẠNG TẤN CƠNG VÀ BIỆN PHÁP NGĂN CHẶN SQL

INJECTION

3.1 CÁC DẠNG TẤN CÔNG SQL INJECTION

3.1.1 System Stored Procedure (Hệ thống thủ tục lưu trữ)

Những kẻ tấn công cố gắng khai thác các thủ tục lưu trữ dữ liệu của hệ thống. Sau đó xác

định loại cơ sở dữ liệu và sử dụng kiến thức để xác định các thủ tục lưu trữ tồn tại. Tấn công

vào thủ tục lưu trữ kẻ tấn cơng có thể tạo ra lỗi tràn bộ đệm, leo thang đặc quyền hoặc chiếm

quyền truy cập vào hệ điều hành.

3.1.2 Illegal/Logically Incorrect Query (Lệnh truy vấn bất hợp pháp hay không đúng

logic)

Trong loại tấn công này, những kẻ tấn công sẽ cố gắng thu thập đầy đủ các thông tin về

cấu trúc back-end của cơ sở dữ liệu một trang web. Những kẻ tấn công sẽ gửi một câu lệnh

truy vấn SQL không hợp lệ hoặc không đúng logic đến cơ sở dữ liệu của trang web, một số

10



máy chủ sẽ trả về những thông báo lỗi mặc định và những kẻ tấn cơng có thể lợi dụng các

điểm yếu này. Từ việc khai thác các thông báo lỗi mặc định những kẻ tấn cơng có thể khai

thác được số bảng, số cột,.. của cơ sở dữ liệu.

Có nhiều cách để gửi một lệnh truy vấn không hợp lệ hay bất hợp pháp như: thêm kí tự

(‘) vào cuối câu lệnh truy vấn, sử dụng toán tử AND để thực hiện một câu lệnh sai logic, sử

dụng order by hay mệnh đề having... để máy chủ trả về một thông báo lỗi.

3.1.3 Tautology (Tấn công mệnh đề luôn đúng)

Các cuộc tấn công này hoạt động bằng cách thêm vào mệnh đề WHERE của câu lệnh

truy vấn một tuyên bố luôn đúng. 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.

Thông thường để cho phép người dùng truy cập vào các trang web được bảo mật, hệ

thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin về tên đăng

nhập và mật khẩu. Sau khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng

nhập và mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối thực hiện tiếp.

Xét 1 đoạn code php sau:

$uname=$_POST['uname'];

$passwrd=$_POST['passwrd'];

$query="select



username,pass



from



users



where



username='$uname'



and



password='$passwrd'";

$result=mysql_query($query);

Thử tài khoản đăng nhập và mật khẩu bằng: 'or ''=', thì cầu truy vấn sẽ thành 1 câu như sau:

select username,pass from users where username='' or ''='' and password='' or ''=''

Do mệnh đề luôn đúng nên dễ dàng đăng nhập tài khoản.



11



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

2 TỔNG QUAN VỀ SQL INJECTION

Tải bản đầy đủ ngay(0 tr)

×