Tải bản đầy đủ - 0 (trang)
CHƯƠNG 3: CÁC DẠNG TẤN CÔNG VÀ BIỆN PHÁP NGĂN CHẶN SQL INJECTION

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

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

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



3.1.4 Union Query

Cuộc tấn công dạng này được thực hiện bằng cách thêm vào một tham số hình thức có dạng:

‘UNION SELECT

Lúc này, ngồi câu truy vấn đầu khơng thành cơng, chương trình sẽ thực hiện thêm lệnh

tiếp theo sau từ khóa UNION.

Những kẻ tấn cơng có thể xóa tồn bộ cơ sở dữ liệu bằng cách chèn vào các đoạn lệnh

nguy hiểm như DROP TABLE. Ví dụ như :’DROP TABLE_AUTHORS-’

Để biết được ứng dụng web bị lỗi dạng này hãy nhập vào chuỗi (*) như sau:

‘UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE’’=’ (*)

Nếu hệ thống báo lỗi về cú pháp dạng : Invalid object name” OtherTable”; ta có thể biết

chắc là hệ thống đã thực hiện câu SELECT sau từ khóa UNION, vì như vậy mới có thể trả về

lỗi mà ta đã cố tình tạo ra trong câu lệnh SELECT.



Trong SQL Server, có hai đối tượng là sysobjects và syscolumns cho phép liệt kê tất các

tên bảng và cột có trong hệ thống. Để có thể biết được tên của các bảng dữ liệu mà thực hiện

các thao tác phá hoại khi ứng dụng web bị lỗi SQL injection. Ta chỉ cần chỉnh lại câu lệnh

SELECT:

‘UNION SELECT name FROM sysobjects WHERE xtype=’U’ là có thể liệt kê được tất cả

các bảng dữ liệu.

3.1.5 Blind SQL Injection

Lỗi SQL injection dạng này là dạng lỗi tồn tại ngay trong ứng dụng web nhưng hậu

quả của chúng lại không hiển thị trực quan cho những kẻ tấn cơng. Nó có thể gây ra sự sai

khác khi hiển thị nội dung của một trang chứa lỗi bảo mật này, hậu quả của sự tấn cơng SQL

injection dạng này khiến cho lập trình viên hay người dùng phải mất rất nhiều thời gian để

phục hồi chính xác từng bit dữ liệu. Những kẻ tấn cơng còn có thể sử dụng một số cơng cụ để

dò tìm lỗi dạng này và tấn cơng với những thông tin đã được thiết lập sẵn.

12



Thay đổi giá trị điều kiện truy vấn

Dạng lỗi này khiến cho kẻ tấn cơng có thể thay đổi giá trị điều kiện trong câu truy vấn,

làm sai lệch sự hiển thị của một ứng dụng chứa lỗi này.

SELECT booktitle from booklist where bookId = 'OOk14cd' AND 1=1;

Sẽ hiển thị một trang một cách bình thường, trong khi:

SELECT booktitle from booklist where bookId = 'OOk14cd' AND 1=2;

sẽ hiển thị một nội dung khác, hoặc khơng hiển thị gì nếu ứng dụng web có chứa lỗi SQL

injection dạng này. Lỗ hổng dạng này còn cho phép tin tặc không chỉ gây ảnh hưởng tới bảng

hay dữ liệu hiện tại mà còn ảnh hưởng tới những dữ liệu hay bảng khác phụ thuộc vào nội

dung của dữ liệu hay bảng hiện tại.

Điều kiện lỗi

Lỗi SQL injection dạng này dẫn tới việc buộc cơ sở dữ liệu chỉ được phép đánh giá khi mà

giá trị của câu lệnh WHERE là đúng. Ví dụ:

SELECT 1/0 from users where username='Ralph';

Phép chia cho 0 chỉ được đánh giá là lỗi khi mà người dùng có tên "Ralph" tồn tại trong cơ

sở dữ liệu.

Thời gian trễ

Lỗi SQL injection dạng này tồn tại khi thời gian xử lý của một hay nhiều truy vấn SQL

phụ thuộc vào dữ liệu logic được nhập vào hoặc quá trình xử lý truy vấn của SQL engine cần

nhiều thời gian. Tin tặc có thể sử dụng lỗi SQL injection dạng này để xác định thời gian

chính xác mà trang cần tải khi giá trị nhập vào là đúng.

3.2 DEMO TẤN CƠNG SQL INJECTION

3.2.1 Các cơng cụ cần thiết

Giới thiệu cấu trúc cơ sở dữ liệu:



13



Hình 3.1 Cấu trúc một cơ sở dữ liệu đơn giản

-Cơ sở dữ liệu ó cấu trúc hình cây với các thành phần:





Database



: Ví dụ "iot15h", "mysql" chứa các bảng dữ liệu(tables).







Table



: Ví dụ "dht11" , "func", "columns_priv" chứa hàng và cột dữ liệu.







Columns



: Ví dụ "TEMP"," HUM" các cột dữ liệu.



- CSDL có nhiệm vụ lưu trữ và trích xuất dữ liệu phục vụ cho việc truy vấn lên server.

- Tải Github https://github.com/sqlmapproject/sqlmap phục vụ cho việc tấn công.



14



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

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

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

×