Cách dùng Burp Suite khai thác SQL Injection

SQL injection (SQLi) vẫn là một trong những lỗ hổng web phổ biến nhất hiện nay. Nhưng làm thế nào để học cách khai thác nó một cách hợp pháp? Đơn giản thôi, bạn chỉ cần tải xuống và định cấu hình Burp Suite Community Edition, đồng thời tạo và lập tài khoản trong PortSwigger Labs.

SQL Injection cơ bản với Burp Suite

Để khai thác SQL Injection, trước tiên bạn nên tải Burp Suite Pro để thực hành nhé.

Kế hoạch

Nhiệm vụ: Tìm Lab “SQL injection attack, liệt kê nội dung cơ sở dữ liệu trên cơ sở dữ liệu không phải Oracle”. Mình đã chọn Lab này vì nó hiển thị tất cả các bước của SQLi cơ bản và giúp bạn hiểu các công cụ của Burp Suite.

Cách dùng Burp Suite khai thác SQL Injection 18

Tóm lại: tìm thông tin đăng nhập Admin

Các bước cần thiết:

  1. Tìm và xác nhận Entry Point (Điểm vào) trong request web
  2. Tìm hiểu loại SQL comment hợp lệ
  3. Tìm số Row trong bảng hiện tại
  4. Tìm các Column trả về STRING
  5. Tìm Table nào nằm trong cơ sở dữ liệu của ứng dụng web này
  6. Tìm Tablemục tiêu (Table có thông tin đăng nhập admin)
  7. Xác định tên Column của Table
  8. Lấy nội dung

SQL Injection cơ bản với Burp Suite

1. Tìm và xác nhận Entry Point trong request web

Khi truy cập trang, bạn sẽ thấy một trang đích bình thường. Mục tiêu của chúng ta là khám phá trang này và tìm kiếm các tham số có liên quan đến cơ sở dữ liệu.

Cách dùng Burp Suite khai thác SQL Injection 19

Ở đây rõ ràng chúng ta có hai tùy chọn: các bộ lọc như ‘All’, ’Clothing’,… và My Account nằm ở trên cùng bên phải.

Hãy tập trung vào các bộ lọc.

Nhấp vào “All” sẽ không gọi bất kỳ bộ lọc nào.

Vì vậy, hãy chọn bộ lọc “Gifts” để nhận được một phản hồi hợp lệ.

Cách dùng Burp Suite khai thác SQL Injection 20

Bây giờ, hãy tăng sức mạnh cho Burp và truy cập lịch sử HTTP của Proxy của nó. Đảm bảo rằng bạn đã tắt Intercept. Nếu không, nó vẫn hoạt động nhưng mọi thứ sẽ chậm hơn nhiều… bạn có thể tự mình thử.

Cách dùng Burp Suite khai thác SQL Injection 21

Burp đã chặn một Request tới Ứng dụng Lab. Bây giờ chúng ta cần chỉnh sửa nó. Chúng ta gửi Request  này tới Repeater trong Burp bằng cách nhấp chuột phải vào Request Body và chọn “Send to Repeater”.

Cách dùng Burp Suite khai thác SQL Injection 22

Sau đó, chuyển đến tab Repeater trong Burp và tìm Request. Bạn có thể chỉnh sửa nó ngay bây giờ.

Máy chủ web chỉ hiểu các ký tự URL và chỉ một số nội dung con người có thể đọc được. Vì vậy, hãy bật bộ mã hóa URL tự động trong Burp bằng cách nhấp vào Request body trong Repeater và chọn URL-encode as you type. Bây giờ, bất cứ khi nào chúng ta nhập các ký tự mà máy chủ Web không hiểu được sẽ được mã hóa dưới dạng URL và hầu hết các ký tự mà con người có thể đọc được sẽ được giữ nguyên.

Cách dùng Burp Suite khai thác SQL Injection 23

Cách dễ nhất để tìm entry point trong SQLi là chèn các Ký tự Xấu. Đây là danh sách cơ bản:

‘
%27
“
%22
#
%23
;
%3B
)
Wildcard (*)

Bắt đầu thử chúng từ trên xuống dưới bằng cách đưa chúng vào tham số “category”. Ví dụ:

?category='

Cách dùng Burp Suite khai thác SQL Injection 24

Ngay sau khi thử ký tự đầu tiên là ‘, đã xảy ra lỗi. Đây là một dấu hiệu tốt vì nó có nghĩa là máy chủ đó đã không lọc yêu cầu. Biểu tượng mà chúng ta gửi đã gây ra lỗi trong SQL.

Bạn có thể tự động hóa quy trình này với Burp Intruder.

2. Tìm ra loại SQL comment hợp lệ

Chúng ta đã có entry point, là giá trị của tham số “category” sau dấu =.

Bây giờ, chúng ta cần học cách kiểm soát điểm nhập này vì nó có thể phá vỡ request SQL hợp lệ.

Việc kiểm soát được thực hiện bằng cách sử dụng comment phù hợp. Tùy thuộc vào kiểu SQL mà có các comment khác nhau. Vì vậy, cách tốt nhất là hãy thử tất cả chúng nhưng hầu hết các cơ sở dữ liệu đều là MSSQL hoặc MySQL. Cách dùng Burp Suite khai thác SQL Injection 25

Comment dấu gạch ngang kép (-) không tạo ra lỗi, vì vậy nó hợp lệ và chúng ta có thể nhập các câu lệnh hợp lệ trước nó.

3. Tìm số hàng trong bảng

Để khai thác cơ sở dữ liệu dễ bị tấn công, trước tiên bạn cần phải tìm cách chuyển các lệnh đến nó. Lưu ý rằng các lệnh trực tiếp không có hiệu lực.

‘ SELECT * FROM information_schema.tables —

Ứng dụng trả về kết quả truy vấn SQL trong các phản hồi của nó, vì vậy có thể sử dụng kiểu tấn công UNION Injection.

Để thực hiện cuộc tấn công UNION, bạn cần xác định số lượng các cột của bảng đang hoạt động.

Số lượng cột: mỗi bảng SQL có một số cột nhất định. Để làm cho cuộc tấn công UNION hoạt động, request sau từ khoá UNION cần phải chứa cùng một lượng cột như bảng đang hoạt động có.

Bảng đang hoạt động: không phải là một thuật ngữ SQL chính thức nhưng mình thích sử dụng nó vì nó phù hợp với cách hoạt động của SQL trên web. Bảng đang hoạt động là bảng được ứng dụng sử dụng để cung cấp các phản hồi dự kiến ​​cho các yêu cầu của người dùng.

Do đó, số lượng cột có thể được xác định bằng cách sử dụng: ORDER BY. Bằng cách tăng số lượng sau nó, chúng ta có thể xác định số lượng cột chính xác.

Bạn sẽ nhận thấy rằng ‘ORDER BY 1 -‘ không tạo ra lỗi nhưng ‘ORDER BY 1 0—‘ thì số lượng cột lớn hơn 1 nhưng nhỏ hơn 10.

Cách dùng Burp Suite khai thác SQL Injection 26

Thử 2 kết quả không có lỗi nhưng cái thứ 3 thì lỗi. Có không quá 3 cột: có đúng 2 cột trong bảng đang hoạt động.

Cách dùng Burp Suite khai thác SQL Injection 27

4. Tìm các cột trả về STRING

Bây giờ, chúng ta đã biết số lượng cột, nhưng chúng ta cần biết những cột nào sẽ cung cấp phản hồi. Chỉ các cột có kiểu dữ liệu CHAR và tương tự mới có thể trả về thông tin con người có thể đọc được.

Điều này có thể được kiểm tra bằng truy vấn UNION SELECT. Nó hoạt động bằng cách kết hợp các kết quả của nhiều câu lệnh select. Câu lệnh select đầu tiên cung cấp thông tin từ bảng đang hoạt động nhưng vì chúng ta hãm truy vấn đầu tiên, nên nó không cung cấp gì cả. Sau UNION là câu lệnh select tiếp theo. Câu lệnh này chỉ là một truy vấn trống nhưng nó nhận được kết quả đầu ra cùng với các kết quả trống từ truy vấn mới nhất.

Nnhập một chuỗi ngẫu nhiên vào mỗi cột:

‘ UNION SELECT ‘a’, ‘b’ —

Cách dùng Burp Suite khai thác SQL Injection 28

Câu trả lời in ra cả a và b. Vì vậy, cả hai cột đều có thể khai thác được.

Hãy sử dụng cột đầu tiên cho phản hồi và vô hiệu hoá cột thứ hai bằng NULL.

Những gì chúng ta cần khi phản hồi là tên bảng, trong điều kiện bình thường sẽ được xác định bằng:

SELECT table_name FROM information_schema.tables

information_schema là một bảng quan trọng trong bất kỳ Cơ sở dữ liệu SQL nào. Nó chứa tất cả tên bảng, cột và những thứ thú vị khác.

Vì vậy, chúng ta  yêu cầu nó cung cấp cho chúng ta tất cả các bảng có thể được lưu trữ trong DB để chúng ta có thể tự tay chọn những bảng phù hợp nhất.

Việc tích hợp truy vấn select ở trên vào câu lệnh UNION SELECT sẽ mang lại:

Cách dùng Burp Suite khai thác SQL Injection 29

Truy vấn được đưa vào sẽ tìm thấy nhiều bảng. Thông thường, bạn sẽ chọn trường Search trong phản hồi của Burp để tìm các từ khóa như admin, users, credentials, passwords

Từ khoá đầu tiên là Administrable_role_authorizations do từ admin có trong nó. Hãy xem tên các cột trong bảng này là gì.

Cách dùng Burp Suite khai thác SQL Injection 30

Không có gì nổi bật… Vì vậy, chúng ta hãy bỏ qua bảng này.

Bảng tiếp theo là users_spkopw do có từ users trong đó.

Cách dùng Burp Suite khai thác SQL Injection 31

Truy vấn tên cột.

Cách dùng Burp Suite khai thác SQL Injection 32

Tốt hơn rồi nè. Hãy xuất nội dung của các cột trong bảng này. Lần này, chúng ta sẽ xuất ra phản hồi trong cả hai cột UNION.

Cách dùng Burp Suite khai thác SQL Injection 33

Có một số thông tin đăng nhập, nhưng quản trị viên là những gì chúng ta cần. Bây giờ hãy truy cập trang login và sử dụng chúng.

Cách dùng Burp Suite khai thác SQL Injection 34

Vậy là thành công rồi đó.

 

Previous Post Next Post