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

org.owasp.jbrofuzz.fuzz.io.Save 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.fuzz.io;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.table.TableModel;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.owasp.jbrofuzz.JBroFuzz;
import org.owasp.jbrofuzz.fuzz.ui.FuzzersTableModel;
import org.owasp.jbrofuzz.fuzz.ui.TransformsTableModel;
import org.owasp.jbrofuzz.system.Logger;
import org.owasp.jbrofuzz.ui.JBroFuzzWindow;
import org.owasp.jbrofuzz.util.JBroFuzzFileFilter;
import org.owasp.jbrofuzz.version.JBroFuzzFormat;
import org.owasp.jbrofuzz.version.JBroFuzzPrefs;

public class Save {

	private Save() {
		
	}
	
	/**
	 * 

Method for obtaining a file location, through a * JFileChooser for the user to save a .jbrofuzz file.

* *

In the event of an error or an exception, this * method returns null.

* * @param mWindow * @return */ public static File showSaveDialog(JBroFuzzWindow mWindow) { final String dirString = JBroFuzz.PREFS.get(JBroFuzzPrefs.DIRS[2].getId(), System.getProperty("user.dir")); final File dirLocation = new File(dirString); JFileChooser fChooser; try { if(dirLocation.exists() && dirLocation.isDirectory()) { fChooser = new JFileChooser(dirString); } else { fChooser = new JFileChooser(); } } catch(final SecurityException sException) { fChooser = new JFileChooser(); Logger.log("A security exception occured, while attempting to save as to a directory", 4); } // Set the filter for the file extension fChooser.setFileFilter(new JBroFuzzFileFilter()); // Talk to the user final int retValue = fChooser.showSaveDialog(mWindow); // If there is an approval or selection if(retValue == JFileChooser.APPROVE_OPTION) { File returnFile = fChooser.getSelectedFile(); Logger.log("Saving: " + returnFile.getName(), 1); // final String filePath = returnFile.getAbsolutePath().toLowerCase(); if( ! filePath.endsWith(".jbrofuzz") ) { returnFile = new File(filePath + ".jbrofuzz"); } if( returnFile.exists() ) { final int overwrite = JOptionPane.showConfirmDialog(fChooser, "File already exists. Do you \nwant to replace it?", " JBroFuzz - Save ", JOptionPane.YES_NO_OPTION); // If the user does not want to overwrite, return null if( overwrite == JOptionPane.NO_OPTION) { return null; } } // Before returning the file, set the preference // for the parent directory final String parentDir = returnFile.getParent(); if(parentDir != null) { JBroFuzz.PREFS.put(JBroFuzzPrefs.DIRS[2].getId(), parentDir); } return returnFile; } // If the user cancelled, return nulls return null; } /** *

Method for writing a ".jbrofuzz" file, given the file, the URL * the Request string, the Fuzzers, as well as any specified * transforms.

* * @param The file to which data will be written to. * @param The URL string, as specified in the fuzzing tab. * @param The request string, as specified in the fuzzing tab. * @param The fuzzers, specified in consecutive CSV type lines: * e.g. * * 045-A85-RFC,5,10 * 034-B02-BIN,118,128 * * @param The transforms, specified also in consecutive CSV type lines: * e.g. * * URL UTF-8,111,222 * SHA-1 Hash,FED,THI * */ public static void writeFile(final File outputFile, final String url, final String request, final String fuzzers, final String transforms) { try { final PrintWriter out = new PrintWriter(outputFile); // Write the file out.println("[JBroFuzz]"); out.println(JBroFuzzFormat.VERSION); out.println("[Fuzzing]"); out.println(JBroFuzzFormat.DATE); out.println("[Comment]"); out.println("_"); out.println("[URL]"); out.println(url); out.println("[Request]"); out.println(request); out.println("[Fuzzers]"); out.println(fuzzers); out.println("[Transforms]"); out.println(transforms); out.println("[End]"); if (out.checkError()) { Logger.log("Errors occured while saving", 4); } out.close(); } catch (final FileNotFoundException e) { Logger.log("File Could Not Be Found To Save", 4); } catch (final SecurityException e) { Logger.log("A Security Exception Occured While Saving", 4); } } /** *

Method for writing a ".jbrofuzz" file, given the file, the URL * the Request string, the Fuzzers, as well as any specified * transforms.

* * @param The file we are writing to * @param The main frame where JBroFuzz will get the URL, Request and * other parameters. * * @author [email protected] * @version 2.5 * @since 2.5 */ public static void writeFile(final File outputFile, final JBroFuzzWindow mWindow) { final String url = mWindow.getPanelFuzzing().getTextURL(); final String request = mWindow.getPanelFuzzing().getTextRequest(); final String fuzzers = Save.getTableDataInCSVFormat(mWindow.getPanelFuzzing().getFuzzersPanel().getFuzzersTableModel()); final String transforms = Save.getTableOfTransformsInCSVFormat(mWindow); Save.writeFile(outputFile, url, request, fuzzers, transforms); } /** *

Method for obtaining the CSV output, given a table.

*

No "\n" is written at the end of the final line.

* * @param The TableModel holding the data. * @return * * 1,Plain Text,, * 2,URL UTF-8,graun,ge3dr * * * @author [email protected] * @version 2.5 * @since 2.5 */ public static String getTableDataInCSVFormat(final TableModel inputTableModel) { final StringBuffer output = new StringBuffer(); final int totalRows = inputTableModel.getRowCount(); final int totalColumns = inputTableModel.getColumnCount(); if (totalRows < 1) { return ""; } for (int currentRow = 0; currentRow < totalRows; currentRow++) { for (int currentColumn = 0; currentColumn < totalColumns; currentColumn++) { output.append(inputTableModel.getValueAt(currentRow, currentColumn)); // Append a ',' but not for the last value if (currentColumn != totalColumns - 1) { output.append(','); } } // Append a new line, but not for the last line if (currentRow != totalRows - 1) { output.append('\n'); } } return output.toString(); } /** * @author [email protected] * @since version 2.5 * @param inputTableModel * @return */ public static JSONArray getTableDataInJSON(final TableModel inputTableModel){ JSONArray tableData = new JSONArray(); final int totalRows = inputTableModel.getRowCount() -1; final int totalColumns = inputTableModel.getColumnCount() -1; if (totalRows < 1) { return new JSONArray(); } for (int currentRow = 0; currentRow < totalRows; currentRow++) { for (int currentColumn = 0; currentColumn < totalColumns-1; currentColumn++) { String name = inputTableModel.getColumnName(currentColumn); String value = inputTableModel.getValueAt(currentColumn, currentRow).toString(); String cellString = "{\"" + name + "\":\"" + value + "\"}"; JSONObject cell; try { cell = new JSONObject(cellString); tableData.put(cell); } catch (JSONException e) { e.printStackTrace(); } } } return tableData; } /** *

Method for obtaining the data for the transforms and their corresponding fuzzers * in CSV type format.

*

Examples include:

* * 1,URL Cp1252,QUFB,QkJC * 1,Base64,zqbOps6m,zqbOps6m * 2,SHA-512 Hash,zpHOo86U, * * * @param The main frame where JBroFuzz will get the URL, Request and * other parameters. * * @return e.g. the example above * * @author [email protected] * @version 2.5 * @since 2.5 * */ public static String getTableOfTransformsInCSVFormat(final JBroFuzzWindow mWindow) { FuzzersTableModel inputTableModel = mWindow.getPanelFuzzing().getFuzzersPanel().getFuzzersTableModel(); final StringBuffer output = new StringBuffer(); final int totalFuzzerRows = inputTableModel.getRowCount(); if (totalFuzzerRows < 1) { return ""; } for (int fuzzerRow = 0; fuzzerRow < totalFuzzerRows; fuzzerRow++) { TransformsTableModel encoderRows = mWindow.getPanelFuzzing().getTransformsPanel().getTransforms(fuzzerRow); final int totalEncoderRows = encoderRows.getRowCount(); for (int transformRow = 0; transformRow





© 2015 - 2024 Weber Informatics LLC | Privacy Policy