Ngày nay, khi Internet được phổ biến rộng rãi ,các tổ chức đều có nhu cầu giới thiệu thông tin của mình trên xa lộ thông tin cũng như thực hiện các phiên giao dịch trực tuyến. Vấn đề nảy sinh là vi phạm ứng dụng của các ứng dụng web ngày càng mở rộng thì khả năng xuất hiện lỗi và bị tấn công càng cao, trở thành đối tượng cho nhiều người tấn công với các mục đích khác nhau. Đôi khi cũng chỉ đơn giản là để thử tài hoặc đùa bởn với người khác. Cùng với sự phát triển không ngừng của Internet và các dịch vụ trên Internet, số lượng dịch vụ tấn công trên Internet cũng tăng theo cấp số nhân. Trong khi các phương tiện thông tin đại chúng ngày càng nhắc nhiều đến những khả năng truy cập thông tin của Internet, thì các tài liệu chuyên môn bắt đầu đề cập đến nhiều vấn đề bảo đảm và an toàn dữ liệu cho các máy tính kết nối vào mạng Internet.
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CƠNG NGHỆ THƠNG TIN Tên mơn học: An tồn bảo mật hệ thống thơng tin Đề tài: Tìm hiểu dạng công SQL Injection Xây dựng demo kịch công SQL Injection cho phép vượt qua khâu đăng nhập thêm, sửa, xóa liệu Nhóm học phần: 07 Nhóm tập lớn: 05 Danh sách nhóm: Bạch Hồng Đại Mã SV: B15DCCN093 Ngô Văn Thái Mã SV: B15DCCN486 Tạ Khắc Tùng Mã SV: B15DCCN629 Trần Văn Vinh Mã SV: B15DCCN650 MỞ ĐẦU Mục lục Mở đầu……………………………………………………………………………3 1.SQL ? 1.1.Dạng công vượt qua kiểm tra lúc đăng nhập………………………….… 1.2.Dạng công sử dụng câu lệnh SELECT……………………………………5 1.3 Dạng công sử dụng câu lệnh INSERT……………………………………6 1.4 Dạng công procedures…………………………………….6 sử dụng stored- 2.Các kiểu công phổ thông…………… ……………………… 2.1 Viết lại đường dẫn………………………………………………………………… 2.2 Lọc kĩ người dùng nhập………………………………………………… 3.Xây dựng demo kịch công SQL Injection cho phép vượt qua khâu đăng nhập thêm, sửa, xóa liệu……………….9 3.1 Mục tiêu thử nghiệm…………………………………………………………9 3.2.Chiến lược công SQL Injection………………………… 10 3.3.Các bước công……………………………………………… 10 4.Minh họa kết cơng hình ảnh……………… …… 12 Tài liệu tham khảo……………………………………………………18 Mở đầu Ngày nay, Internet phổ biến rộng rãi ,các tổ chức có nhu cầu giới thiệu thơng tin xa lộ thông tin thực phiên giao dịch trực tuyến Vấn đề nảy sinh vi phạm ứng dụng ứng dụng web ngày mở rộng khả xuất lỗi bị cơng cao, trở thành đối tượng cho nhiều người cơng với mục đích khác Đơi đơn giản để thử tài đùa bởn với người khác Cùng với phát triển không ngừng Internet dịch vụ Internet, số lượng dịch vụ công Internet tăng theo cấp số nhân Trong phương tiện thông tin đại chúng ngày nhắc nhiều đến khả truy cập thơng tin Internet, tài liệu chun môn bắt đầu đề cập đến nhiều vấn đề bảo đảm an tồn liệu cho máy tính kết nối vào mạng Internet Vì vấn đề bảo đảm an tồn liệu cho máy tính kết nối vào mạng Internet cần thiết nhằm mục đích bảo vệ liệu, bảo vệ thơng tin doanh nghiệp, người dùng bảo vệ hệ thống Tuy có nhiều cố gắng từ nhà lập trình Web khơng thể đảm bảo ngăn chặn tồn cơng nghệ Web phát triển nhanh chóng (chủ yếu trọng đến yếu tố thẩm mỹ, yếu tố tốc độ,…) nên dẫn đến nhiều khuyết điểm phát sinh Sự công không nằm vài khuôn khổ mà linh động tăng lên tùy vào sai sót nhà quản trị hệ thống người lập trình ứng dụng Vì vậy, đề tài thực với mục đích tìm hiểu, phân tích lỗ hổng bảo mật ứng dụng Web SQL injection SQL injection kỹ thuật cho phép kẻ công lợi dụng lỗ hổng việc kiểm tra liệu đầu vào ứng dụng web thông báo lỗi hệ quản trị sở liệu trả để inject (tiêm vào) thi hành câu lệnh SQL bất hợp pháp SQL injection cho phép kẻ công thực thao tác, delete, insert, update, v.v sở liệu ứng dụng, chí server mà ứng dụng chạy SQL injection thường biết đến vật trung gian công ứng dụng web có liệu quản lý hệ quản trị sở liệu SQL Server, MySQL, Oracle, DB2, Sysbase Có bốn dạng cơng thường gặp bao gồm: - vượt qua kiểm tra lúc đăng nhập sử dụng câu lệnh SELECT sử dụng câu lệnh INSERT sử dụng stored-procedures 1.1 Dạng công vượt qua kiểm tra lúc đăng nhập Với dạng cơng này, tin tặc dễ dàng vượt qua trang đăng nhập nhờ vào lỗi dùng câu lệnh SQL thao tác sở liệu ứng dụng web Thông thường phép người dùng truy cập vào trang web bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin tên đăng nhập mật Sau người dùng nhập thông tin vào, hệ thống kiểm tra tên đăng nhập mật có hợp lệ hay khơng để định cho phép hay từ chối thực tiếp Ví dụ, trường hợp sử dụng ASP, người ta dùng trang : trang HTML để hiển thị Form nhập liệu trang ASP để xử lý thơng tin nhập vào từ phía người dùng sau: - Trang nhập liệu: login.htm Username: Password: - Trang xử lý nhập liệu: execlogin.asp Chỗ sơ hở đoạn mã xử lý nhập liệu nằm chỗ liệu nhập vào từ người dùng dùng để xây dựng trực tiếp câu lệnh SQL Chính điều cho phép tin tặc điều khiển câu truy vấn thực Ví dụ, người dùng nhập chuỗi ngoặc sau vào ô nhập liệu username/password trang login.htm là: ('OR=') Lúc này, câu truy vấn gọi thực là: SELECT * FROM T_USERS WHERE USR_NAME =''OR''='' AND USR_PASSWORD= ''OR''='' Câu truy vấn hợp lệ trả tất ghi T_USERS đoạn mã xử lí người dùng đăng nhập bất hợp pháp người dùng đăng nhập hợp lệ 1.2 Dạng công sử dụng câu lệnh SELECT Dạng công phức tạp Để thực kiểu công này, kẻ cơng phải có khả hiểu lợi dụng sơ hở thông báo lỗi từ hệ thống để dò tìm điểm yếu khởi đầu cho việc cơng Ví dụ, trang tìm kiếm Các trang cho phép người dùng nhập vào thông tin tìm kiếm Họ, Tên, … Đoạn mã thường gặp là: Tương tự trên, tin tặc lợi dụng sơ hở câu truy vấn SQL để nhập vào trường tên tác giả chuỗi giá trị: ' UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '=' (*) Lúc này, ngồi câu truy vấn đầu khơng thành cơng, chương trình thực thêm lệnh sau từ khóa UNION Giả sử đoạn mã nhập vào là: ' DROP TABLE T_AUTHORS -Câu truy vấn thực việc xóa bảng 1.3 Dạng cơng sử dụng câu lệnh INSERT Thông thường ứng dụng web cho phép người dùng đăng kí tài khoản để tham gia Chức thiếu sau đăng kí thành cơng, người dùng xem hiệu chỉnh thơng tin SQL injection dùng hệ thống khơng kiểm tra tính hợp lệ thơng tin nhập vào Ví dụ, câu lệnh INSERT có cú pháp dạng: INSERT INTO TableName VALUES('Value One', 'Value Two', 'Value Three') Nếu đoạn mã xây dựng câu lệnh SQL có dạng : Thì chắn bị lỗi SQLi, ta nhập vào trường thứ ví dụ như: ' + (SELECT TOP FieldName FROM TableName) + ' Lúc câu truy vấn : INSERT INTO TableName VALUES(' ' + (SELECT TOP FieldName FROM TableName) + ' ', 'abc', 'def') Khi đó, lúc thực lệnh xem thông tin, xem bạn yêu cầu thực thêm lệnh là: SELECT TOP FieldName FROM TableName 1.4 Dạng công sử dụng stored-procedures Việc công stored-procedures gây tác hại lớn ứng dụng thực thi với quyền quản trị hệ thống 'sa' Ví dụ, ta thay đoạn mã tiêm vào dạng: ' ; EXEC xp_cmdshell ‘cmdd.exe dir C: ' Lúc hệ thống thực lệnh liệt kê thư mục ổ đĩa C:\ cài đặt server Việc phá hoại kiểu tuỳ thuộc vào câu lệnh đằng sau cmd.exe fg SQL Injection tên nó, cách thức cơng vào lỗ hổng website nhằm vào sở liệu, cách chèn thêm đoạn query SQL để làm sai lệch câu lệnh truy vấn, từ phá hủy website lấy sở liệu Mô lỗi SQL Injection Để cho bạn dễ hiểu hơn, mơ tả quy trình này: Hacker tìm form lỗ hổng qua URL website Hacker chèn lệnh SQL vào lỗ hổng Hacker lấy thơng tin mong muốn, ví dụ thơng tin đăng thơng tin User, thông tin đăng nhập SQL Hacker giải mã password admin, thay mật vào đăng nhập tài khoản Admin Hacker làm muốn ! Các kiểu công phổ thông Tấn công mệnh đề ln Những lỗi lập trình thường xảy chức tìm kiếm đăng nhập tài khoản Ví dụ câu lệnh SQL sau: SELECT * FROM accounts WHERE userName = '{$userName}' Câu lệnh đầy sơ hở, người liều lĩnh mà code vậy, nhiên thực tế gần mà thơi, nhiều trang mắc lỗi này, thử xem hacker thêm gì: ' or '1' = '1' Thì truy vấn, câu lệnh trở thành mệnh đề SELECT * FROM accounts WHERE userName = '{$userName}' OR '1' = '1' Câu lệnh có vế ln trả đúng, câu lệnh thực được, trường hợp tài khoản bị chắn, hacker đăng nhập admin mà nghịch ngợm phá hoại … Tấn công phá hoại liệu Giả sử câu lệnh trên, không nhập ‘1’ = ‘1’ mà thêm sau: SELECT * FROM accounts WHERE userName = '{$userName}'; DROP TABLE accounts; '' Dấu ( ; ) dùng để phân tách câu lệnh SQL, điều đồng nghĩa với việc hacker hành động thêm lệnh vào câu lệnh trên, nguy hiểm, bạn khơng có backup nguy to Phòng chống SQl Injection Hầu hết mã nguồn mở không lo lỗi này, nhiên plugin hay module viết nhiều lập trình viên khác lại hay để sơ hở tạo điều kiện cho lỗi phát sinh Cách phòng tránh có nhiều cách, đó: 2.1 Viết lại đường dẫn Viết lại đường dẫn website phòng lỗi SQL Injection, hacker thường phải tìm sơ hở website đường link form nhập liệu người dùng, khơng nhìn thấy biến query hacker phải tìm cách khác để thử lỗi 2.2 Lọc kĩ người dùng nhập Bài học đừng tin người dùng, kể thân giúp bạn phòng lỗi hiệu quả, giả dụ sau: Với số người dùng nhập vào, để ăn bạn lọc qua hàm như: $num = ( int ) $_POST['num']; $num = is_numeric ( $num ) ? $num : 0; Ví dụ sử dụng sprinf: $data = sprintf('select * from %s where data = %d limit 1', $table, $must_be_number ); Sử dụng kết hợp với mysql_real_escape_string() để câu SQL an toàn: $data = sprintf('select * from %s where data = %d limit 1', $table, mysql_real_escape_string($must_be_number ) ); Với cách trên, bạn yên tâm câu lệnh khó bị bóp méo qua lỗi SQL Injection ! Xây dựng demo kịch công SQL Injection cho phép vượt qua khâu đăng nhập thêm, sửa, xóa liệu 3.1 MỤC TIÊU THỬ NGHIỆM Trang web “The Hunter” cung cấp cho khách hàng mặt công nghệ dịch vụ thực phẩm Nhiệm vụ trang web để tìm kiếm, nguồn cung cấp đa dạng đặc sản để dịch vụ thực phẩm trang web khách hàng bán lẻ FreshPoint có 27 hoạt động phân phối công ty sở hữu khắp Bắc Mỹ Với $ 750 triệu USD doanh thu hàng năm, công ty phục vụ nhiều nhà khai thác dịch vụ thực phẩm hàng đầu Freshpoint hoạt động khu vực tất ngành công nghiệp sản xuất bao gồm phân phối bán lẻ bán bn, tìm nguồn cung ứng nhập / xuất vận chuyển FreshPoint công ty SYSCO, dịch vụ thực phẩm lớn tiếp thị công ty phân phối Bắc Mỹ Trang web bao gồm mục : - What’s hot: Mục mặt hàng hot tuần - What’s new: Mục mặt hàng cập nhật - What’s out: Mục ngồi mặt hàng nói Product Index: Chỉ mục sản phẩm Phần demo em thử nghiệm lỗi SQL Injection mục Product Index mục cho phép khách hàng truy vấn đến sản phẩm sở liệu 3.2 Chiến lược công SQL Injection 3.2.1 Kỹ thuật công Select SQL Injection Việc công SQL Injection sử dụng câu lệnh Select thường dựa thông báo lỗi để lấy thông tin bảng trường bảng Để làm điều này, cần phải hiểu thơng báo lỗi từ đóchỉnh sửa nội dung nhập cho phù hợp 3.2.1.1 Direct Injection: Những đối số thêm vào câu lệnh mà không nằm dấu nhấy đơn hay dấu ngoặc kép trường hợp direct injection 3.2.1.2 Quote Injection: Những trường hợp đối số nhập vào ứng dụng cho vào hai dấu nháy đơn hay ngoặc kép trường hợp Quote Injection 3.3 Các bước công Bước : Thử lỗi Đầu tiên lổi sql thử cách thêm dấu ' sau câu lệnh truy vấn, với kết server trả thể lổi sql phát được, bước sử dụng lệnh truy vấn công lấy thông tin database: Bước 2: Lấy thông tin tên server, tên database: Thực công sql dạng sử dụng câu lệnh SELECT, cách thêm đoạn truy vấn: “ ' and 1=convert(int,(select top @@version)) ”: buộc server gửi kết lổi lệnh truy vấn khơng thực được, có đưa version database “ ' and 1=convert(int,(select top @@servername)) ”:buộc server gửi kết lổi lệnh truy vấn khơng thực được, có đưa tên server Tương tự “ ' and 1=convert(int,(select top db_name())) ”:buộc server gửi kết lổi lệnh truy vấn khơng thực được, có đưa tên database Hay “ ' and 1=convert(int,(select top user_name())) ”:buộc server gửi kết lổi lệnh truy vấn khơng thực được, có đưa tên người dùng server Bước 3: Lấy tên table database: “'and1=convert (int, (select top 1table_name from information_schema.tables)) ”: (truy vấn bảng information_schema) buộc server gửi kết lổi lệnh truy vấn khơng thực được, có đưa tên table information_schema 10 Phức tạp chút, kết hợp câu truy vấn với where (chỉ nơi), not in (khơng có trong) ta có cú pháp như: “ ' and 1=convert(int,(select top table_name from information_schema.tables where table_name not in (‘ph_ask_hunter’))) ” : (truy vấn bảng information_schema bảng ph_ask_hunter) buộc server gửi kết lổi lệnh truy vấn khơng thực được, có đưa tên table (đã loại trừ ph_ask_hunter) Khi có table dtproperties, ta tiếp tục sử dụng để tra table cú pháp: not in “ ' and 1=convert(int,(select top table_name from information_schema.tables where table_name not in (‘ph_ask_hunter’,’dtproperties’))) ” : server đưa tên table (đã loại trừ ph_ask_hunter, dtproperties) Tiếp theo ta lấy bảng fp_newsletter, fp_newsletter_Failed, ph_newletter, product, sysconstraints, sysseqments Bước 4: Lấy tên column table dtproperties : Tương tự lấy tên table, ta lấy tên columns table mà ta có được: “ ' and 1=convert(int,(select top column_name from information_schema.columns where table_name =(’dtproperties’))) ” : server trả tên column đầu bảng dtproperties Tiếp đó, để lấy columns bảng dtproperties ta cần thêm cú pháp: and column_name not in (…tên column có…) Tiếp tục ta lấy toàn columns table dtproperties: id, objectid, property, value, uvalue, lvalue, version Minh họa kết cơng hình ảnh Thử lỗi SQL Injection Hình 3.1 Server báo lỗi “chưa đóng dấu phẩy trước chuỗi 2253” Khai thác thông tin tên server, database … Hình 3.2 Server trả kết lỗi chứa tên server Khai thác tên table database Hình 3.4 Table information_schema Hình 3.5 Server trả kết lỗi chứa tên table Hình 3.6 Server trả kết lỗi chứa tên table dtproperties Hình 3.7 Tất table name lấy Khai thác tên column table dtproperties Hình 3.8 Server trả tên column đầu table dtproperties Hình 3.9 Server trả tên column table dtproperties KẾT LUẬN Lỗi SQL Injection lỗi phổ thơng, nhiên phòng chống việc hồn tồn khơng khó, cần bạn ln tự nhủ với người dùng nhập ta khơng thể tin điều gì, phải xác định lại chúng sử dụng phương pháp ép kiểu thêm dấu “” vào biến người dùng nhập ( addslashes() ) hạn chế tối đa lỗi ! Tài liệu tham khảo Tiếng Việt [2] Nguyễn Duy Thăng, Nguyễn Minh Thu, Nghiên cứu số vấn đề bảo mật, CNTT – 2003, ĐHKHTN Tp.HCM Tiếng nước [3] Justin Clarke, SQL Injection Attacks and Defense, Syngress, 2009 Trang Web [4] http://www.owasp.org/index.php/SQL_Injection [5] http://www.sqlsecurity.com/FAQs/SQLInjectionFAQ/tabid/56/Default.aspx [6].http://www.sensepost.com/labs/papers/sql_insertion/SQLinsertion2002_whitepap er.pdf [7].http://www.3c.com.vn/Story/vn/traodoikinhnghiem/leganninhmang/2007/11/3039 1.html [8] http://tusach.thuvienkhoahoc.com/wiki/CROSS-SITE_SCRIPTING [9] http://congdongit.org/security/1016-phong-ngua-tan-cong-tu-choi-dich-vu.html -17-