- vừa được xem lúc

Biến đổi payload trong Burp Suite nhanh chóng và dễ dàng hơn cùng với extension Hackvertor

0 0 18

Người đăng: Nguyen Anh Tien

Theo Viblo Asia

Mở đầu

Trong thực tế khi thực hiện pentest, sẽ có những trường hợp các payload của chúng ta là không chỉ đơn giản là text, number, json mà cần phải được encode (VD: base64, hex,..), encrypt (VD: AES) thành dạng dữ liệu khác nhau để phù hợp với yêu cầu của server. Một trong những trang cho phép làm điều này một cách nhanh chóng và hỗ trợ nhiều loại nhất là: https://gchq.github.io/CyberChef/. Tuy nhiên, mỗi lần convert thì vẫn phải copy/paste hơi mất công. Với Hackvertor, ta có thể thực hiện ngay trong Burp. Cùng tìm hiểu về Hackvertor thông qua một số use-case dưới đây nhé.

Hackvertor

Hackvertor là một extension cho Burp Suite, được phát triển bởi Gareth Heyes, research của công ty Portswigger Web Security, cũng chính là công ty phát triển ra công cụ Burp Suite. Extension có thể cài đặt trực tiếp từ Extender > BApp Store bên tron Burp Suite hoặc từ trang chủ: https://github.com/hackvertor/hackvertor

Sau khi cài đặt xong thì ở trên menu sẽ xuất hiện thêm menu của Hackvertor:

Ngoài ra các tab của Repeater/Logger sẽ xuất hiện thêm tab Hackvertor:

Click vào tab đây sẽ hiện ra danh sách các category cũng như các function mà Hackvertor hỗ trợ.

Hackvertor có hỗ trợ rất nhiều các kiểu biến đổi, mã hóa khác nhau, từ thông dụng 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,...

Ví dụ thực tế

Case 1: simple tag

Hackvertor is a tag based conversion tool written in Java implemented as a Burp Suite extension. Tags are constructed as follows: <@base64_0><@/base64_0> the @ symbol is used as an identifier that it's a Hackvertor tag followed by the name of the tag in this case base64, the name is then followed by an underscore and a unique tag number.

Hackvertor là công cụ chuyển đổi, cho phép chúng ta biến đổi payload dựa vào các tag đã được định nghĩa sẵn (người dùng cũng có thể custom thêm, mình sẽ nói cụ thể hơn ở phần sau). Tức là, chúng ta sẽ chèn thêm các tag <@base64><@/base64> trước và sau payload cần encode base64 thì khi thực hiện request, Hackvertor sẽ tự động biến đổi giúp chúng ta:

<@base64>your_payload_here<@/base64>

Mình có build 1 server demo bằng Flask, để giúp test xem payload chúng ta đã đẩy lên đúng chưa?

Đây là endpoint đơn giản nhận vào một param p trong POST body và output ra decode base64 của nó.

Để sử dụng Hackvertor thì, ta cần chuyển sang tab Hackvertor, bôi đen vị trí cần biến đổi, rồi chọn tag tương ứng. VD: base64 nằm trong category Encode:

Giao diện của Hackvertor có 2 panel, khi bạn thay đổi payload thì ở panel thứ 2 sẽ hiện ra preview (hoặc error nếu payload chúng ta bị lỗi) rất tiện cho việc debug. Bấm gửi và ta thấy payload đã đúng format và được server chấp nhận.

Hackvertor hỗ trợ rất nhiều func khác nhau, bạn có thể tìm tên các func được hỗ trợ ở trong tab Search của Hackvertor.

Case 2: nested tags

Hackvertor còn hỗ trợ việc nesting (lồng nhau) của các tag. Nghĩa là nếu payload của chúng ta cần phải biến đổi qua một chuỗi các biến đổi từ A -> B -> C thì ta có thể lồng các tag này lại theo đúng thứ tự như trên. VD như endpoint dưới yêu cầu truyền vào payload theo biến đổi:

base64decode(rot13(your_payload_here))

Với trường hợp này chúng ta cần làm ngược lại: base64 -> rot13 -> urlencode

Case 3: with parameters

Các tag của Hackvertor còn có thể nhận vào các tham số, như ở VD trước, hàm rot13 thực chất là hàm rotN và chúng ta có thể thay đổi số 13, tham số đầu vào để có thể rotate với khoảng cách tùy ý.

<@rotN(13)>

Case 4A: custom tag

Cùng đến với một ví dụ khó hơn nữa, đây là trường hợp mô phỏng, payload được truyền lên server sẽ được đi kèm với chữ ký p, giá trị của nó được tính toán dựa trên một hay nhiều tham số truyền vào. Để cho đơn giản thì trong trường hợp này, p được tính toán dựa trên i bằng thuật toán đã biết.

Như ở đầu bài mình có nhắc đến, thì Hackvertor cho phép chúng ta tạo custom tag, nhận các tham số và có thể được viết bằng các ngôn ngữ: Python (cần cài thêm JPython), Java, Javascript và Groovy. Tính năng thực thi code của tag mặc định là tắt nên trước hết, ta cần tích vào Allow code execution tags:

Sau đó chọn vào Create custom tag:

Ở đây ta làm các bước như sau:

  • Điền vào Tag name: khi render ra thì custom tag sẽ có thêm _ ở trước trên, dùng để phân biệt với built-in tag. Ở đây ta chọn tên custom_algo.
  • Lựa chọn ngôn ngữ cho tag. Ở đây mình sẽ dùng Python.
  • Chúng ta có thể truyền tham số cho tag, giống như ở trường hợp rotN ở trên. Tham số có thể là String hoặc là Number. Ví dụ ở đây ta sẽ truyền luôn 2 const 13377331 của thuật toán trên thành 2 tham số tương ứng là ab vào custom tag và đặt làm giá trị mặc định.
  • 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. Dù làm theo cách này thì Hackvertor cũng sẽ định nghĩa sẵn 2 thứ:
    • biến input chính là phần được bọc bên trong <@_custom_algo> là input đầu vào.
    • biến output là kết quả trả ra sau khi thực hiện các biến đổi. Chúng ta sẽ gán giá trị cho biến này.

Với trường hợp này, mình sẽ input code trực tiếp như sau:

z = int(input); output = "arg_" + str(z % a + z * b)

Code xong chúng ta có thể test code với input và các tham số mặc định:

Đã ra đúng giá trị mong muốn. Nếu muốn edit/delete custom tag đã tạo, hãy vào menu Hackvertor > List custom tags nhé. Các custom tag đã tạo cũng sẽ được liệt kê trong tab Custom của Hackvertor.

Case 4B: set and get variables

Trong ví dụ trên, ta đang build được custom tag với output mong muốn và có thể sử dụng như sau:

p=<@_custom_algo(1337,7331,'a3cf964d875593734b05e0d8183735b0')>10<@/_custom_algo>&i=10

phần a3cf964d875593734b05e0d8183735b0 à mã hash ngẫu nhiên được sinh ra để tránh việc các request đi qua proxy của Burp instance này có thể lợi dụng code excution tag thực thi câu lệnh tùy ý trên máy của pentester. Chỉ có custom tag có hash hợp lệ mới chạy được.

Tuy nhiên khi giá trị i thay đổi thì ta cần thay đổi cả ở bên trong nữa. Hackvertor cho phép chúng ta định nghĩa i thành một biến số và ta có thể sử dụng biến này thành input của custom tag:

<@set_variable1('false')>10<@/set_variable1>

sẽ định nghĩa 1 biến variable1 (giá trị mặc định là 'false'). Khi muốn sử dụng biến này ở vị trí khác, ta chỉ cần thêm tag:

<@get_variable1/>

Hackvertor hỗ trợ hơn 10 variables khác nhau

Kết hợp lại chúng ta được kết quả như sau:

Case 5: generic code execution

Đối với những biến đổi phức tạp hơn nữa hoặc cần thư viện riêng thì chúng ta khó có thể sử dụng custom tag, cách tốt hơn là sử dụng tag code execution:

<@python('import subprocess;output = subprocess.check_output("C:/Users/Vigo/Desktop/ysoserial/bin/Debug/ysoserial_frmv2.exe -g ActivitySurrogateSelector -f LosFormatter -o raw -c whoami".split(" "));','d40ebaeea912efb340bd45af227efc5f')><@/python>

Như ví dụ tag ở trên, sẽ thực thi câu lệnh gen payload bằng ysoserial.NET với custom command truyền vào và đưa ra output.

Hoặc build payload cho https://viblo.asia/p/phan-tich-cve-2021-26295-apache-ofbiz-RQqKLGMO57z như minh họa dưới đây:

Kết

Nếu bạn có cách tip & trick nào với Hackvertor có thể comment thêm để chia sẻ cùng mọi người nhé. See ya!

Tham khảo

Bình luận

Bài viết tương tự

- vừa được xem lúc

Một vài mẹo mà mình sử dụng với Burp Suite

Tự sự. Chuyện là có mấy thằng em hỏi mình về cách sử dụng Burp Suite như thế nào, rồi có tips and tricks nào hay hay không cho chúng nó học, tiện đây mình cũng chia sẻ kinh nghiệm của một người sử dụn

0 0 107

- vừa được xem lúc

Burp Suite Cơ Bản - Dò Lỗ Hổng Bảo Mật Trên Ứng Dụng Web

Đây không phải là 300 bài code thiếu nhi hay đại loại vậy, mà mình sẽ nói về BurpSuite - 1 công cụ đắc lực cho tester cũng như pentester. .

0 1 679

- vừa được xem lúc

Cross Site Scripting - Thực Hành Tấn Công XSS

Hêlo mọi người, lại là mình đây. Thì hôm nay mình sẽ bay sang trang lab của Portswigger để thực hành về tấn công XSS, có thể phân tích bằng tay và áp dụng cả BurpSuite vào cho quen tay luôn nha.

0 0 256

- vừa được xem lúc

Một vài mẹo mà mình sử dụng với Burp Suite (phần 2)

Bài này là bài nối tiếp về một bài mà mình đã viết tại Một vài mẹo mà mình sử dụng với Burp Suite. Bài đầu tiên mình đã viết về một vài tips và trick mình hay sử dụng với Burp Suite mặc định rồi, bài

0 0 74

- vừa được xem lúc

My Data My Choice - P1. ElasticBurp

Mở đầu. Trong một lần tình cờ được ngồi nói chuyện với anh Luật ( Founder của CyberJustu ), mình đã được anh chia sẻ rất nhiều vấn đề hay và bị ấn tượng bởi câu hỏi "Bọn em làm gì với đống request sau

0 0 19

- vừa được xem lúc

Golang Data Structures and Algorithms - Stack

Giới thiệu. Series về cấu trúc dữ liệu và thuật toán sử dụng Golang.

0 0 26