Phát hiện và ngăn chặn tấn công bằng sql injection vào cơ sở dữ liệu sử dụng web service

  • Số trang: 69 |
  • Loại file: PDF |
  • Lượt xem: 11 |
  • Lượt tải: 0
nhattuvisu

Đã đăng 26946 tài liệu

Mô tả:

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NHA TRANG KHOA CÔNG NGHỆ THÔNG TIN _______________________________ KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC NGÀNH CÔNG NGHỆ THÔNG TIN Đề tài : Phát hiện và ngăn chặn tấn công bằng SQL INJECTION vào cơ sở dữ liệu sử dụng Web service GVHD: Th.S NGÔ VĂN CÔNG SVTH: VĨNH THÁI CƯỜNG LỚP: 49-THM MSSV: 4913071009 NHA TRANG -NĂM 2011 LỜI NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… ………………………………………………………………………………………… LỜI NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… …………………………………………………………………………………………… MỤC LỤC CHƯƠNG 1 : TỔNG QUAN VỀ SQL INJECTION...................................................................8 Đặt vấn đề .....................................................................................................................8 1.1 1.1.1 Đặc trưng của các ứng dụng sử dụng cơ sở dữ liệu..............................................8 1.1.2 Tính chất nghiêm trọng của các cuộc tấn công. ...................................................9 a) Các thống kê lịch sử ..................................................................................................9 b) Các thống kê an ninh ..............................................................................................10 SQL Injection..............................................................................................................13 1.2 1.2.1 Khái niệm SQL Injection ....................................................................................13 1.2.2 Nguyên nhân gây ra lỗi SQL Injection ...............................................................14 a) Không kiểm tra dữ liệu đầu vào .............................................................................14 b) Xử lý không đúng kiểu............................................................................................14 c) Lỗi bảo mật bên trong máy chủ cơ sở dữ liệu ........................................................15 1.2.3 Tác hại từ các cuộc tấn công SQL Injection .......................................................16 Tổng kết chương .........................................................................................................16 1.3 CHƯƠNG 2 : CÁC HÌNH THỨC TẤN CÔNG SQL INJECTION PHỔ BIẾN ............................18 Các hình thức tấn công SQL Injection phổ biến........................................................18 2.1 2.1.1 Vượt qua kiểm tra lúc đăng nhập (Bypass Login) .............................................18 2.1.2 Dạng tấn công thu thập thông tin dựa trên các phản hồi từ database...............20 a) Tìm điểm yếu của website .......................................................................................20 b) Tìm kiếm các thông tin về cơ sở dữ liệu .................................................................21 c) Tìm kiếm trang quản trị .........................................................................................26 d) Tiến hành phá hoại .................................................................................................26 e) Kết luận ...................................................................................................................26 2.1.3 Blind SQL Injection ............................................................................................27 2.1.3.1 Thực hiện tấn công Blind SQL Injection dựa trên phản hồi .........................28 2.1.3.2 Thực hiện tấn công Blind SQL Injection dựa trên độ trễ truy vấn ...............30 2.1.4 Dạng tấn công sử dụng các stored-procedure. ...................................................32 2.1.5 Một số cách qua mặt bộ lọc đầu vào. ..................................................................33 2.2 Cách phòng tránh SQL Injection ...............................................................................34 2.2.1 Về phía người quản trị website ...........................................................................34 2.2.2 Về phía server .....................................................................................................36 2.3 Tổng kết chương .........................................................................................................37 CHƯƠNG 3 : DỊCH VỤ WEB (WEB SERVICE).........................................................................38 3.1 Tìm hiểu về Web Service. ...........................................................................................38 3.2 Đặc điểm của dịch vụ web ..........................................................................................41 3.2.1 Đặc điểm..............................................................................................................41 3.2.2 Ưu và nhược điểm ...............................................................................................42 3.2.3 Kiến trúc của dịch vụ web ..................................................................................43 3.2.4 Các thành phần của dịch vụ web ........................................................................45 3.2.4.1 XML – eXtensible Markup Language ............................................................45 3.2.4.2 WSDL - Web Service Description Language .................................................46 3.2.4.3 Universal Description, Discovery, and Integration (UDDI) ...........................47 3.2.4.4 SOAP - Simple Object Access Protocol ..........................................................48 3.2.5 An toàn cho dịch vụ Web ....................................................................................50 3.2.6 Xây dựng một dịch vụ Web ................................................................................52 3.2.7 Tích hợp dịch vụ Web theo chuẩn ......................................................................53 3.3 Xây dựng một web service đơn giản ..........................................................................55 3.4 Tổng kết chương .........................................................................................................59 CHƯƠNG 4 : PHÒNG CHỐNG SQL INJECTION BẰNG WEB SERVICE ...............................60 4.1 Đặt vấn đề ...................................................................................................................60 4.2 Cơ sở lý thuyết ............................................................................................................60 4.3 Nguyên tắc hoạt động .................................................................................................62 4.4 Triển khai thực tế. ......................................................................................................63 4.4.1 Dịch vụ killChars .................................................................................................63 4.4.2 Dịch vụ Db_2_XML .............................................................................................64 4.4.3 Dịch vụ XPath_XML_Validation .........................................................................65 4.4.4 Kiểm tra tính hiệu quả của web service. ............................................................66 4.5 Hướng phát triển ........................................................................................................67 KẾT LUẬN .................................................................................................................................68 LỜI MỞ ĐẦU Ngày nay, vấn đề bảo mật an ninh hệ thống mạng là một phần rất quan trọng của các công ty, tập đoàn, các tổ chức cơ quan, chính phủ trong cuộc sống xã hội hiện đại. Vấn đề an ninh và bảo mật là chìa khóa tất yếu thành công trong các lĩnh vực kinh tế, chính trị, an ninh quốc phòng và góp phần thúc đẩy sự phát triển toàn cầu nhanh chóng, liên kết khoảng cách địa lý, không gian, thời gian các nơi trên thế giới gần với nhau mà vẫn đảm bảo được an toàn. Thông thường, các nhà phát triển đa số tập trung vào các vấn đề an toàn trong việc chọn hệ điều hành, hệ quản trị CSDL, webserver sẽ chạy ứng dụng gì, ... Ví dụ, người ta thường quan tâm nhiều đến các lỗ hổng về an toàn trên Iternet Information Services (IIS) hơn là quan tâm đến các đoạn mã của ứng dụng có tiềm ẩn các lỗ hổng nghiêm trọng hay không. Một trong số các lỗ hổng này đó là SQL injection attack. Tại Việt Nam, đã qua thời kì các quản trị website lơ là việc quét virus, cập nhật các bản vá lỗi từ các phần mềm hệ thống, nhưng việc chăm sóc các lỗi của các ứng dụng lại rất ít được quan tâm. Đó là lí do tại sao trong thời gian vừa qua, không ít website tại Việt Nam bị tấn công và đa số đều là lỗi SQL injection. Vậy SQL injection là gì ? Nguyên nhân ? Hậu quả ? Cách phòng tránh ? Được sự hướng dẫn nhiệt tình và chu đáo của thầy Ngô Văn Công, trong 3 tháng làm đề tài tốt nghiệp, em đã tìm hiểu và nghiên cứu đề tài : “Phát hiện và ngăn chặn tấn công bằng SQL INJECTION vào cơ sở dữ liệu sử dụng Web service”. Thông qua đề tài này, em muốn giới thiệu đến mọi người một cái nhìn tổng quan về SQL Injection, khái niệm, nguyên nhân, hậu quả, các phương pháp tấn công phổ biến, cách khắc phục … Từ đó, giúp cho các bạn trẻ mới bước vào thế giới lập trình có nền tảng về vấn đề bảo mật, an ninh mạng, xây dựng được những website có độ an toàn cao. Đề tài của em cũng đề cập đến một loại hình đang phát triển thời gian gần đây là Web Service (Dịch vụ mạng), ưu – nhược điểm, các thành phần chủ yếu, cách xây dựng, bảo mật cho web service … Từ đó, em kết hợp 2 vấn đề trên tạo nên một giải pháp phòng chống SQL Injection mới bằng webservice. Đây là phương pháp hứa hẹn có thể giải quyết triệt để các cuộc tấn công SQL Injection mà các phương pháp trước đây chưa hoàn thiện. Trong phạm vi kiên thức của mình, em xin trình bày những hiểu biết của em về “Phát hiện và ngăn chặn tấn công bằng SQL INJECTION vào cơ sở dữ liệu sử dụng Web service”.” trong bài đồ án này. Đồ án tốt nghiệp đại học GVHD: Th.S Ngô Văn Công CHƯƠNG 1 TỔNG QUAN VỀ SQL INJECTION 1.1 Đặt vấn đề 1.1.1 Đặc trưng của các ứng dụng sử dụng cơ sở dữ liệu Hiện nay, không khó để nhận ra rằng những ứng dụng phổ biến nhất và chiếm thị phần cũng như doanh thu cao nhất đều là những ứng dụng hỗ trợ tính năng quản lý. Dữ liệu là thứ sống còn trong mọi hoạt động nghiệp vụ hiện tại. Chính vì lý do đó, các ứng dụng nghiệp vụ hiện tại đều xây dựng trên những mô hình phát triển gắn liền với cơ sở dữ liệu. An toàn của dữ liệu phụ thuộc vào độ bảo mật của ứng dụng web kết nối tới cơ sở dữ liệu. Các mô hình phát triển ứng dụng Web hiện tại được sử dụng phổ biến nhất là 3 tầng, ngoài ra còn có một số bản cải tiến, mở rộng mô hình này nhằm những mục đích riêng. Hình 1-1. Mô hình ứng dụng 3 tầng SVTH: Vĩnh Thái Cường - 49THM Page 8 Đồ án tốt nghiệp đại học GVHD: Th.S Ngô Văn Công Hình 1-2. Mô hình ứng dụng 4 tầng Các mô hình trên luôn có một số điểm chung, đó là database server chỉ làm nhiệm vụ lưu trữ dữ liệu, database hồi đáp những truy vấn dữ liệu được xây dựng theo chuẩn (ví dụ như SQL). Mọi thao tác xử lý dữ liệu input, output của database server đều được ứng dụng web ở tầng Logic xử lý. Các vấn đề an ninh phát sinh đa phần sẽ nằm ở tầng này. 1.1.2 Tính chất nghiêm trọng của các cuộc tấn công. a) Các thống kê lịch sử - Ngày 01/11/2005, một hacker tuổi vị thành niên đã sử dụng SQL injection để xâm nhập trang chủ của một tạp chí an ninh thông tin Đài Loan từ nhóm Tech Target và ăn cắp thông tin khách hàng. - Ngày 13/01/2006, tội phạm máy tính Nga đã xâp nhập trang web của chính phủ đảo Rhode và ăn cắp dữ liệu thẻ tín dụng từ những cá nhân đã giao dịch với các cơ quan nhà nước. - Ngày 29/07/2007, một tội phạm máy tính đã bôi nhọ trang web của Microsoft tại Vương quốc Anh bằng SQL injection. Trang web The Register của Anh đã dẫn lời phát ngôn viên của Microsoft thừa nhận vấn đề này. SVTH: Vĩnh Thái Cường - 49THM Page 9 Đồ án tốt nghiệp đại học GVHD: Th.S Ngô Văn Công - Vào tháng 1 năm 2008, hàng chục ngàn máy tính cá nhân đã bị nhiễm một mã SQL injection tự động. Loại mã độc này đã khai thác một lỗ hổng trong đoạn mã chương trình sử dụng Microsoft SQL Server - Cuộc tấn công website BGD&ĐT www.moet.gov.vn ngày 27.11.2006 - Một trong những vụ tấn công SQL Injection nổi tiếng nhất là vụ tấn công vào CardSystems Solutions. b) Các thống kê an ninh Theo WhiteHat - một tổ chức có uy tín trong việc nghiên cứu và hỗ trợ các vấn đề an ninh mạng, SQL Injection nằm trong 10 lỗi bảo mật phổ biến nhất hiện nay.  10 lỗi bảo mật phổ biến gần đây nhất : Hình 1-3. Thống kê 10 lỗi bảo mật phổ biến nhất (3/2008) SVTH: Vĩnh Thái Cường - 49THM Page 10 Đồ án tốt nghiệp đại học GVHD: Th.S Ngô Văn Công Hình 1-4. Thống kê 10 lỗi bảo mật phổ biến nhất (2/2009)  Thời gian trung bình cần để khắc phục các lỗ hổng bảo mật : Hình 1-5. Thống kê thời gian trung bình khắc phục các lỗ hổng bảo mật (8/2008) SVTH: Vĩnh Thái Cường - 49THM Page 11 Đồ án tốt nghiệp đại học GVHD: Th.S Ngô Văn Công Hình 1-6. Thống kê thời gian trung bình khắc phục các lỗ hổng bảo mật (2/2009)  Tỉ lệ lỗ hổng bảo mật thường xuyên bị khai thác : Hình 1-7. Thống kê tỉ lệ lỗ hổng bảo mật thường xuyên bị khai thác (2/2010) SVTH: Vĩnh Thái Cường - 49THM Page 12 Đồ án tốt nghiệp đại học 1.2 GVHD: Th.S Ngô Văn Công SQL Injection. 1.2.1 Khái niệm SQL Injection SQL injection là kĩ thuật tấn công web lợi dụng lỗ hổng trong việc kiểm tra dữ liệu đầu vào của ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu. Nó cho phép kẻ tấn công chèn vào các đoạn mã SQL bất hợp pháp với mục đích khai thác lỗ hổng bảo mật tồn tại trong cơ sở dữ liệu của một ứng dụng. Lỗ hổng bảo mật này có thể xuất hiện khi ứng dụng không có sự kiểm tra chuỗi ký tự đầu vào trong câu truy vấn SQL, hoặc do sự định kiểu đầu vào không rõ ràng, hay do lỗi cú pháp SQL của lập trình viên khiến cho một đoạn mã độc hại có thể được xử lý ngoài ý muốn. SQL Injection là một dạng tấn công dễ thực hiện, hầu hết mọi thao tác người tấn công cần được thực hiện với một trình duyệt web, có thể kèm theo một ứng dụng proxy server. Chính vì đơn giản như vậy cho nên bất cứ ai cũng có thể học cách tiến hành một cuộc tấn công. Lỗi bắt nguồn từ mã nguồn của ứng dụng web chứ không phải từ phía database, chính vì thế bất cứ thành phần nào của ứng dụng mà người dùng có thể tương tác được để điều khiển nội dung (ví dụ : các form, tham số URL, cookie, tham số referrer, user-agent, …) đều có thể được sử dụng để tiến hành chèn truy vấn có hại. 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ư MySQL, SQL Server, Oracle, DB2, Sysbase … Công cụ dùng để tấn công là một trình duyệt web bất kì, chẳng hạn như Internet Explorer, FireFox, Chrome, Netscape, Lynx, ... SVTH: Vĩnh Thái Cường - 49THM Page 13 Đồ án tốt nghiệp đại học GVHD: Th.S Ngô Văn Công 1.2.2 Nguyên nhân gây ra lỗi SQL Injection a) Không kiểm tra dữ liệu đầu vào Đâ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. Câu lệnh sau sẽ minh họa lỗi này: statement = "SELECT * FROM users WHERE user_name = '" + userName + "';" Câu lệnh này được thiết kế để trả về các bản ghi tên người dùng cụ thể từ bảng những người dùng. Tuy nhiên, nếu biến userName được nhập theo một cách có chủ ý, nó có thể trở thành một câu truy vấn SQL với mục đích khác hẳn so với mục đích của đoạn mã trên. Ví dụ, ta nhập vào giá trị của biến userName như sau : ' or '1'='1 Khiến câu truy vấn có thể được hiểu thành : SELECT * FROM users WHERE name = '' or '1'='1'; Nếu đoạn mã trên được sử dụng trong một thủ tục xác thực thì sẽ bắt buộc phải lựa chọn một tên người dùng hợp lệ bởi điều kiện '1'='1' luôn đúng. b) Xử lý không đúng kiểu Lỗi SQL injection dạng này thường xảy ra do lập trình viên định nghĩa đầu vào dữ liệu không rõ ràng hoặc thiếu bước kiểm tra và lọc kiểu dữ liệu SVTH: Vĩnh Thái Cường - 49THM Page 14 Đồ án tốt nghiệp đại học GVHD: Th.S Ngô Văn Công đầu vào. Điều này có thể xảy ra khi một trường số được sử dụng trong truy vấn SQL nhưng lập trình viên lại thiếu bước kiểm tra dữ liệu đầu vào để xác minh kiểu của dữ liệu mà người dùng nhập vào có phải là số hay không. Ví dụ như sau : statement = "SELECT * FROM data WHERE id = " + id_ + ";" Ta có thể nhận thấy một cách rõ ràng mục đích của đoạn mã trên là nhập vào một số tương ứng với trường id (kiểu số). Tuy nhiên, người dùng cuối, thay vì nhập vào một số, họ lại nhập vào một chuỗi ký tự, và do vậy có thể trở thành một câu truy vấn SQL hoàn chỉnh mới mà bỏ qua ký tự thoát. Ví dụ, ta nhập vào giá trị của biến id_ là : 1;DROP TABLE users Câu truy vấn sẽ trở thành : SELECT * FROM DATA WHERE id=1;DROP TABLE users Khi đó, nó sẽ thực hiện thao tác xóa toàn bộ bảng users ra khỏi cơ sở dữ liệu. c) Lỗi bảo mật bên trong máy chủ cơ sở dữ liệu Đôi khi lỗ hổng có thể tồn tại chính trong phần mềm máy chủ cơ sở dữ liệu, như là trường hợp hàm mysql_real_escape_string()của các máy chủ MySQL. Điều này sẽ cho phép kẻ tấn công có thể thực hiện một cuộc tấn công SQL injection thành công dựa trên những ký tự Unicode không thông thường ngay cả khi dữ liệu đầu vào đã được kiểm soát. SVTH: Vĩnh Thái Cường - 49THM Page 15 Đồ án tốt nghiệp đại học GVHD: Th.S Ngô Văn Công 1.2.3 Tác hại từ các cuộc tấn công SQL Injection Bằng cách chèn các mã SQL query/command vào input trước khi chuyển cho ứng dụng web xử lí, kẻ tấn công có thể login mà không cần username và password, remote execution, dump data và lấy root của SQL server. Cho phép kẻ tấn công có thể thực hiện các thao tác xóa, hiệu chỉnh, … do có toàn quyền trên cơ sở dữ liệu của ứng dụng. Tác hại từ các cuộc tấn công SQL Injection còn tùy thuộc vào môi trường và cách cấu hình hệ thống. Trong SQL Server, nếu ứng dụng sử dụng quyền dbo (quyền của người sở hữu CSDL - owner) khi thao tác dữ liệu, nó có thể xóa toàn bộ các bảng dữ liệu, tạo các bảng dữ liệu mới, … Nếu ứng dụng sử dụng quyền sa (quyền quản trị hệ thống), nó có thể điều khiển toàn bộ hệ quản trị CSDL và với quyền hạn rộng lớn như vậy nó có thể tạo ra các tài khoản người dùng bất hợp pháp để điều khiển hệ thống của bạn. 1.3 Tổng kết chương Dựa vào các thống kê trên có thể rút ra vài nhận xét về lỗi SQL Injection : - Là một trong số những lỗi bảo mật phổ biến nhất. - Xác suất gặp phải lỗ hổng bảo mật loại này trong một website là khá cao. - Được sử dụng nhiều, lý do một phần bởi tính đơn giản, không đòi hỏi nhiều công cụ hỗ trợ. - Thời gian khắc phục các điểm yếu này thường khá lâu, do đó hậu quả thường nặng nề hơn. Trên thực tế, các cuộc tấn công SQL Injection thường nhắm đến các cơ sở dữ liệu mang tính thương mại, ví dụ các website thương mại điện tử. Thông thường, các cuộc tấn công này sẽ tiến hành sửa đổi nội dung của SVTH: Vĩnh Thái Cường - 49THM Page 16 Đồ án tốt nghiệp đại học GVHD: Th.S Ngô Văn Công database đối tượng và chèn các đoạn mã JavaScript độc. Bản chất lỗ hỏng SQL Injection là xuất hiện từ trong quá trình xử lý dữ liệu đầu vào của người dùng bên trong mã nguồn, do chính thời gian bảo trì mã nguồn thường kéo dài nên các lỗi SQL Injection cũng chậm được khắc phục triệt để. Với tính nghiêm trọng của các cuộc tấn công, tính dễ thực hiện của một cuộc tấn công đã khiến cho SQL Injection một thời từng là hiểm họa nghiêm trọng đối với các giao dịch thương mại điện tử trên các ứng dụng Web được phát triển thiếu an toàn. Hiện nay, việc nghiên cứu SQL Injection đã có hệ thống và toàn diện hơn, mối nguy hiểm này đã giảm đi, nhưng số liệu thống kê vẫn cho thấy vấn đề này còn chưa được giải quyết triệt để. Ở nước ta, trong quá trình đào tạo, các lập trình viên ứng dụng Web được đào tạo nhiều kiến thức và kỹ năng cần thiết, tuy nhiên các kiến thức về bảo mật hầu như không được chú trọng đúng mức. Điều này vô hình chung dẫn đến hệ quả là các sản phẩm của họ đều có nguy cơ mắc phải những vấn đề về bảo mật, điều mà không đáng có nếu họ được trang bị tốt hiểu biết từ đầu. SVTH: Vĩnh Thái Cường - 49THM Page 17 Đồ án tốt nghiệp đại học GVHD: Th.S Ngô Văn Công CHƯƠNG 2 CÁC HÌNH THỨC TẤN CÔNG SQL INJECTION PHỔ BIẾN 2.1 Các hình thức tấn công SQL Injection phổ biến 2.1.1 Vượt qua kiểm tra lúc đăng nhập (Bypass Login) 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. Thông thường để cho phép người dùng truy cập vào các website được 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 về tên đăng nhập và mật khẩu. Sau khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối thực hiện tiếp. Ví dụ, trong trường hợp sử dụng PHP, người ta có thể dùng 2 trang : 1 trang để hiển thị form nhập liệu và 1 trang khác để xử lý thông tin nhập vào từ phía người dùng như sau : - Trang nhập dữ liệu : login.php :
Username
SVTH: Vĩnh Thái Cường - 49THM Page 18 Đồ án tốt nghiệp đại học GVHD: Th.S Ngô Văn Công - Trang xử lý : authentication.php $user_name = $_POST["user_name"]; $password = $_POST["password"]; $command = "select * from user where user_name='".$user_name."' and password='".$password."'"; $result = mysql_query($command,$connect); $row = mysql_fetch_array($result); if ($row >0) { header("Location:controlpanel.php");} else { header("Location:login.php");} Điểm sơ hở trong đoạn mã xử lý nhập liệu trên nằm ở chỗ dữ liệu nhập vào từ người dùng được dùng để xây dựng trực tiếp câu lệnh SQL. Chính điều này cho phép tin tặc có thể điều khiển câu truy vấn sẽ được thực hiện. Ví dụ, nếu người dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu user_name/password của trang login.htm là : 'OR'1'='1 Lúc này, câu truy vấn sẽ được gọi thực hiện là : SELECT * FROM USER WHERE USER_NAME =''OR'1'='1' AND PASSWORD= ''OR'1'='1' Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của bảng USER và đoạn mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ. SVTH: Vĩnh Thái Cường - 49THM Page 19 Đồ án tốt nghiệp đại học 2.1.2 GVHD: Th.S Ngô Văn Công Dạng tấn công thu thập thông tin dựa trên các phản hồi từ database. Thông thường, các database đều có tính năng thông báo lỗi xảy ra trong quá trình truy vấn dữ liệu. Mục đích của tính năng này là giúp người quản trị có thể dễ dàng nhận biết và sửa lỗi dễ dàng hơn. Tuy nhiên, nó lại là một điểm yếu bị lợi dụng trong các cuộc tấn công SQL Injection. Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng sử dụng các câu lệnh SQL thông thường, biết cách lợi dụng 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. a) Tìm điểm yếu của website Xét một liên kết bình thường sau : http://www.xyz.com.vn/?a=news&id=46 Hình 2-1. Trạng thái bình thường của website Tuy nhiên, khi thay đổi liên kết trên bằng cách thêm ký tự ’ vào liên kết : http://www.xyz.com.vn/?a=news&id=46’ SVTH: Vĩnh Thái Cường - 49THM Page 20
- Xem thêm -