Guideline Hackvertor

  1. Giới thiệu

Hackvertor là một extension cho Burp Suite, có thể được tải từ BAppstore. Đây là công cụ chuyển đổi, mã hóa, băm … payload trước khi gửi bằng các tag được định nghĩa sẵn (người dùng cũng có thể tự custom tag).

Hackvertor có hỗ trợ rất nhiều các kiểu biến đổi, mã hóa khác nhau như: rot13, base64, base58, hex, url encode, md5, sha1, cho đến phức tạp hơn như AES, hmac_sha1,... hay kể cả một số biến đổi đặc biệt như: random, random_unicode, gzip_compress.

  1. Hướng dẫn sử dụng
  • Vấn đề

Một vài trang web sẽ thực hiện “ký” data trước khi gửi lên server và server sẽ kiểm tra data trước khi xử lý. Sau đây là 1 ví dụ: URL http://14.225.253.243/api.php chỉ nhận hỗ trợ các request POST với “X-Auth-Token” header, header này có dạng như sau:

X-Auth-Token: auth_signature={...}, auth_timestamp={...}, auth_nonce={...}

Với:

  • auth_signature = SHA256(MD5(Request's body) + auth_timestamp + auth_nonce + auth_secret)

  • auth_timestamp : thời gian thực biểu diễn dưới dạng số nguyên (Unix timestamp)

  • auth_nonce : là một chuỗi ngẫu nhiên

  • auth_secret : là một chuỗi bí mật được lưu trữ ở cả phía server và client

→ Để biết được trang web thực hiện “ký” data như nào và bằng thuật toán gì, chúng ta có thể đọc source code hoặc dựa vào documents mà khách hàng cung cấp.

Khi request được gửi, server sẽ kiểm tra body và X-Auth-Token Header của request, nếu được “ký” đúng cách, server sẽ chấp nhận data và tiến hành xử lý.

Còn nếu không được “ký” đúng cách, server sẽ thông báo chữ ký không hợp lệ và từ chối xử lý data.

Điều đó có nghĩ là nếu mỗi lần muốn gửi request với payload, chúng ta sẽ phải tạo lại X-Auth-Token Header theo đúng công thức, như vậy rất mất thời gian.

  • Simple tag

Chúng ta có thể tạo X-Auth-Token bằng các simple tag có sẵn như sau:

  • Biến global auth_secret được tạo như sau:

    Nhập tên biến và giá trị sau đó nhấn create.

    khi cần lấy giá trị của biến global, ta chỉ cần gọi thẻ <@get_tên_biến/>.

Như vậy với mỗi lần gửi request với các payload khác nhau, ta chỉ cần sửa phần body của request, hackvertor sẽ từ gen cho chúng ta X-Auth-Token header hợp lệ.

  • Sử dụng hackvertor cho repeater

Khi cài đặt hackvertor, trong repeater sẽ có thêm 1 tab của hackvertor.

Trong tab hackvertor, request sẽ được chia làm 2 phần, input là nơi ta sử dụng các thẻ của hackvertor, output là kết quả đầu ra của payload trước khi request được gửi.

Từ đây ta có thể tạo X-Auth-Token header bằng các simple tag, sau đó nhấn send, request sẽ được gửi kèm header vừa tạo.

Khi gửi request với các payload khác nhau, phần body sẽ thay đổi liên tục, nên thay vì phải sửa lại phần input trong thẻ <@md5>, ta có thể sử dụng set and get variables của hackvertor.

Ta sẽ sử dụng thẻ <@set_variable1> cho phần body và thẻ <@get_variable1> cho phần input trong thẻ <@md5>.

Như vậy, mỗi khi sửa đổi payload, phần body sẽ tự động được thêm vào thẻ <@md5>.

  • Sử dụng hackvertor cho intruder

Từ request tạo được ở trên, quay lại tab Pretty của repeater, các simple tab đã tạo vẫn còn, gửi request này đến intruder.

Tại intruder chỉ cần add vị trí payload và thực hiện tấn công như thông thường.

  • Sử dụng hackvertor cho Active scan ++

Từ tab Positions của intruder, click chuột phải vào khoảng trắng rồi chọn Scan defined insertion points.

Payload của active scan đã được “ký” và phía server đã chấp nhận payload.

  • Custom tag

Các simple tag của hackvertor có giới hạn và không phải lúc nào cũng dùng được, trong 1 dự án thực tế dưới đây, việc “ký“ data được xử lý như sau:

chuỗi body đã được chuyển đổi thành một đối tượng byte sử dụng mã hóa UTF-8 (body.encode()) trước khi được băm bằng SHA256, sau đó kết quả của hàm băm SHA256 sẽ được biểu diễn dưới dạng nhị phân rồi mới tiếp tục được mã hóa base64 và URLEncode. Tag <@sha256> của hackvertor lại có output mặc định được biểu diễn dưới dạnh thập lục phân . Để giải quyết vấn đề này ta sẽ tự custom tag.

Đầu tiên tick vào Allow code execution tags, sau đó chọn Create custom tag.

Tiến hành custom 1 tag mới.

  • Điền vào Tag name: khi render ra thì custom tag sẽ có thêm _ ở trước trên.

  • Lựa chọn ngôn ngữ cho tag.

  • Truyền tham số cho tag (có thể bỏ qua)

  • Phần code chúng ta có 2 cách:

    • Chỉ đường dẫn đến một file code (.js, .java, .groovy, .py) ở bên ngoài. Burp sẽ thực thi file code này.

    • Điền trực tiếp code vào.

  • Hackvertor cũng sẽ định nghĩa sẵn 2 biến sau trong code:

    • biến input chính là phần được bọc bên trong thẻ custom <@_test> , là input đầu vào.

    • biến output là kết quả trả về sau khi thực hiện các biến đổi. Chúng ta sẽ gán giá trị cho biến này

Click Test tag và nhập input, tag đã hoạt động.

Quay lại ví dụ đầu tiên, code một đoạn mã python để thực hiện băm phần body theo công thức mà server đã define.

Copy code vào phần custom tag của hackvertor, sửa lại các biến input và output.

Test thử tag.

Lưu lại tag, giờ thử gửi request với tag vừa tạo, sử dụng set variable cho phần body để làm input đầu vào cho tag.