SublimeText[1] có lẽ đã rất quen thuộc với những người thường xuyên làm việc với mã nguồn, viết mã. Một trong những điểm cộng cho SublimeText là khả năng mở rộng việc xử lý dữ liệu thông qua các Plugin, các API [2] đều được viết trên nền Python vì vậy người dùng cuối dễ dàng phát triển riêng cho mình các Plugin phục vụ công việc.
Ví dụ khi xem xét một Web-Shell như sau:
Ta sẽ mất vài thao tác để giải mã (decode) đoạn mã độc trên, sử dụng PHP
Hoặc Python
Nếu bạn là một người làm việc trong lĩnh vực bảo mật, chắc chắc bạn đã làm thao tác này rất nhiều lần. Để tiết kiệm thời gian hơn, ta sẽ viết một Plugin giải mã dữ liệu ngay trên SublimeText.
Mục tiêu của Plugin là sau khi chọn đoạn Text, right-click ta sẽ có một menu thực hiện các chức năng sau:
Môi trường phát triển Plugin của tác giả:
Trước tiên, ta sẽ tìm nơi mà SublimeText lưu trữ Plugin trên máy tính, chọn Preferences -> Browse Packages
Trên MacOS mặc định là thư mục /Users/vietsunshine_labs/Library/Application Support/Sublime Text 3/Packages/
Tại đây, ta tạo một thư mục tên myutils, tất cả mã nguồn và thiết lặp cho Plugin sẽ lưu tại đây, SublimeText sẽ liên tục theo dõi thay đổi của thư mục này vào nạp lại Plugin.
Tiếp tục tạo các tập tin trong myutils như sau:
Tập tin main.py: mã nguồn Python của Plugin, nội dung như sau
Trước tiên bạn cần chút kỹ năng về lập trình Python để hiểu đoạn mã trên. Bài viết này chỉ giải thích một số điểm cần chú ý để hiểu cách Plugin hoạt động.
Hai dòng mã đầu tiên:
import sublime
import sublime_plugin
sẽ nạp các API [2] của SublimeText, đây là phần bắt buộc phải có để Plugin hoạt động được.
Mỗi thao yêu cầu xử lý dữ liệu trên SublimeText gọi là một Command, tương ứng với một Function trong Python có quy tắc đặt tên riêng, ví dụ:
class Base64decodeCommand(sublime_plugin.TextCommand):
# …. Mã nguồn chi tiết của Function ….
Function với tên Base64decodeCommand (lưu ý các chữ in hoa) trên sẽ tạo ra một Command trong SublimeText với tên gọi là base64decode (lưu ý là chữ in thường)
Đối với Plugin đang viết, một số khái niệm của SublimeText API [2] cần quan tâm:
– View: cửa sổ đang làm việc
– Edit: dữ liệu Text đang làm việc trên một View
– Selection (viết tắt là Sel): các phần Text đang được chọn. Lưu ý là SublimeText cho chọn nhiều Text ở một thời điểm để xử lý (nhấn Cmd trên MacOS hoặc Ctrl trên Windows/Linux), ví dụ bên dưới ta chọn 4 từ printing, unknow, passages, remaing thì ta sẽ có 4 Selection, mỗi selection này là sẽ chứa thông tin về vị trí Text sẽ xử lý
Khi hiểu những khái niệm này, ta sẽ hiểu được ý nghĩa của từng Function ở trên, lấy Bas64decodeCommand làm ví dụ:
Đoạn mã trên sẽ duyệt từng Selection, trích xuất đoạn Base64 được chọn, chuyển đổi thành Text, sau đó thực hiện replace đoạn Selection ban đầu bằng đoạn Text đã chuyển đổi.
Tập tin Context.sublime-menu: chứa dữ liệu dạng JSON, quy định cách hiển thị các Context Menu và chức năng tương ứng. Nội dung của tập tin này như sau:
Việc định nghĩa ra Context-Menu bằng JSON rất linh hoạt, có thể bao gồm các Sub-menu, thuộc tính “id” là tên duy nhất để định danh cho Menu, thuộc tính “caption” chính là phần sẽ hiển thị khi right-click, “command” chính là Function tương ứng trong tập tin main,py sẽ dược thực thi khi menu được chọn.
Trong quá trình phát triển Plugin có thể sẽ phát sinh lỗi, Sublime có ghi nhận tất cả các lỗi này trên Console. Để mở Console ta chọn View -> Show Console
Sau khi viết mã và tạo context-menu xong thì SublimeText sẽ tự động nạp Plugin, ta có thể thử thao tác với dữ liệu bằng Plugin vừa tạo, quay lại ví dụ về Web-Shell ban đầu
Trên đây là cách tạo ra một một Plugin để phục vụ các thao tác mà tác giả thường gặp trong khi làm việc, bạn đọc có thể tùy biến thêm các Command khác để phục vụ công việc của riêng mình. Đoạn mã trên cũng rất đơn giản, chưa có các bước cài đặt kiểm tra lỗi hoặc làm sạch dữ liệu trước khi xử lý, thực tế Sublime cung cấp rất nhiều API [2] để thực hiện các thao tác phức tạp khác bạn đọc có thể tìm hiểu thêm ở phần tham khảo.
Tham khảo:
[1] https://www.sublimetext.com/
[2] https://www.sublimetext.com/docs/3/api_reference.html
Xem thêm về dịch vụ kiểm thử xâm nhập (Pentest):
https://www.vietsunshine.com.vn/kiem-thu-xam-nhap/