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.
Mục lục
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
What do you think?
It is nice to know your opinion. Leave a comment.