Loading
September 18, 2024By Lo

Sử dụng Macro Burp Suite kiểm thử CSRF Token

Marco là một tính năng trong Burp Suite giúp tự động hóa các bước kiểm thử ứng dụng Web. Chức năng chính của Marco là ghi lại các chuỗi hành động mà người dùng thực hiện sau đó tái hiện lại các hành động này một cách tự động.

Sử dụng Burp Suite Test CSRF

Trong quá trình kiểm thử chắc hẳn chúng ra sẽ phải gặp các HTTP Request kèm theo csrf token, mục đích nó sinh ra là để đảm bảo rằng :

  • Ngăn chặn các cuộc tấn công Cross-Site Request Forgery (CSRF).
  • Xác minh rằng các yêu cầu đến từ người dùng hợp lệ.
  • Các yêu cầu được gửi phải từ phiên làm việc hiện tại của người dùng.
  • Bảo vệ các hành động quan trọng như thay đổi mật khẩu, giao dịch tài chính, hoặc cập nhật thông tin người dùng.

Tàu nhanh qua CSRF Token được sinh ra khi :

  • Người dùng truy cập vào trang web, server sẽ tạo ra một CSRF Token duy nhất cho phiên làm việc của người dùng và gửi nó đến trình duyệt dưới dạng một phần của form HTML hoặc lưu trong cookies.
  • Khi người dùng thực hiện một hành động như gửi form hoặc yêu cầu một thao tác nào đó, CSRF Token sẽ được kèm theo yêu cầu đó (thường là thông qua một trường ẩn trong form hoặc một header trong yêu cầu HTTP).

CSRF có thể nằm trên phía Header của một HTTP Request:

POST /csrf.php HTTP/1.1
Host: localhost
X-CSRF-TOKEN: 7b81f8156b0419d6f8913fbbf5d730696dd44b3e336a1335daa730592c11b330
Origin: <http://localhost>
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: <http://localhost/csrf.php>
Cookie: PHPSESSID=f5ff1208186d8b023c8c7e36161c8e67
Connection: close

username=admin&password=admin

Hoặc nằm dưới phần Body

POST /csrf.php HTTP/1.1
Host: localhost
Origin: <http://localhost>
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: <http://localhost/csrf.php>
Cookie: PHPSESSID=f5ff1208186d8b023c8c7e36161c8e67
Connection: close

username=admin&password=admin&csrf_token=7b81f8156b0419d6f8913fbbf5d730696dd44b3e336a1335daa730592c11b330

Trong bài viết này mình sẽ chia sẻ 1 Case mình gặp trong lúc Pentest BlackBox một Website có sử dụng CSRF Token tại chức năng login.

Macro Burp Suite

Mục tiêu: Sử dụng kỹ thuật Spraying attack để chiếm đoạt tài khoản Cookie

Quan sát HTTP GET Request đầu tiên khi truy cập đến trang login thấy có mã csrf token nằm trong HTTP Response như hình dưới

Sau khi chạy Intruder đến request thứ 16 thấy thông báo “Invalid token, please try again” :

Để thực hiện cuộc tấn công Spaying Attack tại Form Login này mỗi Request chúng ta gửi đi cần phải có 1 mã CSRF Token mới nhất, và luồng hoạt động sẽ chạy lần lượt như sau:

  • Truy cập vào trang login để lấy mã CSRF Token mới
  • Lấy Token ra
  • Sử dụng Token đó để thay thế vào HTTP POST Request login

Ý tưởng sử dụng Marco là:

Cấu hình Macro Burp Suite

Tại Tab Proxy chọn Poxy setting – > Sessions – > Macro– > Add

Chọn HTTP Request GET đến trang login vì tại đây csrf_token mới sẽ được sinh ra, việc của chúng ta bây giờ là tái hiện lại request này để lấy mã CSRF Token mới nhất . Sau đó click OK

Tiếp theo chọn Configure item để xác định vị trí cho Macro lấy giá trị ra sau đó Click Add

Trong phần “Define Custom Parameter” này chúng ta cần bôi đen giá trị của csrf_token để xác định được vị trí cần lấy, rồi Click OK

Tiếp theo đến phần “Session Handling rules”, trong phần này chúng ta sẽ định nghĩa cho Macro chạy ở công cụ nào trong quá trình gửi HTTP Request

Tại tab Details đặt tên cho nó là Role Marcos và phần Rule actions chọn Run a Macro

Click vào tên Macro chúng ta vừa tạo trong trường hợp này là Get CSRF Token, đặc biệt lưu ý ở dưới chúng ta cần tích vào ô “Update only the following parameters and header” nghĩa là nó sẽ chỉ tìm và thay thế giá trị mà ta định nghĩa cho Macro

Click Edit – > thêm tên giá trị cần thay thế – > Add – > Close

Trong tab Scope ta sẽ định nghĩa cho Macro có thể chạy được ở những đâu, ở đây cho chạy trong các tab Target, Intruder và Repeater sau đó click OK

Quay lại Repeater gửi thử một HTTP POST Request Login

Tại tab Logger quan sát sẽ thấy tab Repeater vừa rồi tạo ra 2 HTTP Request:

  • HTTP Request đầu tiên với Method là GET nhiệm vụ là lấy giá trị CSRF token mới nhất
  • HTTP Request tiếp theo với Method POST sẽ lấy giá trị của CSRF Token vừa rồi và gửi đi

Một điều đặc biệt quan trọng cần lưu ý khi sử dụng Macro trong Intruder là tính năng này chỉ tập trung chạy nhiều HTTP Request nhất có thể. Điều này khiến Macro không kịp thời can thiệp để thay đổi giá trị của CSRF Token. Vì vậy, chúng ta cần cho tính năng này chạy chậm lại bằng cách chọn: Resource pool -> Create new resource pool -> tích chọn Maximum concurrent requests với giá trị là 1 (tức là mỗi giây chỉ gửi đi 1 request).

Sau đó Start Attack

Vậy là đã thực hiện tấn công Spraying Attack thành công

svg

What do you think?

It is nice to know your opinion. Leave a comment.

Leave a reply