0

Hướng dẫn chi tiết khai thác lỗi SQL injection

48 1,717 3
  • Hướng dẫn chi tiết khai thác lỗi SQL injection

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Tài liệu liên quan

Thông tin tài liệu

Ngày đăng: 23/09/2014, 14:35

“Sql Injection (SQLi) 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, thêm, sửa, xóa… trên cơ sở dữ liệu của ứng dụng. 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...”Sql Injection được mô tả như là một trong những lỗ hổng bảo mật web nguy hiểm nhất. Khai thác Sql Injection, ngoài việc đoạt được quyền kiểm soát về mặt dữ liệu như đã nói ở trên, hacker còn có thể cài đặt backdoor trên server mà ứng dụng đang chạy, qua đó kiểm soát toàn bộ hệ thống…Chúng ta sẽ cùng tìm hiểu về chủ đề này theo các chuyên đề nhỏ dưới đây:Web1: SQL injection Con đường khai thác phổ biến : qua “user input”Web2: SQL injection Các con đường khai thác khácWeb3: SQL injection Kỹ thuật khai thác: Các hướng khai thácWeb4: SQL injection Kỹ thuật khai thác: Các bước khai thácWeb5: SQL injection Kỹ thuật khai thác: Một số kỹ thuật vượt qua cơ chế lọcWeb6: SQL injection Một số tools khai thácWeb7: SQL injection Các cách phòng chống Kết luận. Mục lục Table of Contents Page 1 Web1: SQL injection - Con đường khai thác phổ biến: qua “user input”. Giới thiệu Wikipedia: “Sql Injection (SQLi) 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, thêm, sửa, xóa… trên cơ sở dữ liệu của ứng dụng. 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 ” Sql Injection được mô tả như là một trong những lỗ hổng bảo mật web nguy hiểm nhất. Khai thác Sql Injection, ngoài việc đoạt được quyền kiểm soát về mặt dữ liệu như đã nói ở trên, hacker còn có thể cài đặt backdoor trên server mà ứng dụng đang chạy, qua đó kiểm soát toàn bộ hệ thống… Chúng ta sẽ cùng tìm hiểu về chủ đề này theo các chuyên đề nhỏ dưới đây: Web1: SQL injection - Con đường khai thác phổ biến : qua “user input” Web2: SQL injection - Các con đường khai thác khác Web3: SQL injection - Kỹ thuật khai thác: Các hướng khai thác Web4: SQL injection - Kỹ thuật khai thác: Các bước khai thác Web5: SQL injection - Kỹ thuật khai thác: Một số kỹ thuật vượt qua cơ chế lọc Web6: SQL injection - Một số tools khai thác Web7: SQL injection - Các cách phòng chống & Kết luận. W1: SQL injection - Con đường khai thác phổ biến : qua “user input” User input điển hình thường đến từ các form nhập liệu, form search hay link… Những dữ liệu này được web browser gửi đến server thông qua phương thức HTTP Page 2 GET hay POST và trở thành các tham số cho ứng dụng web truy cập tới cơ sở dữ liệu. Ví dụ như trong một form search, khi người dùng điền vào “Sql Injection”, đơn giản ứng dụng web sẽ truy cập cơ sở dữ liệu và tìm ra các bản ghi mà nội dung của nó chứa từ khóa “Sql Injection” để trả lại kết quả cho người dùng. Một trường hợp khác phổ biến hơn trong kỹ thuật tấn công Sql Injection, khi người dùng request một tài liệu mà các tham số của nó được truyền qua url (như ở ảnh minh họa bên dưới, tham số id được truyền qua url theo phương thức HTTP GET). Khi nhận được request, ứng dụng web tìm trong cơ sở dữ liệu và trả về cho người dùng bài viết có id=31. Sau đây là ví dụ về việc khai thác thông qua “user input” Các bạn có thể truy cập vào link sau: http://zixem.altervista.org/SQLi/level1.php? id=1 Page 3 Site này sẽ truy cập vào cơ sở dữ liệu và hiển thị cho người sử dụng Item ID và Price tương ứng với giá trị của biến id trên URL (ở đây id = 1). Dựa trên lỗ hổng của việc kiểm tra giá trị đầu vào của biến id, ta có thể khai thác và thực thi những câu lệnh SQL. Ở đây, ta sẽ thay đổi URL để lấy được phiên bản của hệ quản trị cơ sở dữ liệu và tên của cơ sở dữ liệu. Thay đổi biến id thành như sau: id=1 union select @@version,database(),6 limit 1,1. Sau đó gửi request đến web server. Page 4 Như vậy, ta xác định được phiên bản của hệ quản trị cơ sở dữ liệu là MySQL 5.1.71-community-log và tên của cơ sở dữ liệu là my_zixem. Tùy vào các câu truy vấn chúng ta chèn vào mà chúng ta sẽ thu thập được những thông tin mong muốn hay những hành động phá hoại như xóa bảng trong cơ sở dữ liệu, upload shell lên web server phục vụ việc khai thác về sau. Chi tiết về các bước thực hiện để làm được những điều này sẽ được trình bày trong các chuyên đề sau. Web2: SQL injection - Các con đường khai thác khác Page 5 Thông qua cookies Cookies là những tệp tin lưu trữ thông tin trạng thái của người dùng khi truy cập các ứng dụng web. Những thông tin này do người lập trình quyết định, được tạo ra ở server và lưu trữ tại client. Khi người dùng truy cập lại ứng dụng web, cookies được browser gửi lên server giúp phục hồi lại những trạng thái của người dùng trong lần truy cập trước đó. Do được lưu trữ ở client nên người dùng có thể chỉnh sửa tùy ý, vì vậy nếu ứng dụng web sử dụng những thông tin lưu trong cookies để xây dựng các truy vấn tới cơ sở dữ liệu thì hacker hoàn toàn có thể chèn vào cookies những script sql để thực hiện một cuộc tấn công Sql Injection. Có nhiều công cụ cho phép xem, thêm mới và chỉnh sửa cookie, trong đó addon Cookies Manager của firefox là một công cụ khá tiện lợi. Ta có thể tải về và cài đặt vào firefox một cách dễ dàng. Page 6 Bây giờ, chúng ta cùng thực hiện việc khai thác thông qua cookie. Các bạn truy cập vào link sau: http://zerocoolhf.altervista.org/level4.php?id=1 Page 7 Ở đây, ta sẽ dụng addon Live HTTP headers của firefox để thực hiện việc khai thác. Page 8 Sau khi khởi chạy Live HTTP headers, chúng ta tải lại trang lần nữa để Live HTTP headers bắt các request gửi lên server. Chọn lần lượt như hình sau: Page 9 Một cửa sổ mới hiện ra cùng với nội dung cookie: exploit=1 Page 10 [...]... pháp phổ biến khi khai thác Sql injection Cơ sở của nó là sử dụng từ khóa union để gộp các kết quả của các mệnh đề select, qua đó lấy được thông tin từ cơ sở dữ liệu Các bạn có thể xem ví dụ về việc sử dụng phương pháp này trong khai thác SQL injection trong các chuyên đề trước: W1: SQL injection - Con đường khai thác phổ biến : qua “user input” và W2: SQL injection - Con đường khai thác khác 3 Batched... ứng dụng đang sử dụng, chúng ta có thể đánh giá theo nhiều tiêu chí Có thể đánh giá qua thông báo lỗi: Thông báo lỗi từ MS -SQL – IIS Thông báo lỗi từ MySQL – Apache Trong trường hợp ở trên, thông báo lỗi cho biết ứng dụng web sử dụng MySQL 3 Xác định số lượng cột trong mệnh đề select Khi khai thác SQL injection, chúng ta thường sử dụng một hay nhiều mệnh đề select phụ (subselect), điều này được thực... mọi khi được Một cách khai thác đó là sử dụng BATCHED QUERY hoặc có thể tham khảo cách sau: Trong phương pháp trên, chúng ta đã inject được một sub select nhưng rõ ràng cách thực hiện này giờ đây phải kết hợp cả với kỹ thuật BOOLEAN BASED BLIND SQLI Page 18 Web4: SQL injection - Các bước khai thác khác 1 Phát hiện Một cách thông thường, để phát hiện một ứng dụng web có dính lỗi SQL injection hay không... http://zerocoolhf.altervista.org/level1.php?id=1' Thông báo lỗi từ mysql xuất hiện, như vậy trang web này đã bị dính lỗi SQL injection 2 Thu thập thông tin về hệ quản trị cơ sở dữ liệu Page 20 Khi phát hiện ứng dụng bị dính lỗi SQL injection, công việc cần làm tiếp theo là thu thập thông tin về hệ quản trị cơ sở dữ liệu mà ứng dụng đang dùng, thông tin này bao gồm loại cơ sở dữ liệu (mysql, mssql, oracle…) và phiên bản của nó... administrator Web3: SQL injection – Các hướng khai thác 1 Boolean based và Time based Blind SQL injection Boolean based: Cơ sở của kỹ thuật này là việc so sánh đúng sai để tìm ra từng ký tự của những thông tin như tên bảng, tên cột… Do đó, với dải giá trị chữ số, chữ cái (bao gồm cả hoa, thường), và một số ký tự đặc biệt, việc so khớp trở nên rất khó khăn và đòi hỏi nhiều thời gian Do đó việc khai thác lỗi chủ... server trong việc khai thác Sql Injection Page 13 Các addon của firefox hỗ trợ rất tốt những việc này, Tamper Data hay Live HTTP headers (đã được ví dụ ở trên) có thể giúp chúng ta bắt những request gửi từ client lên web server, từ đó chúng ta có thể dễ dàng thay đổi các biến server (http header…) trước khi gửi chúng tới server Việc khai thác thông qua các biến server tương tự như khai thác thông qua... bộ cơ sở dữ liệu của site bị lỗi SQL injection Web5: SQL injection - Một số kỹ thuật vượt qua cơ chế lọc 1 Cắt bớt nội dung câu truy vấn Trong trường hợp muốn lờ đi những đoạn script trong câu truy vấn Ví dụ đối với đoạn xử lý dưới đây, trong câu truy vấn đòi hỏi điều kiện active=1 nhưng chúng ta có thể comment ( , -, -+, #, /*, /**/, //, ;%00…) và lờ nó đi Khi khai thác chúng ta thường không biết... http://zerocoolhf.altervista.org/level1.php?id=1' order by 3 - => ok Page 22 Tiếp tục: http://zerocoolhf.altervista.org/level1.php?id=1' order by 4 - => xuất hiện lỗi Page 23 Như vậy, ta xác định được số cột là 3 4 Xác định thông tin Page 24 Sau khi lấy được các thông tin cơ bản, chúng ta sẽ tiến hành khai thác SQL injection để lấy cơ sở dữ liệu hay thực hiện những hành vi khác thông qua lỗ hổng này Xác định tên bảng, cột: chúng ta có nhiều... để bypass lọc khoảng trắng: /**/, %20, %09, %0a, %0b, %0c, %0d, %a0) Ví dụ: Hay bypass lọc các từ khóa (khả dụng với MySql) Trong ví dụ dưới đây, từ khóa union và password nằm trong blacklist nên đã bị chặn, chúng ta có thể bypass bằng cách: b Thay thế các từ khóa Khi khai thác SQL injection chúng ta thường sử dụng những từ khóa như: union, select, information_schema Nhiều trường hợp người lập trình... http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string 4 Bypass lỗi "illegal mix of collation for operation UNION" Trong một số hệ quản trị (thường thấy trong MySql), các database, các table khi đã được set collation thì khi sử dụng từ khóa UNION sẽ bị báo lỗi "illegal mix of collation for operation UNION" Việc thiết lập collation (đối chi u font mã hóa) có Page 35 thể do chủ định của . đây: Web1: SQL injection - Con đường khai thác phổ biến : qua “user input” Web2: SQL injection - Các con đường khai thác khác Web3: SQL injection - Kỹ thuật khai thác: Các hướng khai thác Web4: SQL injection. injection - Kỹ thuật khai thác: Các bước khai thác Web5: SQL injection - Kỹ thuật khai thác: Một số kỹ thuật vượt qua cơ chế lọc Web6: SQL injection - Một số tools khai thác Web7: SQL injection - Các. pháp này trong khai thác SQL injection trong các chuyên đề trước: W1: SQL injection - Con đường khai thác phổ biến : qua “user input” và W2: SQL injection - Con đường khai thác khác 3. Batched
- Xem thêm -

Xem thêm: Hướng dẫn chi tiết khai thác lỗi SQL injection, Hướng dẫn chi tiết khai thác lỗi SQL injection, Hướng dẫn chi tiết khai thác lỗi SQL injection