Tổng quan SQL Injection

Một phần của tài liệu Nghiên cứu vài dạng lỗ hổng bảo mật, công cụ phát hiện chúng và ứng dụng để kiểm thử an ninh trên trang web truongnha com (Trang 21 - 26)

CHƯƠNG 2 MỘT SỐ NGUY CƠ AN NINH THƯỜNG GẶP

2.3. Tổng quan SQL Injection

SQL injection là một kỹ thuật đƣợc sử dụng cho việc muốn tìm ra những điểm yếu kém của ứng dụng về cơ sở dữ liệu. Nó thường được sử dụng trên các ứng dụng Web, khi mà yêu cầu nhập thông tin từ người dùng để xử lý. Kỹ thuật này thường thấy trong các trường hợp yêu cầu đăng nhập vào các ứng dụng hay bất kỳ một khung đăng thông tin từ người dùng mà ứng dụng sử dụng câu truy vấn. SQL injection có thể xuất hiên hiện trên bất kỳ ứng dụng web có sử dụng các công nghệ nhƣ: ASP, ASP.NET và PHP với SQL. Ví dụ như khi người sử dụng nhập thông tin vào trang đăng nhập và yêu cầu được gửi đi những thông tin về người dùng và mật khẩu sẽ được mang đi để so sánh với một tập hợp các người dùng hợp pháp trong cơ sở dữ liệu [9].

SQL Injection là một trong những kiểu tấn công phổ biến nhất hiện giờ ở tầng ứng dụng đƣợc sử dụng trên mạng. Mặc dù dạng lỗ hổng này có một vài cách dễ dàng để bảo vệ chống lại SQL injection, nhƣng một số lớn các ứng dụng web vẫn tồn lại những lỗ hổng dạng này.

2.3.2. Các kỹ thuật tấn công SQL Injection

Có 4 loại tấn công thuộc SQL Injection: Đăng nhập không cần mật khẩu, sử dụng câu lệnh SELECT, sử dụng các Stored-procedures, sử dụng câu lệnh INSERT [8].

a) Đăng nhập mà không cần mật khẩu

Dựa vào sơ hở của ứng dụng, kẻ tấn công sẽ sử dụng chức năng đăng nhập vào hệ thống, nhập những dữ liệu có khả năng thực thi câu lệnh SQL một cách bất hợp pháp, từ đó kẻ tấn công không cần có mật khẩu vẫn có thể đăng nhập vào hệ thống và thực thi các chức năng của hệ thống đó, điều này rất nguy hiểm, có thể dẫn tới sập hệ thống.

Đây là dạng tấn công cơ bản của SQL Injection.

Ví dụ, một trang web của ngân hàng có một trang đăng nhập với mã nguồn nhƣ sau:

<form action="/cgi-bin/login" method=post>

Username: <input type=text name=username>

Nhập vào đoạn ' OR ' ' = ' cho cả 2 ô username và password, lúc đó câu lệnh truy vấnSQL sẽ trở thành:

SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''='' and USR_PASSWORD= '' OR ''=''

Từ đó kẻ tấn công có thể đăng nhập thành công mà không cần biết mật khẩu, và có thể thực thi các ứng dụng của trang web nhƣ là: chuyển khoản, ăn cắp thông tin....Gây ra rất nhiều nguy hiểm cho công ty và người dùng. Kẻ tấn công cũng có thể sử dụng một vài mẫu tấn công như trong bảng Bảng 2.1 dưới đây để có được truy cập tương tự:

Bảng 2.1: Các mẫu đầu vào

Mẫu 1 ' or 1=1--

Mẫu 2 " or 1=1-- Mẫu 3 ') or ('a'='a Mẫu 4 ' or 'a'='a Mẫu 5 " or "a"="a

b) Sử dụng câu lệnh SELECT

Trong những trang web về tin tức sẽ có một trang nhận ID của tin cần thiết để hiển thị rồi sau đó truy vấn nội dung của tin có ID này. Dạng tấn công này phức tạp hơn và thường sử dụng trên các trang web dạng tin tức này. Để 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ụ:

<%

Dim vNewsID, objRS, strSQL vNewsID = Request("ID")

strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" & vNewsID Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open strSQL, "DSN=..."

Set objRS = Nothing

%>

Đoạn mã này khi nhận đƣợc ID của tin tức sẽ hiển thị nội dung của tin có ID trùng với ID đã chỉ định và hầu nhƣ không thấy có lỗi. Tuy nhiên, đoạn mã này để lộ sơ hở cho một lỗi SQL injection khác. Kẻ tấn công có thể thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác, và từ đó, khởi đầu cho một cuộc tấn công bất hợp pháp, ví dụ nhƣ:

OR 1=1

Điều đó có nghĩa, đường liên kết sẽ trở thành: http://..../?ID=0 or 1=1. Điều này luôn luôn đúng.

c) Sử dụng Stored-procedure

Dạng tấn công này rất nguy hiểm nếu ứng dụng đƣợc thực thi với quyền quản trị hệ thống. Ví dụ, nếu ta thay đoạn mã tiêm vào dạng: ';EXEC xp_cmdshell „cmd.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. Nếu cài SQL Server ở chế độ mặc định thì SQL Server chạy trên nền SYSTEM, tương đương mức truy cập ở Windows. Có thể dùng master..xp_cmdshell để thi hành lệnh từ xa:

; exec master..xp_cmdshell 'ping 10.10.1.2'--

Thử dùng dấu nháy đôi (") nếu dấu nháy đơn (') không làm việc.

Dưới đây là một số extended stored procedure mà kẻ tấn công thường hay sử dụng để thực thi những câu lệnh xem nội dung thông tin trong máy nạn nhân:

Xp_availablemedia: Hiển thị những ổ đĩa hiện hành trên máy.

Xp_dirtree: Hiển thị tất cả các thƣ mục kể cả thƣ mục con.

Xp_loginconfig: Lấy thông tin về chế độ bảo mật trên server.

Xp_makecab: Cho phép người sử dụng tạo các tập tin lưu trữ trên Server (hay bất cứtập tin nào mà server có thể truy xuất.

Xp_ntsec_enumdomain: Liệt kê những domain mà server có thể truy vấn.

Xp_terminate_process: Chấm dứt một tiến trình với tham số PID của nó.

d) 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 để

<%

strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _

& strValueTwo & " ', ' " & strValueThree & " ') "

Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..."

Set objRS = Nothing

%>

Thì chắc chắn sẽ bị lỗi SQL injection, bởi vì 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.3.3. Những ảnh hưởng gây ra của SQL Injection

Một khi kẻ tấn công đã nhận ra hệ thống có điểm yếu và có thể tiêm mã độc SQL Injection vào, chúng sẽ đưa vào các câu lệnh hoặc truy vấn SQL thông qua một trường nhập đầu vào nào đó. Điều đó tương đương với việc giao cơ sở dữ liệu của bạn cho kẻ

tấn công và cho phép kẻ tấn công thực thi bất kỳ một lệnh SQL nào đó bảo gồm cả câu lệnh “DROP TABLE” để xóa hẳn cơ sở dữ liệu của bạn đi.

Kẻ tấn công có lẽ thực thi những trạng thái SQL một cách tùy ý trên các hệ thống có khả năng tiêm nhiễm đó. Điều này gây nguy cho toàn bộ cơ sở dữ liệu của bạn hoặc làm phơi bày ra những thông tin nhạy cảm. Phụ thuộc vào back-end của cơ sở dữ liệu, khả năng tiêm nhiễm SQL Injection dẫn đến nhiều mức độ của việc truy cập dữ liệu/hệ thống của kẻ tấn công. Nó có khả năng thực thi những truy vấn tồn tại, UNION các dữ liệu một các tùy ý, sử dụng các lựa chọn con hoặc thêm vào các truy vấn theo sau.

Trong một số trường hợp, nó có khả năng đọc hoặc viết ra các tệp, hoặc thực thi các lệnh shell trên các hệ thống thao tác cơ bản. Một số các SQL servers giống nhƣ Microsoft SQL server chứa đựng những thủ tục lưu trữ và mở rộng. Nếu kẻ tấn công có thể đạt đƣợc truy cập tới các thủ tục đó, nó có thể gây ra thảm họa. Không may mắn những ảnh hưởng của SQL injection là chỉ được phát hiện khi những tên trộm được phát hiện ra.

Ví dụ về một tấn công SQLInjection:

Dưới đây là một khung đăng nhập có 2 trường Username và password:

<form method="post" action="http://testasp.vulnweb.com/login.asp">

<input name="tfUName" type="text" id="tfUName">

<input name="tfUPass" type="password" id="tfUPass">

</form>

Trong tệp “login.asp” sẽ chứa một truy vấn vào cơ sở dữ liệu nhƣ sau:

SELECT id FROM logins

WHERE username = '$username' AND password = '$password’

Kẻ tấn công sẽ đăng nhập với một tên và password nhƣ sau:

Username: myname

Password: anything' OR 'x'='x

Từ đó kẻ tấn công có thể đăng nhập như một người sử dụng hợp pháp và thao tác trên hệ thống với ý đồ xấu gây thiệt hại cho hệ thống một cách khó lường được.

2.3.4. Các phương pháp phòng chống SQL Injection phổ biến

Các loại tấn công SQL Injection đều dựa trên những điểm yếu về cơ sở dữ liệu.

Thông thường các nhà lập trình thường quên đi việc ngăn chặn lỗi bảo mật khi lập trình dẫn đến những sơ hở này. Dưới đây là một vài phương pháp có thể giúp ngăn chặn đƣợc tấn công SQL Injection nhƣ sau:

 Kiểm tra tất cả các dữ liệu đầu vào trên các form: Loại bỏ các ký tự lạ, đối với các ký tự numeric nên chuyển chúng sang số nguyên trước khi thực hiện các câu lệnh truy vấn hoặc dùng thuật toán để mã hóa dữ liệu.

 Quản lý chặt chẽ SQL Server: kiểm soát các tài khoản có trong ứng dụng, phân quyền thấp cho các ứng dụng.

 Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu.

Tóm lại, chương 2 đã miêu tả được về 3 loại tấn công nguy hiểm và phổ biến nhất hiện nay.

Ngoài những loại lỗ hổng đó, các trang Web còn tồn tại rất nhiều những dạng lỗ hổng khác như: lộ thông tin cấu hình máy chủ, lộ trường thông tin mật khẩu hay cookies, lỗ hổng tấn công liên trang giả mạo. Những lỗ hổng này thường ít được để ý đến nhưng chúng lại cung cấp những thông tin hữu ích cho kẻ tấn công để nhằm thực thi tấn công vào trang Web, chúng sẽ được miêu tả chi tiết hơn trong các chương sau.

Một phần của tài liệu Nghiên cứu vài dạng lỗ hổng bảo mật, công cụ phát hiện chúng và ứng dụng để kiểm thử an ninh trên trang web truongnha com (Trang 21 - 26)

Tải bản đầy đủ (PDF)

(66 trang)