All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.owasp.jbrofuzz.ui.viewers.WindowViewerFrame Maven / Gradle / Ivy

Go to download

JBroFuzz is a stateless web application fuzzer for requests being made over HTTP and/or HTTPS. Its purpose is to provide a single, portable application that offers stable web protocol fuzzing capabilities. As a tool, it emerged from the needs of penetration testing.

There is a newer version: 2.5.1
Show newest version
/**
 * JbroFuzz 2.5
 *
 * JBroFuzz - A stateless network protocol fuzzer for web applications.
 * 
 * Copyright (C) 2007 - 2010 [email protected]
 *
 * This file is part of JBroFuzz.
 * 
 * JBroFuzz is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * JBroFuzz is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with JBroFuzz.  If not, see .
 * Alternatively, write to the Free Software Foundation, Inc., 51 
 * Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 * 
 * Verbatim copying and distribution of this entire program file is 
 * permitted in any medium without royalty provided this notice 
 * is preserved. 
 * 
 */
package org.owasp.jbrofuzz.ui.viewers;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;

import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.BorderFactory;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.KeyStroke;
import javax.swing.SwingWorker;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultHighlighter;
import javax.swing.text.Highlighter;

import org.apache.commons.lang.StringUtils;
import org.owasp.jbrofuzz.JBroFuzz;
import org.owasp.jbrofuzz.fuzz.MessageContainer;
import org.owasp.jbrofuzz.io.FileHandler;
import org.owasp.jbrofuzz.system.Logger;
import org.owasp.jbrofuzz.ui.AbstractPanel;
import org.owasp.jbrofuzz.util.NonWrappingTextPane;
import org.owasp.jbrofuzz.version.ImageCreator;
import org.owasp.jbrofuzz.version.JBroFuzzPrefs;

/**
 * 

* Class extending a JFrame for displaying the contents of a file. * Typically, a file represents a request/response that has been sent * and received. *

* * @author [email protected] * @version 2.3 * @since 0.2 */ public class WindowViewerFrame extends JFrame implements DocumentListener { private static final int SIZE_X = 550; private static final int SIZE_Y = 525; private static final long serialVersionUID = -4765698531680118534L; private final static Color HILIT_COLOR = Color.LIGHT_GRAY; private final static Color ERROR_COLOR = Color.PINK; private final static String CANCEL_ACTION = "cancel-search"; private final Color entryBg; private final transient Highlighter hilit; private final transient Highlighter.HighlightPainter painter; private final JTextPane listTextArea; private final JTextField entry; private final JLabel status; private int lastIndex = 0; /** *

* The window viewer that gets launched for each request within the * corresponding panel. *

* * @param parent The parent panel that the frame will belong to * @param name The full file name of the file location to be opened * * @author [email protected] * @version 2.0 * @since 2.0 */ public WindowViewerFrame(final AbstractPanel parent, final String name) { super("JBroFuzz - File Viewer - " + name); setIconImage(ImageCreator.IMG_FRAME.getImage()); // The container pane final Container pane = getContentPane(); pane.setLayout(new BorderLayout()); // Define the Panel final JPanel listPanel = new JPanel(); listPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory .createTitledBorder(name), BorderFactory .createEmptyBorder(1, 1, 1, 1))); listPanel.setLayout(new BorderLayout()); // Get the preferences for wrapping lines of text final boolean wrapText = JBroFuzz.PREFS.getBoolean(JBroFuzzPrefs.FUZZING[3].getId(), false); if (wrapText) { listTextArea = new JTextPane(); } else { listTextArea = new NonWrappingTextPane(); } // Refine the Text Area listTextArea.setFont(new Font("Monospaced", Font.PLAIN, 12)); listTextArea.setEditable(false); // Define the search area entry = new JTextField(10); status = new JLabel("Enter text to search:"); // Initialise the highlighter on the text area hilit = new DefaultHighlighter(); painter = new DefaultHighlighter.DefaultHighlightPainter(HILIT_COLOR); listTextArea.setHighlighter(hilit); entryBg = entry.getBackground(); entry.getDocument().addDocumentListener(this); final InputMap im = entry.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); final ActionMap am = entry.getActionMap(); im.put(KeyStroke.getKeyStroke("ESCAPE"), CANCEL_ACTION); am.put(CANCEL_ACTION, new CancelAction()); // Right click: Cut, Copy, Paste, Select All AbstractPanel.popupText(listTextArea, false, true, false, true); // Define the Scroll Pane for the Text Area final JScrollPane listTextScrollPane = new JScrollPane(listTextArea); listTextScrollPane.setVerticalScrollBarPolicy(20); listTextScrollPane.setHorizontalScrollBarPolicy(30); // Define the progress bar final JProgressBar progressBar = new JProgressBar(); progressBar.setString(" "); progressBar.setStringPainted(true); // Define the bottom panel with the progress bar final JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 15, 15)); bottomPanel.add(status); bottomPanel.add(entry); bottomPanel.add(progressBar); listTextArea.setCaretPosition(0); // doSyntaxHighlight(); /* listTextArea.setEditorKit(new StyledEditorKit() { private static final long serialVersionUID = -6085642347022880064L; @Override public Document createDefaultDocument() { return new TextHighlighter(); } }); */ listPanel.add(listTextScrollPane); // Global Frame Issues pane.add(listPanel, BorderLayout.CENTER); pane.add(bottomPanel, BorderLayout.SOUTH); this.setLocation(parent.getLocationOnScreen().x + 100, parent.getLocationOnScreen().y + 20); this.setSize(SIZE_X, SIZE_Y); setResizable(true); setVisible(true); setMinimumSize(new Dimension(SIZE_X, SIZE_Y)); setDefaultCloseOperation(2); listTextArea.addKeyListener(new KeyAdapter() { @Override public void keyPressed(final KeyEvent ke) { if (ke.getKeyCode() == 27) { WindowViewerFrame.this.dispose(); } if (ke.getKeyCode() == 10){ search(); } } }); entry.addKeyListener(new KeyAdapter() { @Override public void keyPressed(final KeyEvent ke) { if (ke.getKeyCode() == 10){ search(); } } }); class FileLoader extends SwingWorker { // NO_UCD @Override public String doInBackground() { progressBar.setIndeterminate(true); String dbType = JBroFuzz.PREFS.get(JBroFuzzPrefs.DBSETTINGS[11].getId(), "-1"); if (dbType.equals("SQLite") || dbType.equals("CouchDB") ){ String sessionId = parent.getFrame().getJBroFuzz().getWindow().getPanelFuzzing().getSessionName(); if(sessionId == null || sessionId.equals("null")){ sessionId = JBroFuzz.PREFS.get("sessionId", ""); } Logger.log("Reading Session: " + sessionId + " with name: " + name, 3); MessageContainer mc = parent.getFrame().getJBroFuzz().getStorageHandler().readFuzzFile(name, sessionId, parent.getFrame().getJBroFuzz().getWindow()).get(0); listTextArea.setText( "Date: " + mc.getEndDateFull() + "\n" + "FileName: " + mc.getFileName() + "\n" + "URL: " + mc.getTextURL() + "\n" + "Payload: " + mc.getPayload() + "\n" + "EncodedPayload: " + mc.getEncodedPayload() + "\n" + "TextRequest:" + mc.getTextRequest() + "\n" + "Message: " + mc.getMessage() + "\n" + "Status: " + mc.getStatus() + "\n" ); } else{ Logger.log("Loading data from file",3); final File inputFile = new File(parent.getFrame().getJBroFuzz().getWindow().getPanelFuzzing().getFrame().getJBroFuzz().getStorageHandler().getLocationURIString(), name + ".html"); listTextArea.setText( FileHandler.readFile(inputFile) ); } return "done"; } @Override protected void done() { progressBar.setIndeterminate(false); progressBar.setValue(100); listTextArea.repaint(); } } (new FileLoader()).execute(); } private void search() { hilit.removeAllHighlights(); final String s = entry.getText(); if (s.length() <= 0) { message("Nothing to search"); return; } try { final String content = listTextArea.getDocument().getText(0, listTextArea.getDocument().getLength()); int index = content.indexOf(s, 0); if (lastIndex != 0 && lastIndex >= index){ final int tempIndex = content.indexOf(s, lastIndex +1); index = tempIndex; } if (index >= 0) { // match found final int end = index + s.length(); hilit.addHighlight(index, end, painter); listTextArea.setCaretPosition(index); entry.setBackground(entryBg); message("Phrase found: '" + s + "'"); lastIndex = index; } else if (lastIndex > 0){ entry.setBackground(ERROR_COLOR); message("End reached. Starting from top again..."); lastIndex = 0; } else { entry.setBackground(ERROR_COLOR); message("Phrase not found..."); } } catch (final BadLocationException e) { e.printStackTrace(); } } private void message(String msg) { status.setText(StringUtils.abbreviate(msg, 40)); } // DocumentListener methods public void highlightText(DocumentEvent ev){ } public void insertUpdate(DocumentEvent ev) { search(); } public void removeUpdate(DocumentEvent ev) { search(); } public void changedUpdate(DocumentEvent ev) { search(); } private class CancelAction extends AbstractAction { private static final long serialVersionUID = 9875234L; public void actionPerformed(ActionEvent ev) { hilit.removeAllHighlights(); entry.setText(""); entry.setBackground(entryBg); WindowViewerFrame.this.dispose(); } } } // Frame class




© 2015 - 2024 Weber Informatics LLC | Privacy Policy