def createAnyTable(self, table_model, table_number, min_size): _table = JTable(table_model) _table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS) _scrolltable = JScrollPane(_table) _scrolltable.setMinimumSize(min_size) # _table.setMinimumSize(min_size) return _scrolltable
def createButtonPane(self): """Create a new button pane for the message editor tab""" self._button_listener = EditorButtonListener(self) panel = JPanel() panel.setLayout(BoxLayout(panel, BoxLayout.Y_AXIS)) panel.setBorder(EmptyBorder(5, 5, 5, 5)) panel.add(Box.createRigidArea(Dimension(0, 5))) type_scroll_pane = JScrollPane(self._type_list_component) type_scroll_pane.setMaximumSize(Dimension(200, 100)) type_scroll_pane.setMinimumSize(Dimension(150, 100)) panel.add(type_scroll_pane) panel.add(Box.createRigidArea(Dimension(0, 3))) new_type_panel = JPanel() new_type_panel.setLayout(BoxLayout(new_type_panel, BoxLayout.X_AXIS)) new_type_panel.add(self._new_type_field) new_type_panel.add(Box.createRigidArea(Dimension(3, 0))) new_type_panel.add( self.createButton( "New", "new-type", "Save this message's type under a new name" ) ) new_type_panel.setMaximumSize(Dimension(200, 20)) new_type_panel.setMinimumSize(Dimension(150, 20)) panel.add(new_type_panel) button_panel = JPanel() button_panel.setLayout(FlowLayout()) if self._editable: button_panel.add( self.createButton( "Validate", "validate", "Validate the message can be encoded." ) ) button_panel.add( self.createButton("Edit Type", "edit-type", "Edit the message type") ) button_panel.add( self.createButton( "Reset Message", "reset", "Reset the message and undo changes" ) ) button_panel.add( self.createButton( "Clear Type", "clear-type", "Reparse the message with an empty type" ) ) button_panel.setMinimumSize(Dimension(100, 200)) button_panel.setPreferredSize(Dimension(200, 1000)) panel.add(button_panel) return panel
def createAnyTable(self, table_model, table_number, min_size): _table = JTable(table_model) _table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS) for i in range(2): column = _table.getColumnModel().getColumn(i) if i == 0: column.setPreferredWidth(250) else: column.setPreferredWidth(50) _scrolltable = JScrollPane(_table) _scrolltable.setMinimumSize(min_size) return _scrolltable
def showTable(rows, title="Table", column_names=None, dataType=Number, width=400, height=500, showTable=True, windowClosing=None, onCellClickFn=None, onRowClickFn=None): """ rows: list of lists of numbers. title: for the JFrame column_names: list of strings, or None width: defaults to 400 px height: defaults to 500 px showTable: whether to show the JFrame. windowClosing: an optional function to execute when the table's JFrame is closed. onClickCellFn: an optional function to execute when a table's cell is clicked, and receiving 3 args: row index, col index, cell value. onRowCellFn: an optinal function to execute when a table's row is clicked, and receiving as args the whole row. return: a tuple with the JTable and the JFrame """ table_data = DataTable(rows, column_names=column_names, onCellClickFn=onCellClickFn, onRowClickFn=onRowClickFn) table = JTable(table_data) table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) #table.setAutoCreateRowSorter(True) # to sort the view only, not the data in the underlying TableModel sorter = TableRowSorter(table_data) sorter.setComparator(0, Comparator.naturalOrder()) sorter.setComparator(1, Comparator.naturalOrder()) sorter.setComparator(2, Comparator.naturalOrder()) table.setRowSorter(sorter) frame = JFrame(title) if windowClosing is None else JFrame( title, windowClosing=windowClosing) jsp = JScrollPane(table) jsp.setMinimumSize(Dimension(width, height)) frame.getContentPane().add(jsp) def show(): frame.pack() frame.setVisible(True) if showTable: SwingUtilities.invokeLater(show) return table, frame
def __init__(self): self.programs = [] self.setLayout(BoxLayout(self, BoxLayout.PAGE_AXIS)) self.JprogramList = JList() self.JprogramList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) self.JprogramList.addListSelectionListener(self.handle_select) scrollPane = JScrollPane(self.JprogramList) scrollPane.setMinimumSize(Dimension(300, 0)) self.splitPane = SplitPanel(scrollPane, JPanel()) self.add(self.splitPane) context.addon.register_on_connect(self.load_program_list) context.addon.register_on_error(self.display_error)
def __init__(self, title=""): JFrame.__init__(self, title) self.size = 400, 500 self.windowClosing = self.closing label = JLabel(text="Class Name:") label.horizontalAlignment = JLabel.RIGHT tpanel = JPanel(layout=awt.FlowLayout()) self.text = JTextField(20, actionPerformed=self.entered) btn = JButton("Enter", actionPerformed=self.entered) tpanel.add(label) tpanel.add(self.text) tpanel.add(btn) bpanel = JPanel() self.tree = JTree(default_tree()) scrollpane = JScrollPane(self.tree) scrollpane.setMinimumSize(awt.Dimension(200, 200)) scrollpane.setPreferredSize(awt.Dimension(350, 400)) bpanel.add(scrollpane) bag = GridBag(self.contentPane) bag.addRow(tpanel, fill='HORIZONTAL', weightx=1.0, weighty=0.5) bag.addRow(bpanel, fill='BOTH', weightx=0.5, weighty=1.0)
def __init__(self, title=""): JFrame.__init__(self, title) self.size = 400,500 self.windowClosing = self.closing label = JLabel(text="Class Name:") label.horizontalAlignment = JLabel.RIGHT tpanel = JPanel(layout = awt.FlowLayout()) self.text = JTextField(20, actionPerformed = self.entered) btn = JButton("Enter", actionPerformed = self.entered) tpanel.add(label) tpanel.add(self.text) tpanel.add(btn) bpanel = JPanel() self.tree = JTree(default_tree()) scrollpane = JScrollPane(self.tree) scrollpane.setMinimumSize(awt.Dimension(200,200)) scrollpane.setPreferredSize(awt.Dimension(350,400)) bpanel.add(scrollpane) bag = GridBag(self.contentPane) bag.addRow(tpanel, fill='HORIZONTAL', weightx=1.0, weighty=0.5) bag.addRow(bpanel, fill='BOTH', weightx=0.5, weighty=1.0)
all.add(search_field) # Bottom left element: the table, wrapped in a scrollable component table = JTable(TableModel()) table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION) #table.setCellSelectionEnabled(True) table.setAutoCreateRowSorter( True) # to sort the view only, not the data in the underlying TableModel c.gridx = 0 c.gridy = 1 c.anchor = GridBagConstraints.NORTHWEST c.fill = GridBagConstraints.BOTH # resize with the frame c.weightx = 1.0 c.gridheight = 2 jsp = JScrollPane(table) jsp.setMinimumSize(Dimension(400, 500)) gb.setConstraints(jsp, c) all.add(jsp) # Convert from row index in the view (could e.g. be sorted) # to the index in the underlying table model def getSelectedRowIndex(): viewIndex = table.getSelectionModel().getLeadSelectionIndex() modelIndex = table.convertRowIndexToModel(viewIndex) return modelIndex # Top component: a text area showing the full file path to the image in the selected table row c.gridx = 1 c.gridy = 0
class BurpExtender(IBurpExtender, ITab, IHttpListener, IMessageEditorController, AbstractTableModel, IContextMenuInvocation): name = "Blind XSS_" _jTabbedPane = JTabbedPane() _jPanel = JPanel() _jAboutPanel = JPanel() _jPanelConstraints = GridBagConstraints() _jLabelParameters = None _jTextFieldParameters = None _jLabelTechniques = None _jTextFieldURL = None _jLabelFuzzFactor = None _jTextFieldFuzzFactor = None _jLabelAdditionalCmdLine = None _jTextFieldAdditionalCmdLine = None _jButtonSetCommandLine = None _jLabelAbout = None # # implement IBurpExtender # def registerExtenderCallbacks(self, callbacks): # keep a reference to our callbacks object self._callbacks = callbacks # obtain an extension helpers object self._helpers = callbacks.getHelpers() # set our extension name self._callbacks.setExtensionName(self.name) # lists of hosts with querys self._dictPayloads = {} self._dictPayloads_headers = {} self._dictPayloads_params = {} self._dictHeaders = {} self._dictParams = {} self.status_flag = False self.table_flag = 0 self.start_button_text = 'Run proxy' self._layout = GridBagLayout() self._jPanel.setLayout(self._layout) self._jPanel.setBounds(0, 0, 1000, 1000) self._jLabelTechniques = JLabel("Your URL (my.burpcollaborator.net):") self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 0 self._jPanelConstraints.gridy = 1 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 10, 0) self._jPanel.add(self._jLabelTechniques, self._jPanelConstraints) self._jTextFieldURL = JTextField("", 30) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 2 self._jPanelConstraints.gridy = 1 self._jPanelConstraints.gridwidth = 4 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 10, 0) self._jPanel.add(self._jTextFieldURL, self._jPanelConstraints) self._jLabelTechniques = JLabel("Press to start:") self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.anchor = GridBagConstraints.WEST self._jPanelConstraints.gridx = 0 self._jPanelConstraints.gridy = 0 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 10, 0) self._jPanel.add(self._jLabelTechniques, self._jPanelConstraints) self.submitSearchButton = swing.JButton( self.start_button_text, actionPerformed=self.active_flag) self.submitSearchButton.setBackground(Color.WHITE) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 2 self._jPanelConstraints.gridy = 0 self._jPanelConstraints.gridwidth = 4 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 10, 0) self._jPanel.add(self.submitSearchButton, self._jPanelConstraints) self._tableModelPayloads = DefaultTableModel() self._tableModelPayloads.addColumn("Payload") self._tableModelPayloads.addColumn("Using") self._tableModelHeaders = DefaultTableModel() self._tableModelHeaders.addColumn("Header") self._tableModelHeaders.addColumn("Using") self._tableModelParams = DefaultTableModel() self._tableModelParams.addColumn("Parameter") self._tableModelParams.addColumn("Using") self._table = JTable(self._tableModelPayloads) self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS) self._table.getModel().addTableModelListener( MyTableModelListener(self._table, self, 1)) self._scrolltable = JScrollPane(self._table) self._scrolltable.setMinimumSize(Dimension(300, 200)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 0 self._jPanelConstraints.gridy = 2 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 0, 10) self._jPanel.add(self._scrolltable, self._jPanelConstraints) self._table = JTable(self._tableModelHeaders) self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS) self._table.getModel().addTableModelListener( MyTableModelListener(self._table, self, 2)) self._scrolltable = JScrollPane(self._table) self._scrolltable.setMinimumSize(Dimension(300, 200)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 2 self._jPanelConstraints.gridy = 2 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 0, 10) self._jPanel.add(self._scrolltable, self._jPanelConstraints) self._table = JTable(self._tableModelParams) self._table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS) self._table.getModel().addTableModelListener( MyTableModelListener(self._table, self, 3)) self._scrolltable = JScrollPane(self._table) self._scrolltable.setMinimumSize(Dimension(300, 200)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 4 self._jPanelConstraints.gridy = 2 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(0, 0, 0, 0) self._jPanel.add(self._scrolltable, self._jPanelConstraints) addPayloadButton = swing.JButton('Add', actionPerformed=self.addToPayload) addPayloadButton.setBackground(Color.WHITE) addPayloadButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL # self._jPanelConstraints.anchor = GridBagConstraints.CENTER self._jPanelConstraints.gridx = 1 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 10) self._jPanel.add(addPayloadButton, self._jPanelConstraints) deletePayloadButton = swing.JButton( 'Delete', actionPerformed=self.deleteToPayload) deletePayloadButton.setBackground(Color.WHITE) deletePayloadButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 0 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 0) self._jPanel.add(deletePayloadButton, self._jPanelConstraints) addHeaderButton = swing.JButton('Add', actionPerformed=self.addToHeader) addHeaderButton.setBackground(Color.WHITE) addHeaderButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL # self._jPanelConstraints.anchor = GridBagConstraints.CENTER self._jPanelConstraints.gridx = 3 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 10) self._jPanel.add(addHeaderButton, self._jPanelConstraints) deleteHeaderButton = swing.JButton('Delete', actionPerformed=self.deleteToHeader) deleteHeaderButton.setBackground(Color.WHITE) deleteHeaderButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 2 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 0) self._jPanel.add(deleteHeaderButton, self._jPanelConstraints) addParamsButton = swing.JButton('Add', actionPerformed=self.addToParams) addParamsButton.setBackground(Color.WHITE) addParamsButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL # self._jPanelConstraints.anchor = GridBagConstraints.CENTER self._jPanelConstraints.gridx = 5 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 0) self._jPanel.add(addParamsButton, self._jPanelConstraints) deleteParamsButton = swing.JButton('Delete', actionPerformed=self.deleteToParams) deleteParamsButton.setBackground(Color.WHITE) deleteParamsButton.setPreferredSize(Dimension(150, 40)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 4 self._jPanelConstraints.gridy = 3 self._jPanelConstraints.gridwidth = 1 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 0) self._jPanel.add(deleteParamsButton, self._jPanelConstraints) self._resultsTextArea = swing.JTextArea() resultsOutput = swing.JScrollPane(self._resultsTextArea) resultsOutput.setMinimumSize(Dimension(800, 200)) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL self._jPanelConstraints.gridx = 0 self._jPanelConstraints.gridy = 4 self._jPanelConstraints.gridwidth = 6 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(10, 0, 0, 0) self._jPanel.add(resultsOutput, self._jPanelConstraints) self.clearSearchButton = swing.JButton( 'Clear Search Output', actionPerformed=self.clearOutput) self._jPanelConstraints.fill = GridBagConstraints.HORIZONTAL # self._jPanelConstraints.anchor = GridBagConstraints.CENTER self._jPanelConstraints.gridx = 2 self._jPanelConstraints.gridy = 5 self._jPanelConstraints.gridwidth = 2 self._jPanelConstraints.gridheight = 1 self._jPanelConstraints.insets = Insets(3, 0, 0, 0) self._jPanel.add(self.clearSearchButton, self._jPanelConstraints) self._callbacks.customizeUiComponent(self._jPanel) self._callbacks.addSuiteTab(self) # register ourselves as an HTTP listener self._callbacks.registerHttpListener(self) return # def onCheck(self, event): # if self._checkBoxPayload.isSelected() and self.table_flag != 0: # self.table_flag = 0 # self._checkBoxHeader.setSelected(False) # self._checkBoxParam.setSelected(False) # if self._checkBoxHeader.isSelected() and self.table_flag != 1: # self.table_flag = 1 # self._checkBoxParam.setSelected(False) # self._checkBoxPayload.setSelected(False) # if self._checkBoxParam.isSelected() and self.table_flag != 2: # self.table_flag = 2 # self._checkBoxHeader.setSelected(False) # self._checkBoxPayload.setSelected(False) # run Query for Add to Queue Button def addToPayload(self, button): self._tableModelPayloads.insertRow( self._tableModelPayloads.getRowCount(), ['', '']) # self.appendToResults(str(self._tableModelPayloads.getDataVector())) def addToHeader(self, button): self._tableModelHeaders.insertRow( self._tableModelHeaders.getRowCount(), ['', '']) def addToParams(self, button): self._tableModelParams.insertRow(self._tableModelParams.getRowCount(), ['', '']) def deleteToPayload(self, button): self._tableModelPayloads.removeRow( self._tableModelPayloads.getRowCount() - 1) # self.appendToResults(str(self._tableModelPayloads.getDataVector())) def deleteToHeader(self, button): self._tableModelHeaders.removeRow( self._tableModelHeaders.getRowCount() - 1) # self.appendToResults(str(self._tableModelHeaders.getDataVector())) def deleteToParams(self, button): self._tableModelParams.removeRow(self._tableModelParams.getRowCount() - 1) # self.appendToResults(str(self._tableModelParams.getDataVector())) # Clear Queue Function def clearQueue(self, button): table_number = self.table_flag if table_number == 0: data = self._tableModelPayloads.getDataVector() try: self._dictPayloads.pop(data[-1][0]) except Exception: pass self._tableModelPayloads.removeRow( self._tableModelPayloads.getRowCount() - 1) elif table_number == 1: data = self._tableModelHeaders.getDataVector() try: self._dictHeaders.pop(data[-1][0]) except Exception: pass self._tableModelHeaders.removeRow( self._tableModelHeaders.getRowCount() - 1) elif table_number == 2: data = self._tableModelParams.getDataVector() try: self._dictParams.pop(data[-1][0]) except Exception: pass self._tableModelParams.removeRow( self._tableModelParams.getRowCount() - 1) def updateTables(self, button): self._dictPayloads = { x[0]: x[1] for x in self._tableModelPayloads.getDataVector() } self._dictHeaders = { x[0]: x[1] for x in self._tableModelHeaders.getDataVector() } self._dictParams = { x[0]: x[1] for x in self._tableModelParams.getDataVector() } # Clear GUI Output Function def clearOutput(self, button): self._resultsTextArea.setText("") def active_flag(self, button): if not self.status_flag: for idx, key in enumerate(self._dictHeaders): if self._dictHeaders[key] == '1': self._dictPayloads_headers[key] = self._dictHeaders[key] for idx, key in enumerate(self._dictParams): if self._dictParams[key] == '1': self._dictPayloads_params[key] = self._dictParams[key] self.status_flag = True self.submitSearchButton.setBackground(Color.GRAY) self.appendToResults("Proxy start...") elif self.status_flag: self.status_flag = False self.submitSearchButton.setBackground(Color.WHITE) self.appendToResults("Proxy stop...") def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo): try: if not self.status_flag: return # only process requests if not messageIsRequest: return requestString = messageInfo.getRequest().tostring() listHeader = re.findall('([\w-]+):\s?(.*)', requestString) dictRealHeaders = {x[0].lower(): x[1] for x in listHeader} # self.appendToResults(str(self._dictHeaders)) for index, key in enumerate(self._dictPayloads_headers): if key.lower() in dictRealHeaders.keys(): if len(self._dictPayloads.keys()) == 0: pass else: payload = random.choice(self._dictPayloads.keys()) # payload = payload.replace("$HEADER$", self._jTextFieldURL.text, 1) payload = payload.replace("$URL$", self._jTextFieldURL.text, 1) requestString = requestString.replace( dictRealHeaders.get(key.lower()), payload, 1) else: pass listParam = re.findall('[\?|\&]([^=]+)\=([^& ])+', requestString) dictRealParams = {x[0].lower(): x[1] for x in listParam} url = requestString.split(" HTTP/1.") for index, key in enumerate(self._dictPayloads_params): if key.lower() in dictRealParams.keys(): if len(self._dictPayloads.keys()) == 0: pass else: payload = random.choice(self._dictPayloads.keys()) # payload = payload.replace("$PARAM$", self._jTextFieldURL.text, 1) payload = payload.replace("$URL$", self._jTextFieldURL.text, 1) url[0] = url[0].replace( dictRealParams.get(key.lower()), payload, 1) else: pass requestString = "{} HTTP/1.{}".format(url[0], url[1]) self.appendToResults(requestString.encode()) messageInfo.setRequest(requestString.encode()) except Exception as msg: self.appendToResults(msg) # Fnction to provide output to GUI def appendToResults(self, s): """Appends results to the resultsTextArea in a thread safe mannor. Results will be appended in the order that this function is called. """ def appendToResults_run(s): self._resultsTextArea.append(s) self._resultsTextArea.append('\n') swing.SwingUtilities.invokeLater(PyRunnable(appendToResults_run, s)) def getTabCaption(self): return self.name def getUiComponent(self): return self._jPanel