카테고리 없음

ㅎㅎ

1231. 2025. 3. 26. 13:35
from burp import IBurpExtender, IHttpListener, ITab
from javax.swing import JPanel, JButton, JTextField, JLabel, JComboBox, JTable, JScrollPane
from javax.swing.table import DefaultTableModel
from javax.swing import DefaultCellEditor
from java.awt import BorderLayout, FlowLayout

class BurpExtender(IBurpExtender, IHttpListener, ITab):

    def registerExtenderCallbacks(self, callbacks):
        self.callbacks = callbacks
        self.helpers = callbacks.getHelpers()
        callbacks.setExtensionName("Keyword Highlighter Advanced")
        callbacks.registerHttpListener(self)

        # GUI 구성
        self.panel = JPanel(BorderLayout())
        self.top_panel = JPanel(FlowLayout())

        self.keyword_field = JTextField(15)
        self.color_selector = JComboBox(["red", "orange", "yellow", "green", "cyan", "blue", "pink", "magenta", "gray"])
        self.scope_selector = JComboBox(["Request", "Response", "Both"])

        self.add_button = JButton("Add", actionPerformed=self.add_keyword)
        self.delete_button = JButton("Delete Selected", actionPerformed=self.delete_keyword)

        self.top_panel.add(JLabel("Keyword:"))
        self.top_panel.add(self.keyword_field)
        self.top_panel.add(JLabel("Color:"))
        self.top_panel.add(self.color_selector)
        self.top_panel.add(JLabel("Scope:"))
        self.top_panel.add(self.scope_selector)
        self.top_panel.add(self.add_button)
        self.top_panel.add(self.delete_button)

        # 테이블 및 모델
        self.table_model = DefaultTableModel(["Keyword", "Color", "Scope"], 0)
        self.table = JTable(self.table_model)

        # 드롭다운으로 셀 수정 가능하게 설정
        color_editor = DefaultCellEditor(JComboBox(["red", "orange", "yellow", "green", "cyan", "blue", "pink", "magenta", "gray"]))
        scope_editor = DefaultCellEditor(JComboBox(["Request", "Response", "Both"]))
        self.table.getColumnModel().getColumn(1).setCellEditor(color_editor)
        self.table.getColumnModel().getColumn(2).setCellEditor(scope_editor)

        scroll_pane = JScrollPane(self.table)

        self.panel.add(self.top_panel, BorderLayout.NORTH)
        self.panel.add(scroll_pane, BorderLayout.CENTER)

        callbacks.addSuiteTab(self)
        print("Keyword Highlighter Advanced loaded.")

    def getTabCaption(self):
        return "Keyword Highlighter"

    def getUiComponent(self):
        return self.panel

    def add_keyword(self, event):
        keyword = self.keyword_field.getText().strip()
        color = self.color_selector.getSelectedItem()
        scope = self.scope_selector.getSelectedItem()
        if keyword:
            self.table_model.addRow([keyword, color, scope])

    def delete_keyword(self, event):
        selected_row = self.table.getSelectedRow()
        if selected_row != -1:
            self.table_model.removeRow(selected_row)

    def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo):
        if toolFlag != self.callbacks.TOOL_PROXY:
            return

        request = messageInfo.getRequest()
        request_info = self.helpers.analyzeRequest(request)
        request_url = request_info.getUrl().toString()
        request_body = request[request_info.getBodyOffset():].tostring()
        request_content = (request_url + request_body).lower()

        response_content = ""
        if messageInfo.getResponse():
            response = messageInfo.getResponse()
            response_info = self.helpers.analyzeResponse(response)
            response_body = response[response_info.getBodyOffset():].tostring()
            response_content = response_body.lower()

        highlight_color = None

        for row in range(self.table_model.getRowCount()):
            keyword = self.table_model.getValueAt(row, 0).lower()
            color = self.table_model.getValueAt(row, 1).lower()
            scope = self.table_model.getValueAt(row, 2)

            matched = False

            if scope == "Request" and keyword in request_content:
                matched = True
            elif scope == "Response" and keyword in response_content:
                matched = True
            elif scope == "Both" and (keyword in request_content or keyword in response_content):
                matched = True

            if matched:
                print("[+] Keyword matched: '{}' in {}".format(keyword, scope))
                print("    -> Applying highlight color: {}".format(color))
                highlight_color = color
                break

        if highlight_color:
            messageInfo.setHighlight(highlight_color)