/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package uk.co.pentest.psychoPATH; import burp.IHttpRequestResponse; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.JFileChooser; import javax.swing.JList; import javax.swing.ListModel; import javax.swing.ListSelectionModel; import javax.swing.JOptionPane; //import IntruderPayloadGenerator; /* import javax.swing.JComboBox; import java.awt.event.ItemEvent; import burp.IScanIssue; import burp.BinaryPayloadIssue; import burp.BuildUnencodedRequest; import burp.DirectScannerCheck; */ /** * * @author julian */ public class PsychoPanel2 extends javax.swing.JPanel { /** * Creates new form psychoPanel2 */ protected boolean addFilePrefix=false; // whether to include file:/// in front of the absolute paths protected int defaultMaxTraversalsPerPayload=18; protected int maxTraversalsPerPayload=18; // the number of maximum traversals in our payloads - used to pick the longest ones while optimizing - later we'll just calculate this value on the fly protected boolean optimizeDocroots=true; // whether to only prepend docroots with the longest versions of traversals protected boolean evasiveTechniques=true; protected boolean optimizeLFI=false; // whether to only prepend the filename with the longest versions of traversals when in LFI mode protected boolean LFImode=true; // whether we are in the LFI hunting mode - whether or not to use webroots at all protected boolean useAbsoluteWebroots=true; public boolean scannerChecks=true; protected String byteGeneratorRange; protected String editorFormat="HEX"; protected String proto="https"; protected String hostname="example.org"; protected ArrayList<String> genericSuffixes; protected ArrayList<String> payloads; // used by save to file/copy to clipboard features protected String[] defaultBreakups = {"20"}; // by default the only {BREAK} string is a white space (20 asciihex) protected String[] nonRecurrentEvasiveTraversals = {"....//", "...//", ".....///"}; protected String[] mixedSlashEvasiveTraversals = {"...\\./", ".../.\\"}; protected String[] breakupHolderTraversals = {".{BREAK}.{BREAK}/","..{BREAK}/","{BREAK}../",".{BREAK}./","../{BREAK}"}; // currently the only break-up char is space; we'll make this customizable as well // other, yet not supported variants (might be added later) // break up holders mixed with non-recurrent filters // non-recurrent filter cases with mixed win-nix slashes // non-recurrent filter cases with mixed win-nix slashes mixed with break-up character protected String slashesToUse="all"; // possible values: nix,win,all protected int[] encodingsEnabled={0}; PrintWriter stdout; protected String[] universalDocroots = { "/var/www", "/usr/local/httpd", "/usr/local/www", "/usr/local/httpd/{TARGET}", "/usr/local/www/{TARGET}", "/srv/www", "/var/www/html", "/var/www/{TARGET}", "/srv/www/{TARGET}", "/var/www/html/{TARGET}", "/var/www/vhosts/{TARGET}", "/var/www/virtual/{TARGET}", "/var/www/clients/vhosts/{TARGET}", "/var/www/clients/virtual/{TARGET}"}; protected String[] nginxDocroots = {"/var/www/nginx-default"}; protected String[] apacheDocroots = { "/usr/local/apache", "/usr/local/apache2", "/usr/local/apache/{TARGET}", "/usr/local/apache2/{TARGET}", "/usr/local/www/apache/{TARGET}", "/usr/local/www/apache24/{TARGET}", "/usr/local/{TARGET}/apache/www/apache22/{TARGET}", "/usr/local/apache/www/apache22/{TARGET}", "/usr/local/{TARGET}/apache/www/apache22/{TARGET}"}; protected String[] tomcatDocroots = { "/usr/local/tomcat/webapps/{TARGET}", "/usr/local/tomcat01/webapps/{TARGET}", "/usr/local/tomcat02/webapps/{TARGET}", "/opt/tomcat5/{TARGET}", "/opt/tomcat6/{TARGET}", "/opt/tomcat7/{TARGET}", "/opt/tomcat8/{TARGET}", "/opt/tomcat5/webapps/{TARGET}", "/opt/tomcat6/webapps/{TARGET}", "/opt/tomcat7/webapps/{TARGET}", "/opt/tomcat8/webapps/{TARGET}", "/opt/tomcat5/webapps", "/opt/tomcat6/webapps", "/opt/tomcat7/webapps", "/opt/tomcat8/webapps", "/var/lib/tomcat7/webapps", "/var/lib/tomcat7/webapps/{TARGET}", "/var/lib/tomcat8/webapps", "/var/lib/tomcat8/webapps/{TARGET}"}; protected String[] windowsDocroots = { "C:/xampp", "C:/Program Files/xampp", "C:/wamp", "C:/Program Files/wampp", "C:/apache", "C:/Program Files/Apache Group/Apache", "C:/Program Files/Apache Group/Apache2", "C:/Program Files/Apache Group/Apache2.2", "C:/Program Files/Apache Group/Apache2.4", "C:/Inetpub/wwwroot", "C:/Inetpub/vhosts/", "C:/Inetpub/wwwroot/{TARGET}", "C:/Inetpub/vhosts/{TARGET}", "C:/{TARGET}", // these last four will require some additional sculpture to support alternative drive letters "\\\\.\\GLOBALROOT\\Device\\HArddiskVolume1\\", "\\\\?\\localhost\\c$\\", "\\\\127.0.0.1\\C$\\", "file:///c:\\\\" }; public void updateScope(String proto, String hostname) { this.proto=proto; this.hostname=hostname; // ok, now we update the targets ArrayList<String> newList = new ArrayList<String>(); newList.add(hostname); // if hostname is not an IP address - but contains dots, it is a domain name String ipPattern = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; Pattern pattern = Pattern.compile(ipPattern); Matcher matcher = pattern.matcher(hostname); if(!matcher.matches()) { // in such case split the string by dots, remove the tld // and propagate the list String[] parts = hostname.split("."); for(int i=0;i<parts.length-1;i++) { newList.add(parts[i]); } } // propagate the list to the interface String[] newListArr = new String[newList.size()]; // normal (String[])newList.toArray() stopped working, leading to unexpected results with no exceptions thrown for(int i=0;i<newListArr.length;i++) { newListArr[i]=newList.get(i); logOutput("New target "+newListArr[i]+" to be propagated."); } appendListData(targetsList,newListArr); targetsList.setListData(newListArr); // had to declare the arrary first to avoid the "undefined behavior" (mention in the manual) we were experiencing when passing the inline returned value directly // now is the time to update suffixes genericSuffixes.clear(); IHttpRequestResponse[] items = PsychoPATH.callbacks.getSiteMap(proto+"://"+hostname); for(int i=0;i<items.length;i++) { if(items[i].getStatusCode()==404) { continue; } // skipping 404s might not be a good idea - some servers return 404s for existing directories when no deeper existing URI is requested String path=PsychoPATH.callbacks.getHelpers().analyzeRequest(items[i]).getUrl().getPath(); path=path.substring(0,path.lastIndexOf("/")); if(!genericSuffixes.contains(path)) { genericSuffixes.add(path); } } // we propagate the list to the GUI, so it can be adjusted before the attack String[] arr; arr = new String[genericSuffixes.size()]; for(int i =0;i<genericSuffixes.size();i++) { arr[i]=genericSuffixes.get(i); } appendListData(suffixesList,arr); // we cannot cast, we'll just merge // for some reason this no longer updates in the UI... still works, but it looks like it didn't... // the genericSuffixes list will, in turn, be used by the directory checker logic of the IntruderPayloadGenerator if(hostname!="example.org") this.logOutput("Scope propagated.\n"); } protected void appendListData(JList list, String[] items) { ArrayList tmp = new ArrayList(); for (int i=0; i < list.getModel().getSize(); i++) { String elem = (String) list.getModel().getElementAt(i); tmp.add(elem); } for(String item: items) { if(!tmp.contains(item)) tmp.add(item); } list.setListData(tmp.toArray()); } private void removeFromListData(JList list, String item) { ArrayList tmp = new ArrayList(); for (int i=0; i < list.getModel().getSize(); i++) { String elem = (String) list.getModel().getElementAt(i); if(!elem.equals(item)) tmp.add(elem); } list.setListData(tmp.toArray()); } private void initiateEvasiveList() { appendListData(evasiveList,this.nonRecurrentEvasiveTraversals); String n[]={this.breakupHolderTraversals[0]}; appendListData(evasiveList,n); this.evasiveTechniques=true; } private void disableEvasiveTechniques() { String [] empty = {}; evasiveList.setListData(empty); //for some weird reason removeAll did not want to work. this.evasiveTechniques=false; } private void clearBreakups() { String [] empty={}; breakupList.setListData(empty); // if breakup-list is empty, break-up payloads are ignored // additionally, we could search the list and remove elements with the {BREAK} holder } private void initiateBreakups() { appendListData(breakupList,this.defaultBreakups); } private void initiateEncodings() // same as clear, no encoding by default { //String empty[] = {"None"}; //encodeList.setListData(empty); } private void clearDrives() { String [] empty={}; drivesList.setListData(empty); } private void enableLFIMode() { LFImode=true; LFIOptimizeCheckBox.setEnabled(true); LFIOptimizeCheckBox.setSelected(true); optimizeLFI=true; optimizeDocrootTraversalsBox.setEnabled(false); useAbsoluteWebrootsBox.setEnabled(false); //LFIModeCheckBox.setEnabled(true); LFIModeCheckBox.setSelected(true); drivesList.setEnabled(false); windowsDrivesToUse.setEnabled(false); } private void disableLFIMode() { LFImode=false; LFIOptimizeCheckBox.setEnabled(false); optimizeDocrootTraversalsBox.setEnabled(true); useAbsoluteWebrootsBox.setEnabled(true); LFIModeCheckBox.setSelected(false); if(useAbsoluteWebroots) { drivesList.setEnabled(true); windowsDrivesToUse.setEnabled(true); } } public int payloadCount() { int cnt=0; return 0; } public void logOutput(String msg) { //this.logOutput.append(msg); stdout.println(msg); } protected void enableScannerChecks() { scannerChecksCheckbox.setSelected(true); this.scannerChecks=true; } protected void disableScannerChecks() { scannerChecksCheckbox.setSelected(false); this.scannerChecks=false; } public PsychoPanel2() { // auto-generated init: initComponents(); // more custom init, default settings stdout = new PrintWriter(PsychoPATH.callbacks.getStdout(), true); genericSuffixes=new ArrayList<>(); this.byteGeneratorRange="non-alpha"; enableLFIMode(); initiateEvasiveList(); // enable evasive techniques enableScannerChecks(); evasiveList.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); evasiveList.setLayoutOrientation(JList.VERTICAL); evasiveList.setVisibleRowCount(10); breakupHexFormat.setSelected(true); breakupASCIIFormat.setSelected(false); optimizeDocrootTraversalsBox.setSelected(true); useTerminatorsCheckBox.setSelected(true); mixEncodingsCheckBox.setSelected(true); encodingsEnabled=new int[6]; encodingsEnabled[0]=1; // RAW is always enabled rawEncodingCheckbox.setSelected(true); rawEncodingCheckbox.setEnabled(false); noLiteralNullbyte.setSelected(true); // these are configurable urlEncode.setSelected(true); encodingsEnabled[1]=1; doubleUrlEncode.setSelected(false); encodingsEnabled[2]=0; utfEncode.setSelected(false); encodingsEnabled[3]=0; overlong2.setSelected(false); encodingsEnabled[4]=0; overlong3.setSelected(false); encodingsEnabled[5]=0; //maxTraversalsPerPayloadSpinner. maxTraversalsPerPayloadSpinner.setValue(this.defaultMaxTraversalsPerPayload); //maxTraversalsPerPayloadSpininer } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLabel7 = new javax.swing.JLabel(); jTabbedPane1 = new javax.swing.JTabbedPane(); globalSettingsPanel = new javax.swing.JPanel(); scannerChecksCheckbox = new javax.swing.JCheckBox(); jScrollPane4 = new javax.swing.JScrollPane(); fileNameField = new javax.swing.JTextPane(); jLabel4 = new javax.swing.JLabel(); jLabel14 = new javax.swing.JLabel(); jLabel15 = new javax.swing.JLabel(); jLabel16 = new javax.swing.JLabel(); jScrollPane12 = new javax.swing.JScrollPane(); nixFileName = new javax.swing.JTextPane(); jScrollPane13 = new javax.swing.JScrollPane(); scannerMatchRules = new javax.swing.JList<>(); jLabel18 = new javax.swing.JLabel(); jScrollPane14 = new javax.swing.JScrollPane(); winFileName = new javax.swing.JTextPane(); jLabel19 = new javax.swing.JLabel(); newMatchRule = new javax.swing.JTextField(); jButton2 = new javax.swing.JButton(); jButton3 = new javax.swing.JButton(); jLabel20 = new javax.swing.JLabel(); targetOS = new javax.swing.JComboBox<>(); webrootOptionsPanel = new javax.swing.JPanel(); optimizeDocrootTraversalsBox = new javax.swing.JCheckBox(); jTabbedPane2 = new javax.swing.JTabbedPane(); jPanel6 = new javax.swing.JPanel(); jScrollPane7 = new javax.swing.JScrollPane(); suffixesList = new javax.swing.JList<>(); suffixPasteButton = new javax.swing.JButton(); suffixLoadButton = new javax.swing.JButton(); suffixRemoveButton = new javax.swing.JButton(); suffixClearButton = new javax.swing.JButton(); suffixAddButton = new javax.swing.JButton(); jScrollPane8 = new javax.swing.JScrollPane(); suffixAddField = new javax.swing.JTextPane(); jPanel7 = new javax.swing.JPanel(); jScrollPane5 = new javax.swing.JScrollPane(); targetsList = new javax.swing.JList<>(); targetPasteButton = new javax.swing.JButton(); targetLoadButton = new javax.swing.JButton(); targetRemoveButton = new javax.swing.JButton(); targetClearButton = new javax.swing.JButton(); targetAddButton = new javax.swing.JButton(); jScrollPane6 = new javax.swing.JScrollPane(); addTargetField = new javax.swing.JTextPane(); jPanel5 = new javax.swing.JPanel(); jScrollPane9 = new javax.swing.JScrollPane(); docrootsList = new javax.swing.JList<>(); webrootPasteButton = new javax.swing.JButton(); webrootLoadButton = new javax.swing.JButton(); webrootRemoveButton = new javax.swing.JButton(); webrootCLearButton = new javax.swing.JButton(); webrootAddButton = new javax.swing.JButton(); jScrollPane10 = new javax.swing.JScrollPane(); webrootAddField = new javax.swing.JTextPane(); docrootsAddLists = new javax.swing.JComboBox<>(); windowsDrivesToUse = new javax.swing.JComboBox<>(); jLabel1 = new javax.swing.JLabel(); jScrollPane11 = new javax.swing.JScrollPane(); drivesList = new javax.swing.JList<>(); jButton16 = new javax.swing.JButton(); jButton17 = new javax.swing.JButton(); jLabel9 = new javax.swing.JLabel(); traversalOptionsPanel = new javax.swing.JPanel(); slashesToUseCombo = new javax.swing.JComboBox<>(); useAbsoluteWebrootsBox = new javax.swing.JCheckBox(); LFIModeCheckBox = new javax.swing.JCheckBox(); LFIOptimizeCheckBox = new javax.swing.JCheckBox(); jLabel2 = new javax.swing.JLabel(); jLabel10 = new javax.swing.JLabel(); maxTraversalsPerPayloadSpinner = new javax.swing.JSpinner(); evasiveTechniquesPanel = new javax.swing.JPanel(); jScrollPane2 = new javax.swing.JScrollPane(); evasiveList = new javax.swing.JList<>(); evasiveTechniquesSetToAdd = new javax.swing.JComboBox<>(); jScrollPane3 = new javax.swing.JScrollPane(); breakupList = new javax.swing.JList<>(); mixEncodingsCheckBox = new javax.swing.JCheckBox(); rawEncodingCheckbox = new javax.swing.JCheckBox(); urlEncode = new javax.swing.JCheckBox(); doubleUrlEncode = new javax.swing.JCheckBox(); utfEncode = new javax.swing.JCheckBox(); overlong3 = new javax.swing.JCheckBox(); jLabel6 = new javax.swing.JLabel(); jLabel8 = new javax.swing.JLabel(); addBreakupField = new javax.swing.JTextField(); addBreakupButton = new javax.swing.JButton(); breakupASCIIFormat = new javax.swing.JRadioButton(); breakupHexFormat = new javax.swing.JRadioButton(); jLabel11 = new javax.swing.JLabel(); useTerminatorsCheckBox = new javax.swing.JCheckBox(); overlong2 = new javax.swing.JCheckBox(); jLabel12 = new javax.swing.JLabel(); removeSelectedEvasive = new javax.swing.JButton(); jButton1 = new javax.swing.JButton(); urlEncodeUtf = new javax.swing.JCheckBox(); terminateAllBox = new javax.swing.JCheckBox(); noLiteralNullbyte = new javax.swing.JCheckBox(); savePayloadsPanel = new javax.swing.JPanel(); jLabel13 = new javax.swing.JLabel(); saveToFileButton = new javax.swing.JButton(); copyToClipboardButton = new javax.swing.JButton(); byteGeneratorPanel = new javax.swing.JPanel(); jLabel5 = new javax.swing.JLabel(); byteGeneratorRangeCombo = new javax.swing.JComboBox<>(); jLabel7.setText("jLabel7"); scannerChecksCheckbox.setText("Enable Scanner checks"); scannerChecksCheckbox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { scannerChecksCheckboxActionPerformed(evt); } }); fileNameField.setText("etc/passwd"); jScrollPane4.setViewportView(fileNameField); jLabel4.setText("File name (win):"); jLabel14.setText("Intruder "); jLabel14.setToolTipText(""); jLabel15.setText("Scanner"); jLabel16.setText("File name:"); nixFileName.setText("etc/passwd"); jScrollPane12.setViewportView(nixFileName); scannerMatchRules.setModel(new javax.swing.AbstractListModel<String>() { String[] strings = { "root:x:", "root:$", "[mci extensions]" }; public int getSize() { return strings.length; } public String getElementAt(int i) { return strings[i]; } }); jScrollPane13.setViewportView(scannerMatchRules); jLabel18.setText("Scanner literal match rules:"); winFileName.setText("win.ini"); jScrollPane14.setViewportView(winFileName); jLabel19.setText("File name (nix):"); jButton2.setText("Add"); jButton2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt); } }); jButton3.setText("Remove selected"); jButton3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton3ActionPerformed(evt); } }); jLabel20.setText("Target OS:"); targetOS.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "all", "win", "nix" })); javax.swing.GroupLayout globalSettingsPanelLayout = new javax.swing.GroupLayout(globalSettingsPanel); globalSettingsPanel.setLayout(globalSettingsPanelLayout); globalSettingsPanelLayout.setHorizontalGroup( globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(globalSettingsPanelLayout.createSequentialGroup() .addGap(24, 24, 24) .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(globalSettingsPanelLayout.createSequentialGroup() .addComponent(jScrollPane13, javax.swing.GroupLayout.PREFERRED_SIZE, 454, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(31, 31, 31) .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(newMatchRule) .addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, 179, Short.MAX_VALUE)) .addGap(640, 640, 640)) .addGroup(globalSettingsPanelLayout.createSequentialGroup() .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel18, javax.swing.GroupLayout.PREFERRED_SIZE, 454, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(scannerChecksCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 553, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 1030, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(globalSettingsPanelLayout.createSequentialGroup() .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel20, javax.swing.GroupLayout.PREFERRED_SIZE, 254, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel19, javax.swing.GroupLayout.PREFERRED_SIZE, 198, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 194, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane14, javax.swing.GroupLayout.PREFERRED_SIZE, 444, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jScrollPane12, javax.swing.GroupLayout.PREFERRED_SIZE, 444, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(targetOS, javax.swing.GroupLayout.PREFERRED_SIZE, 134, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(globalSettingsPanelLayout.createSequentialGroup() .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 1030, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(globalSettingsPanelLayout.createSequentialGroup() .addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 133, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, 446, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) ); globalSettingsPanelLayout.setVerticalGroup( globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(globalSettingsPanelLayout.createSequentialGroup() .addComponent(jLabel14, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel16, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(28, 28, 28) .addComponent(jLabel15, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(scannerChecksCheckbox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel20, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(targetOS, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(globalSettingsPanelLayout.createSequentialGroup() .addComponent(jScrollPane12, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jScrollPane14, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(globalSettingsPanelLayout.createSequentialGroup() .addComponent(jLabel19, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(globalSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(globalSettingsPanelLayout.createSequentialGroup() .addGap(44, 44, 44) .addComponent(newMatchRule, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(12, 12, 12) .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jButton3, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(globalSettingsPanelLayout.createSequentialGroup() .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel18) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane13, javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(400, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Global settings", globalSettingsPanel); optimizeDocrootTraversalsBox.setText("Optimize webroot payloads"); optimizeDocrootTraversalsBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { optimizeDocrootTraversalsBoxActionPerformed(evt); } }); jScrollPane7.setViewportView(suffixesList); suffixPasteButton.setText("Paste"); suffixPasteButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { suffixPasteButtonActionPerformed(evt); } }); suffixLoadButton.setText("Load"); suffixLoadButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { suffixLoadButtonActionPerformed(evt); } }); suffixRemoveButton.setText("Remove"); suffixRemoveButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { suffixRemoveButtonActionPerformed(evt); } }); suffixClearButton.setText("Clear"); suffixClearButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { suffixClearButtonActionPerformed(evt); } }); suffixAddButton.setText("Add"); suffixAddButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { suffixAddButtonActionPerformed(evt); } }); jScrollPane8.setViewportView(suffixAddField); javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); jPanel6.setLayout(jPanel6Layout); jPanel6Layout.setHorizontalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(jPanel6Layout.createSequentialGroup() .addComponent(suffixPasteButton, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(54, 54, 54) .addComponent(suffixLoadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(suffixRemoveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(27, 27, 27) .addComponent(suffixClearButton, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 619, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel6Layout.createSequentialGroup() .addComponent(suffixAddButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, 527, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel6Layout.setVerticalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(suffixPasteButton) .addComponent(suffixLoadButton) .addComponent(suffixRemoveButton) .addComponent(suffixClearButton)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane7, javax.swing.GroupLayout.PREFERRED_SIZE, 299, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(suffixAddButton) .addComponent(jScrollPane8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jTabbedPane2.addTab("Relative directories (\"suffixes\")", jPanel6); targetsList.setModel(new javax.swing.AbstractListModel<String>() { String[] strings = { "example.org" }; public int getSize() { return strings.length; } public String getElementAt(int i) { return strings[i]; } }); jScrollPane5.setViewportView(targetsList); targetsList.getAccessibleContext().setAccessibleName("targetsList"); targetPasteButton.setText("Paste"); targetPasteButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { targetPasteButtonActionPerformed(evt); } }); targetLoadButton.setText("Load"); targetLoadButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { targetLoadButtonActionPerformed(evt); } }); targetRemoveButton.setText("Remove"); targetRemoveButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { targetRemoveButtonActionPerformed(evt); } }); targetClearButton.setText("Clear"); targetClearButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { targetClearButtonActionPerformed(evt); } }); targetAddButton.setText("Add"); targetAddButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { targetAddButtonActionPerformed(evt); } }); jScrollPane6.setViewportView(addTargetField); javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7); jPanel7.setLayout(jPanel7Layout); jPanel7Layout.setHorizontalGroup( jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel7Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(jPanel7Layout.createSequentialGroup() .addComponent(targetPasteButton, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(41, 41, 41) .addComponent(targetLoadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(targetRemoveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 131, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(targetClearButton, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 608, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel7Layout.createSequentialGroup() .addComponent(targetAddButton, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jScrollPane6, javax.swing.GroupLayout.PREFERRED_SIZE, 500, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel7Layout.setVerticalGroup( jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel7Layout.createSequentialGroup() .addGap(7, 7, 7) .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(targetPasteButton) .addComponent(targetLoadButton) .addComponent(targetRemoveButton) .addComponent(targetClearButton)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane5, javax.swing.GroupLayout.PREFERRED_SIZE, 292, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(targetAddButton) .addComponent(jScrollPane6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jTabbedPane2.addTab("Targets", jPanel7); docrootsList.setModel(new javax.swing.AbstractListModel<String>() { String[] strings = { "/var/www", "/usr/local/httpd", "/usr/local/www", "/usr/local/httpd/{TARGET}", "/usr/local/www/{TARGET}", "/srv/www", "/var/www/html", "/var/www/{TARGET}", "/srv/www/{TARGET}", "/var/www/html/{TARGET}", "/var/www/vhosts/{TARGET}", "/var/www/virtual/{TARGET}", "/var/www/clients/vhosts/{TARGET}", "/var/www/clients/virtual/{TARGET}", "/usr/local/apache", "/usr/local/apache2", "/usr/local/apache/{TARGET}", "/usr/local/apache2/{TARGET}", "/usr/local/www/apache/{TARGET}", "/usr/local/www/apache24/{TARGET}", "/usr/local/{TARGET}/apache/www/apache22/{TARGET}", "/usr/local/apache/www/apache22/{TARGET}" }; public int getSize() { return strings.length; } public String getElementAt(int i) { return strings[i]; } }); jScrollPane9.setViewportView(docrootsList); webrootPasteButton.setText("Paste"); webrootPasteButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { webrootPasteButtonActionPerformed(evt); } }); webrootLoadButton.setText("Load"); webrootLoadButton.setToolTipText(""); webrootLoadButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { webrootLoadButtonActionPerformed(evt); } }); webrootRemoveButton.setText("Remove"); webrootRemoveButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { webrootRemoveButtonActionPerformed(evt); } }); webrootCLearButton.setText("Clear"); webrootCLearButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { webrootCLearButtonActionPerformed(evt); } }); webrootAddButton.setText("Add"); webrootAddButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { webrootAddButtonActionPerformed(evt); } }); jScrollPane10.setViewportView(webrootAddField); docrootsAddLists.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Universal", "Nginx", "Apache", "Tomcat", "Windows", "All" })); docrootsAddLists.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { docrootsAddListsActionPerformed(evt); } }); windowsDrivesToUse.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "C", "D", "E", "F", "G", "H", "I", "J", "All except A,B", "All" })); windowsDrivesToUse.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { windowsDrivesToUseActionPerformed(evt); } }); jLabel1.setText("Windows drives to use:"); drivesList.setModel(new javax.swing.AbstractListModel<String>() { String[] strings = { "C" }; public int getSize() { return strings.length; } public String getElementAt(int i) { return strings[i]; } }); jScrollPane11.setViewportView(drivesList); jButton16.setText("Remove"); jButton17.setText("Clear"); jLabel9.setText("Add from the built-in list below:"); javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane9, javax.swing.GroupLayout.PREFERRED_SIZE, 719, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(jButton16, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(18, 18, 18) .addComponent(jButton17, javax.swing.GroupLayout.PREFERRED_SIZE, 175, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(docrootsAddLists, javax.swing.GroupLayout.PREFERRED_SIZE, 364, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel9, javax.swing.GroupLayout.PREFERRED_SIZE, 411, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(jPanel5Layout.createSequentialGroup() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(webrootCLearButton, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(webrootAddButton, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(webrootRemoveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(webrootLoadButton, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(webrootPasteButton, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addComponent(jScrollPane10, javax.swing.GroupLayout.PREFERRED_SIZE, 266, javax.swing.GroupLayout.PREFERRED_SIZE))) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 306, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(windowsDrivesToUse, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jScrollPane11)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel5Layout.setVerticalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(webrootPasteButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(webrootLoadButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(webrootRemoveButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(webrootCLearButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(webrootAddButton) .addComponent(jScrollPane10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel9) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(docrootsAddLists, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(windowsDrivesToUse, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane11, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(jScrollPane9)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jButton16) .addComponent(jButton17)) .addContainerGap(330, Short.MAX_VALUE)) ); jTabbedPane2.addTab("Known webroot patterns", jPanel5); javax.swing.GroupLayout webrootOptionsPanelLayout = new javax.swing.GroupLayout(webrootOptionsPanel); webrootOptionsPanel.setLayout(webrootOptionsPanelLayout); webrootOptionsPanelLayout.setHorizontalGroup( webrootOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(webrootOptionsPanelLayout.createSequentialGroup() .addGroup(webrootOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(webrootOptionsPanelLayout.createSequentialGroup() .addGap(23, 23, 23) .addComponent(optimizeDocrootTraversalsBox, javax.swing.GroupLayout.PREFERRED_SIZE, 527, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(webrootOptionsPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(jTabbedPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 1284, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(56, Short.MAX_VALUE)) ); webrootOptionsPanelLayout.setVerticalGroup( webrootOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(webrootOptionsPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(optimizeDocrootTraversalsBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jTabbedPane2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(27, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Webroot options", webrootOptionsPanel); slashesToUseCombo.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "All (default & recommended)", "Win \\", "Nix /" })); slashesToUseCombo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { slashesToUseComboActionPerformed(evt); } }); useAbsoluteWebrootsBox.setText("Include absolute webroots"); LFIModeCheckBox.setText("LFI mode (don't use webroots)"); LFIModeCheckBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { LFIModeCheckBoxActionPerformed(evt); } }); LFIOptimizeCheckBox.setText("Longest traversal only"); LFIOptimizeCheckBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { LFIOptimizeCheckBoxActionPerformed(evt); } }); jLabel2.setText("Directory separator to use:"); jLabel10.setText("MAX traversals:"); javax.swing.GroupLayout traversalOptionsPanelLayout = new javax.swing.GroupLayout(traversalOptionsPanel); traversalOptionsPanel.setLayout(traversalOptionsPanelLayout); traversalOptionsPanelLayout.setHorizontalGroup( traversalOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(traversalOptionsPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(traversalOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(LFIOptimizeCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(traversalOptionsPanelLayout.createSequentialGroup() .addGroup(traversalOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(traversalOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addGroup(traversalOptionsPanelLayout.createSequentialGroup() .addGap(8, 8, 8) .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 340, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(52, 52, 52)) .addGroup(traversalOptionsPanelLayout.createSequentialGroup() .addComponent(LFIModeCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGap(20, 20, 20))) .addGroup(traversalOptionsPanelLayout.createSequentialGroup() .addGap(12, 12, 12) .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 250, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(138, 138, 138))) .addGroup(traversalOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(slashesToUseCombo, 0, 435, Short.MAX_VALUE) .addComponent(useAbsoluteWebrootsBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(maxTraversalsPerPayloadSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)))) .addContainerGap(481, Short.MAX_VALUE)) ); traversalOptionsPanelLayout.setVerticalGroup( traversalOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(traversalOptionsPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(traversalOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(slashesToUseCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(traversalOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(useAbsoluteWebrootsBox) .addComponent(LFIModeCheckBox)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(LFIOptimizeCheckBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(traversalOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel10, javax.swing.GroupLayout.PREFERRED_SIZE, 29, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(maxTraversalsPerPayloadSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(656, 656, 656)) ); jTabbedPane1.addTab("Traversal options", traversalOptionsPanel); evasiveList.setModel(new javax.swing.AbstractListModel<String>() { String[] strings = { "....//", "...//", ".....///", ".{BREAK}.{BREAK}/" }; public int getSize() { return strings.length; } public String getElementAt(int i) { return strings[i]; } }); jScrollPane2.setViewportView(evasiveList); evasiveTechniquesSetToAdd.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Basic (default)", "Anti-non-recurrent filters", "Breakup string", "All", "None" })); evasiveTechniquesSetToAdd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { evasiveTechniquesSetToAddActionPerformed(evt); } }); breakupList.setModel(new javax.swing.AbstractListModel<String>() { String[] strings = { "20" }; public int getSize() { return strings.length; } public String getElementAt(int i) { return strings[i]; } }); jScrollPane3.setViewportView(breakupList); mixEncodingsCheckBox.setText("Use mixed encodings"); rawEncodingCheckbox.setText("RAW"); urlEncode.setText("URL"); urlEncode.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { urlEncodeActionPerformed(evt); } }); doubleUrlEncode.setText("Double URL"); doubleUrlEncode.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { doubleUrlEncodeActionPerformed(evt); } }); utfEncode.setText("UTF %u00xx codes"); utfEncode.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { utfEncodeActionPerformed(evt); } }); overlong3.setText("Overlong UTF 3-byte"); overlong3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { overlong3ActionPerformed(evt); } }); jLabel6.setText("Encodings to use:"); jLabel8.setText("Breakup strings to replace {BREAK} holder:"); addBreakupButton.setText("Add"); addBreakupButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addBreakupButtonActionPerformed(evt); } }); breakupASCIIFormat.setText("ASCII"); breakupASCIIFormat.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { breakupASCIIFormatActionPerformed(evt); } }); breakupHexFormat.setText("HEX"); breakupHexFormat.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { breakupHexFormatActionPerformed(evt); } }); jLabel11.setText("List editor display & input format:"); useTerminatorsCheckBox.setText("Inlcude NULLBYTE-ended payloads"); useTerminatorsCheckBox.setActionCommand(""); useTerminatorsCheckBox.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { useTerminatorsCheckBoxActionPerformed(evt); } }); overlong2.setText("Overlong UTF 2-byte"); overlong2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { overlong2ActionPerformed(evt); } }); jLabel12.setText("More options"); removeSelectedEvasive.setText("Remove selected"); removeSelectedEvasive.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { removeSelectedEvasiveActionPerformed(evt); } }); jButton1.setText("Remove selected"); jButton1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButton1ActionPerformed(evt); } }); urlEncodeUtf.setText("URL-encode UTF sequences"); terminateAllBox.setText("Terminate ALL payloads with a NULLBYTE"); terminateAllBox.setActionCommand("Terminate all payloads with a NULLBYTE"); noLiteralNullbyte.setText("Don't terminate strings with literal NULLBYTE "); noLiteralNullbyte.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { noLiteralNullbyteActionPerformed(evt); } }); javax.swing.GroupLayout evasiveTechniquesPanelLayout = new javax.swing.GroupLayout(evasiveTechniquesPanel); evasiveTechniquesPanel.setLayout(evasiveTechniquesPanelLayout); evasiveTechniquesPanelLayout.setHorizontalGroup( evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(evasiveTechniquesPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(evasiveTechniquesPanelLayout.createSequentialGroup() .addGroup(evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jButton1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel8, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(evasiveTechniquesSetToAdd, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 357, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jScrollPane2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 357, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jScrollPane3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 366, Short.MAX_VALUE) .addGroup(evasiveTechniquesPanelLayout.createSequentialGroup() .addComponent(addBreakupButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(addBreakupField, javax.swing.GroupLayout.PREFERRED_SIZE, 276, javax.swing.GroupLayout.PREFERRED_SIZE))) .addComponent(removeSelectedEvasive, javax.swing.GroupLayout.PREFERRED_SIZE, 357, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(103, 103, 103)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, evasiveTechniquesPanelLayout.createSequentialGroup() .addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE, 457, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))) .addGroup(evasiveTechniquesPanelLayout.createSequentialGroup() .addComponent(breakupASCIIFormat) .addGap(22, 22, 22) .addComponent(breakupHexFormat) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))) .addGroup(evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(doubleUrlEncode, javax.swing.GroupLayout.PREFERRED_SIZE, 262, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(urlEncode) .addComponent(rawEncodingCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 266, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel12, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(mixEncodingsCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, 692, Short.MAX_VALUE) .addComponent(utfEncode, javax.swing.GroupLayout.PREFERRED_SIZE, 300, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(overlong2, javax.swing.GroupLayout.PREFERRED_SIZE, 317, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(overlong3, javax.swing.GroupLayout.PREFERRED_SIZE, 335, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(useTerminatorsCheckBox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(urlEncodeUtf, javax.swing.GroupLayout.PREFERRED_SIZE, 541, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(terminateAllBox, javax.swing.GroupLayout.DEFAULT_SIZE, 692, Short.MAX_VALUE)) .addComponent(noLiteralNullbyte, javax.swing.GroupLayout.PREFERRED_SIZE, 805, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(42, Short.MAX_VALUE)) ); evasiveTechniquesPanelLayout.setVerticalGroup( evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(evasiveTechniquesPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(evasiveTechniquesSetToAdd, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel6)) .addGap(6, 6, 6) .addGroup(evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(evasiveTechniquesPanelLayout.createSequentialGroup() .addComponent(rawEncodingCheckbox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(urlEncode) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(doubleUrlEncode) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(utfEncode) .addGap(5, 5, 5) .addComponent(overlong2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(overlong3) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel12) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(mixEncodingsCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(useTerminatorsCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(terminateAllBox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(noLiteralNullbyte) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(urlEncodeUtf)) .addGroup(evasiveTechniquesPanelLayout.createSequentialGroup() .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(removeSelectedEvasive) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 64, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(addBreakupButton) .addComponent(addBreakupField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel11) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(evasiveTechniquesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(breakupASCIIFormat) .addComponent(breakupHexFormat)))) .addContainerGap(364, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Evasive techniques", evasiveTechniquesPanel); jLabel13.setText("Instead of feeding the tools, save the result payload set:"); saveToFileButton.setText("to file"); saveToFileButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { saveToFileButtonActionPerformed(evt); } }); copyToClipboardButton.setText("to clipboard"); copyToClipboardButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { copyToClipboardButtonActionPerformed(evt); } }); javax.swing.GroupLayout savePayloadsPanelLayout = new javax.swing.GroupLayout(savePayloadsPanel); savePayloadsPanel.setLayout(savePayloadsPanelLayout); savePayloadsPanelLayout.setHorizontalGroup( savePayloadsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(savePayloadsPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(savePayloadsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 899, javax.swing.GroupLayout.PREFERRED_SIZE) .addGroup(savePayloadsPanelLayout.createSequentialGroup() .addComponent(saveToFileButton, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(29, 29, 29) .addComponent(copyToClipboardButton, javax.swing.GroupLayout.PREFERRED_SIZE, 424, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap(441, Short.MAX_VALUE)) ); savePayloadsPanelLayout.setVerticalGroup( savePayloadsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(savePayloadsPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(savePayloadsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(saveToFileButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(copyToClipboardButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(744, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Save the payloads", savePayloadsPanel); jLabel5.setText("Byte range:"); jLabel5.setToolTipText(""); byteGeneratorRangeCombo.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Non-alphanumeric", "Alphanumeric", "Non-alphanumeric printable", "Non-alphanumeric non-printable", "Non-alphanumeric non-printable < 128", "All" })); byteGeneratorRangeCombo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { byteGeneratorRangeComboActionPerformed(evt); } }); javax.swing.GroupLayout byteGeneratorPanelLayout = new javax.swing.GroupLayout(byteGeneratorPanel); byteGeneratorPanel.setLayout(byteGeneratorPanelLayout); byteGeneratorPanelLayout.setHorizontalGroup( byteGeneratorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(byteGeneratorPanelLayout.createSequentialGroup() .addContainerGap() .addGroup(byteGeneratorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 908, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(byteGeneratorRangeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 444, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(432, Short.MAX_VALUE)) ); byteGeneratorPanelLayout.setVerticalGroup( byteGeneratorPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(byteGeneratorPanelLayout.createSequentialGroup() .addContainerGap() .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(byteGeneratorRangeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(753, Short.MAX_VALUE)) ); jLabel5.getAccessibleContext().setAccessibleName(""); jTabbedPane1.addTab("Byte generator", byteGeneratorPanel); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 1336, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(71, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTabbedPane1) ); jTabbedPane1.getAccessibleContext().setAccessibleName("Webroot options"); jTabbedPane1.getAccessibleContext().setAccessibleDescription(""); }// </editor-fold>//GEN-END:initComponents private void scannerChecksCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_scannerChecksCheckboxActionPerformed // TODO add your handling code here: if(scannerChecksCheckbox.isSelected()) { enableScannerChecks(); } else { disableScannerChecks(); } }//GEN-LAST:event_scannerChecksCheckboxActionPerformed private void targetPasteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_targetPasteButtonActionPerformed // TODO add your handling code here: Toolkit toolkit = Toolkit.getDefaultToolkit(); Clipboard clipboard = toolkit.getSystemClipboard(); String result = ""; try { result = (String) clipboard.getData(DataFlavor.stringFlavor); } catch (UnsupportedFlavorException ex) { Logger.getLogger(PsychoPanel2.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(PsychoPanel2.class.getName()).log(Level.SEVERE, null, ex); } targetsList.setListData(result.split("\\r*\\n")); }//GEN-LAST:event_targetPasteButtonActionPerformed private void slashesToUseComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_slashesToUseComboActionPerformed // this.slashesToUse="all"; switch(slashesToUseCombo.getSelectedIndex()) { case 0 : { this.slashesToUse="all"; break;} case 1 : { this.slashesToUse="win"; break;} case 2 : { this.slashesToUse="nix"; break;} } }//GEN-LAST:event_slashesToUseComboActionPerformed private void optimizeDocrootTraversalsBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_optimizeDocrootTraversalsBoxActionPerformed // TODO add your handling code here: // change the state if(optimizeDocroots==true) { optimizeDocroots=false; } else { optimizeDocroots=true; } }//GEN-LAST:event_optimizeDocrootTraversalsBoxActionPerformed private void byteGeneratorRangeComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_byteGeneratorRangeComboActionPerformed // TODO add your handling code here: switch (byteGeneratorRangeCombo.getSelectedIndex()) { case 0: { this.byteGeneratorRange = "non-alpha"; break; } case 1: { this.byteGeneratorRange = "alpha"; break; } case 2: { this.byteGeneratorRange = "non-alpha-print"; break; } case 3: { this.byteGeneratorRange = "non-alpha-non-print"; break; } case 4: { this.byteGeneratorRange = "non-alpha-non-print-low"; break; } case 5: { this.byteGeneratorRange = "all"; break; } } }//GEN-LAST:event_byteGeneratorRangeComboActionPerformed private void jCheckBox10ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox10ActionPerformed // TODO add your handling code here: }//GEN-LAST:event_jCheckBox10ActionPerformed private void evasiveTechniquesSetToAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_evasiveTechniquesSetToAddActionPerformed // TODO add your handling code here: // this is the map: // Basic (default) // Anti-non-recurrent filters // Breakup string // Mixed encoding // All // None switch(evasiveTechniquesSetToAdd.getSelectedIndex()) { case 0 : { this.initiateEvasiveList(); break; } case 1 : { appendListData(evasiveList,this.nonRecurrentEvasiveTraversals); this.evasiveTechniques=true; break;} case 2 : { appendListData(evasiveList,this.breakupHolderTraversals); this.evasiveTechniques=true; break;} case 3 : { appendListData(evasiveList,this.nonRecurrentEvasiveTraversals); appendListData(evasiveList,this.breakupHolderTraversals); this.evasiveTechniques=true; break; } case 4 : { this.disableEvasiveTechniques(); break; } } }//GEN-LAST:event_evasiveTechniquesSetToAddActionPerformed private void suffixClearButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_suffixClearButtonActionPerformed String [] empty = {}; suffixesList.setListData(empty); //for some weird reason removeAll did not want to work. //suffixesList.Clear(); }//GEN-LAST:event_suffixClearButtonActionPerformed private void suffixRemoveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_suffixRemoveButtonActionPerformed // TODO add your handling code here: if(suffixesList.getSelectedIndex()!=-1) { ArrayList<String> toRemove = new ArrayList<>(); int indices[]=suffixesList.getSelectedIndices(); for(int i=0;i<indices.length;i++) { toRemove.add((String)suffixesList.getModel().getElementAt(indices[i])); } for(int i=0;i<toRemove.size();i++) { removeFromListData(suffixesList,toRemove.get(i)); } } // remove }//GEN-LAST:event_suffixRemoveButtonActionPerformed private void suffixAddButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_suffixAddButtonActionPerformed // TODO add your handling code here: String [] tmp = {suffixAddField.getText()}; appendListData(suffixesList,tmp); }//GEN-LAST:event_suffixAddButtonActionPerformed private void windowsDrivesToUseActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_windowsDrivesToUseActionPerformed // TODO add your handling code here: // drivesList switch(windowsDrivesToUse.getSelectedIndex()) { case 0 : { String n[]={"C"}; appendListData(drivesList,n); break; } case 1 : { String n[]={"D"}; appendListData(drivesList,n); break;} case 2 : { String n[]={"E"}; appendListData(drivesList,n); break;} case 3 : { String n[]={"F"}; appendListData(drivesList,n); break;} case 4 : { String n[]={"G"}; appendListData(drivesList,n); break;} case 5 : { String n[]={"H"}; appendListData(drivesList,n); break;} case 6 : { String n[]={"I"}; appendListData(drivesList,n); break;} case 7 : { String n[]={"J"}; appendListData(drivesList,n); break;} case 8 : { String n[]={"C","D","E","F","G","H","I","J","K","L","M","N","O","P","R","S","T","U","W","V","X","Y","Z"}; appendListData(drivesList,n); break; } case 9 : { String n[]={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","R","S","T","U","W","V","X","Y","Z"}; appendListData(drivesList,n); break; } } }//GEN-LAST:event_windowsDrivesToUseActionPerformed private void suffixLoadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_suffixLoadButtonActionPerformed // TODO add your handling code here: JFileChooser fc = new JFileChooser(); int returnVal = fc.showOpenDialog(PsychoPanel2.this); if (returnVal == JFileChooser.APPROVE_OPTION) { Scanner inFile1; try { inFile1 = new Scanner(fc.getSelectedFile()).useDelimiter("\\r*\\n"); } catch (FileNotFoundException ex) { Logger.getLogger(PsychoPanel2.class.getName()).log(Level.SEVERE, null, ex); return; } List<String> temps = new ArrayList<>(); while (inFile1.hasNext()) { String line = inFile1.next(); temps.add(line); } inFile1.close(); //suffixesList.setListData((String[])temps.toArray()); // for some reason casting (String[]) on toArray() does not work as expected (empty data list) String[] empty={}; suffixesList.setListData(empty); String[] newArr = new String[temps.size()]; for(int i=0;i<temps.size();i++) { newArr[i]=temps.get(i); } appendListData(suffixesList,newArr); } }//GEN-LAST:event_suffixLoadButtonActionPerformed private void breakupASCIIFormatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_breakupASCIIFormatActionPerformed if(editorFormat=="ASCII") return; breakupHexFormat.setSelected(false); breakupASCIIFormat.setSelected(true); editorFormat="ASCII"; // now, we have to go through the list and convert each element // // also, in such case we want to make sure this toggle is only activated once // breakupList // iterate and convert from hex to ascii // convert all from ASCII to HEX ListModel breakupListModel = breakupList.getModel(); String newValues[] = new String[breakupListModel.getSize()]; for(int i=0;i<breakupListModel.getSize();i++) { String hex=breakupListModel.getElementAt(i).toString(); StringBuilder output = new StringBuilder(); for (int j = 0; j < hex.length(); j+=2) { String str = hex.substring(j, j+2); output.append((char)Integer.parseInt(str, 16)); } newValues[i]=output.toString(); // now, we convert it from ASCII to HEX //brutDocrootSuffixes.add(suffix); } breakupList.setListData(newValues); /* String hex; */ }//GEN-LAST:event_breakupASCIIFormatActionPerformed private void breakupHexFormatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_breakupHexFormatActionPerformed if(editorFormat=="HEX") return; breakupHexFormat.setSelected(true); breakupASCIIFormat.setSelected(false); editorFormat="HEX"; // convert all from ASCII to HEX ListModel breakupListModel = breakupList.getModel(); String newValues[] = new String[breakupListModel.getSize()]; for(int i=0;i<breakupListModel.getSize();i++) { String currval=breakupListModel.getElementAt(i).toString(); String newVal=""; for(int j=0;j<currval.length();j++) { char currChar = currval.charAt(j); String hex = Integer.toHexString(currChar); newVal+=hex; } newValues[i]=newVal; // now, we convert it from ASCII to HEX //brutDocrootSuffixes.add(suffix); } breakupList.setListData(newValues); }//GEN-LAST:event_breakupHexFormatActionPerformed private void LFIModeCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_LFIModeCheckBoxActionPerformed // TODO add your handling code here: if(LFIModeCheckBox.isSelected()==true) { enableLFIMode(); } else { disableLFIMode(); } }//GEN-LAST:event_LFIModeCheckBoxActionPerformed private void targetLoadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_targetLoadButtonActionPerformed JFileChooser fc = new JFileChooser(); int returnVal = fc.showOpenDialog(PsychoPanel2.this); if (returnVal == JFileChooser.APPROVE_OPTION) { Scanner inFile1; try { inFile1 = new Scanner(fc.getSelectedFile()).useDelimiter("\\r*\\n"); } catch (FileNotFoundException ex) { Logger.getLogger(PsychoPanel2.class.getName()).log(Level.SEVERE, null, ex); return; } List<String> temps = new ArrayList<>(); while (inFile1.hasNext()) { String line = inFile1.next(); temps.add(line); } inFile1.close(); //suffixesList.setListData((String[])temps.toArray()); // for some reason casting (String[]) on toArray() does not work as expected (empty data list) String[] empty={}; targetsList.setListData(empty); String[] newArr = new String[temps.size()]; for(int i=0;i<temps.size();i++) { newArr[i]=temps.get(i); } appendListData(targetsList,newArr); } }//GEN-LAST:event_targetLoadButtonActionPerformed private void webrootCLearButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_webrootCLearButtonActionPerformed // TODO add your handling code here: String[] empty={}; docrootsList.setListData(empty); }//GEN-LAST:event_webrootCLearButtonActionPerformed private void webrootLoadButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_webrootLoadButtonActionPerformed JFileChooser fc = new JFileChooser(); int returnVal = fc.showOpenDialog(PsychoPanel2.this); if (returnVal == JFileChooser.APPROVE_OPTION) { Scanner inFile1; try { inFile1 = new Scanner(fc.getSelectedFile()).useDelimiter("\\r*\\n"); } catch (FileNotFoundException ex) { Logger.getLogger(PsychoPanel2.class.getName()).log(Level.SEVERE, null, ex); return; } List<String> temps = new ArrayList<>(); while (inFile1.hasNext()) { String line = inFile1.next(); temps.add(line); } inFile1.close(); //suffixesList.setListData((String[])temps.toArray()); // for some reason casting (String[]) on toArray() does not work as expected (empty data list) //String[] empty={}; //docrootsList.setListData(empty); String[] newArr = new String[temps.size()]; for(int i=0;i<temps.size();i++) { newArr[i]=temps.get(i); } docrootsList.setListData(newArr); //appendListData(docrootsList,newArr); } }//GEN-LAST:event_webrootLoadButtonActionPerformed private void targetClearButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_targetClearButtonActionPerformed // TODO add your handling code here: String[] empty={}; targetsList.setListData(empty); }//GEN-LAST:event_targetClearButtonActionPerformed private void targetRemoveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_targetRemoveButtonActionPerformed // TODO add your handling code here: // button callback if(targetsList.getSelectedIndex()!=-1) { ArrayList<String> toRemove = new ArrayList<>(); int indices[]=targetsList.getSelectedIndices(); for(int i=0;i<indices.length;i++) { toRemove.add((String)targetsList.getModel().getElementAt(indices[i])); } for(int i=0;i<toRemove.size();i++) { removeFromListData(targetsList,toRemove.get(i)); } } }//GEN-LAST:event_targetRemoveButtonActionPerformed private void webrootRemoveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_webrootRemoveButtonActionPerformed if(docrootsList.getSelectedIndex()!=-1) { ArrayList<String> toRemove = new ArrayList<>(); int indices[]=docrootsList.getSelectedIndices(); for(int i=0;i<indices.length;i++) { toRemove.add((String)docrootsList.getModel().getElementAt(indices[i])); } for(int i=0;i<toRemove.size();i++) { removeFromListData(docrootsList,toRemove.get(i)); } } }//GEN-LAST:event_webrootRemoveButtonActionPerformed private void webrootAddButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_webrootAddButtonActionPerformed String [] tmp = {webrootAddField.getText()}; appendListData(docrootsList,tmp); }//GEN-LAST:event_webrootAddButtonActionPerformed private void targetAddButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_targetAddButtonActionPerformed // TODO add your handling code here: String [] tmp = {addTargetField.getText()}; appendListData(targetsList,tmp); }//GEN-LAST:event_targetAddButtonActionPerformed private void suffixPasteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_suffixPasteButtonActionPerformed // TODO add your handling code here: Toolkit toolkit = Toolkit.getDefaultToolkit(); Clipboard clipboard = toolkit.getSystemClipboard(); String result = ""; try { result = (String) clipboard.getData(DataFlavor.stringFlavor); } catch (UnsupportedFlavorException ex) { Logger.getLogger(PsychoPanel2.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(PsychoPanel2.class.getName()).log(Level.SEVERE, null, ex); } suffixesList.setListData(result.split("\\r*\\n")); }//GEN-LAST:event_suffixPasteButtonActionPerformed private void webrootPasteButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_webrootPasteButtonActionPerformed // TODO add your handling code here: Toolkit toolkit = Toolkit.getDefaultToolkit(); Clipboard clipboard = toolkit.getSystemClipboard(); String result = ""; try { result = (String) clipboard.getData(DataFlavor.stringFlavor); } catch (UnsupportedFlavorException ex) { Logger.getLogger(PsychoPanel2.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(PsychoPanel2.class.getName()).log(Level.SEVERE, null, ex); } docrootsList.setListData(result.split("\\r*\\n")); }//GEN-LAST:event_webrootPasteButtonActionPerformed private void docrootsAddListsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_docrootsAddListsActionPerformed // TODO add your handling code here: switch(docrootsAddLists.getSelectedIndex()) { case 0 : { appendListData(docrootsList,universalDocroots); break;} case 1 : { appendListData(docrootsList,nginxDocroots); break;} case 2 : { appendListData(docrootsList,apacheDocroots); break;} case 3 : { appendListData(docrootsList,tomcatDocroots); break;} case 4 : { appendListData(docrootsList,windowsDocroots); break; } case 5 : { // "All" appendListData(docrootsList,universalDocroots); appendListData(docrootsList,nginxDocroots); appendListData(docrootsList,apacheDocroots); appendListData(docrootsList,tomcatDocroots); appendListData(docrootsList,windowsDocroots); break; } } }//GEN-LAST:event_docrootsAddListsActionPerformed private void useTerminatorsCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useTerminatorsCheckBoxActionPerformed // TODO add your handling code here: if(useTerminatorsCheckBox.isSelected()==true) { terminateAllBox.setEnabled(true); noLiteralNullbyte.setEnabled(true); } else { terminateAllBox.setEnabled(false); noLiteralNullbyte.setEnabled(false); } }//GEN-LAST:event_useTerminatorsCheckBoxActionPerformed private void overlong3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_overlong3ActionPerformed // TODO add your handling code here: if(overlong3.isSelected()==true) { //urlEncode.setSelected(true); encodingsEnabled[5]=1; } else { encodingsEnabled[5]=0; } }//GEN-LAST:event_overlong3ActionPerformed private void overlong2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_overlong2ActionPerformed // TODO add your handling code here: if(overlong2.isSelected()==true) { //urlEncode.setSelected(true); encodingsEnabled[4]=1; } else { encodingsEnabled[4]=0; } }//GEN-LAST:event_overlong2ActionPerformed private void removeSelectedEvasiveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeSelectedEvasiveActionPerformed if(evasiveList.getSelectedIndex()!=-1) { ArrayList<String> toRemove = new ArrayList<>(); int indices[]=evasiveList.getSelectedIndices(); for(int i=0;i<indices.length;i++) { toRemove.add((String)evasiveList.getModel().getElementAt(indices[i])); } for(int i=0;i<toRemove.size();i++) { removeFromListData(evasiveList,toRemove.get(i)); } } // TODO add your handling code here: }//GEN-LAST:event_removeSelectedEvasiveActionPerformed private void addBreakupButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addBreakupButtonActionPerformed // TODO add your handling code here: String val = addBreakupField.getText(); if(editorFormat=="HEX") { val=val.replaceAll("[^\\da-f]",""); // make sure the number of characters is even int len=val.length(); if(len%2==0) { // add the string to the list String n[]={val}; appendListData(breakupList,n); addBreakupField.setText(""); } } else { String n[]={val}; appendListData(breakupList,n); addBreakupField.setText(""); } }//GEN-LAST:event_addBreakupButtonActionPerformed private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed // TODO add your handling code here: if(breakupList.getSelectedIndex()!=-1) { ArrayList<String> toRemove = new ArrayList<>(); int indices[]=breakupList.getSelectedIndices(); for(int i=0;i<indices.length;i++) { toRemove.add((String)breakupList.getModel().getElementAt(indices[i])); } for(int i=0;i<toRemove.size();i++) { removeFromListData(breakupList,toRemove.get(i)); } } }//GEN-LAST:event_jButton1ActionPerformed private void urlEncodeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_urlEncodeActionPerformed // TODO add your handling code here: if(urlEncode.isSelected()==true) { //urlEncode.setSelected(true); encodingsEnabled[1]=1; } else { encodingsEnabled[1]=0; } }//GEN-LAST:event_urlEncodeActionPerformed private void doubleUrlEncodeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_doubleUrlEncodeActionPerformed // TODO add your handling code here: if(doubleUrlEncode.isSelected()==true) { //urlEncode.setSelected(true); encodingsEnabled[2]=1; } else { encodingsEnabled[2]=0; } }//GEN-LAST:event_doubleUrlEncodeActionPerformed private void utfEncodeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_utfEncodeActionPerformed // TODO add your handling code here: if(utfEncode.isSelected()==true) { //urlEncode.setSelected(true); encodingsEnabled[3]=1; } else { encodingsEnabled[3]=0; } }//GEN-LAST:event_utfEncodeActionPerformed // this method simply runs a new payload generator, runs it and fills this.payloads with its results // used by save to file/copy to clipboard features protected void generatePayloads() { // now, for some reason this instance creation hangs burp IntruderPayloadGenerator generator = new IntruderPayloadGenerator("path", PsychoPATH.PsychoTab, true); payloads = new ArrayList(); while(generator.hasMorePayloads()) { byte[] empty={}; byte[] payload = generator.getNextPayload(empty); // there is no insertion point for this option; the insertion point is the file/clipboard // hence the argument is empty, but could be the file name as well if(payload.length==1) { //payload generation failed, move onto next command logOutput("Payload generation failed!"); } payloads.add(PsychoPATH.callbacks.getHelpers().bytesToString(payload)); // bytesToString } } private void saveToFileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveToFileButtonActionPerformed // TODO add your handling code here: // save payloads to file JFileChooser fileChooser = new JFileChooser(); if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { // new generator File file = fileChooser.getSelectedFile(); logOutput("File chosen:"+file.getAbsolutePath()); this.generatePayloads(); jTabbedPane1.setTitleAt(4,"Save "+payloads.size()+" payloads"); logOutput("Generated "+payloads.size()+" payloads, saving..."); BufferedWriter writer = null; try { writer = new BufferedWriter( new FileWriter(file.getAbsolutePath())); for(int i=0;i<payloads.size();i++) { writer.write(payloads.get(i)+"\n"); // payloads with literals like newline characters will break this format, obviously (no such payloads in the set by default) } } catch (IOException e) { this.logOutput("IOException occurred while trying to open the file: "+file.getAbsolutePath()); } finally { try { if ( writer != null) writer.close( ); } catch ( IOException e) { this.logOutput("IOException occurred while writing to the file: "+file.getAbsolutePath()); } } } }//GEN-LAST:event_saveToFileButtonActionPerformed private void copyToClipboardButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_copyToClipboardButtonActionPerformed // TODO add your handling code here: // if null terminators are in use, issue a warning // PsychoPATH.callbacks.printError(proto); // PsychoPATH.callbacks.issueAlert(); if(this.useTerminatorsCheckBox.isSelected()==true) { JOptionPane.showMessageDialog(null, "Literal NULLBYTE terminators are enabled and this will most likely break the contents copied into the clipboard. To avoid this issue, save into a file instead or disable NULLBYTE terminators in evasive techniques.", "Payload set contains NULL bytes", JOptionPane.INFORMATION_MESSAGE); } this.generatePayloads(); jTabbedPane1.setTitleAt(4,"Save "+payloads.size()+" payloads"); String clipboardS=""; for(int i=0;i<payloads.size();i++) { clipboardS+=payloads.get(i)+"\n"; // payloads with literals like newline characters will break this format, obviously (no such payloads in the set by default) }; StringSelection selection; selection = new StringSelection(clipboardS); Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); clipboard.setContents(selection, selection); }//GEN-LAST:event_copyToClipboardButtonActionPerformed private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed if(newMatchRule.getText()=="") return; // don't want an empty string // if we add (after validation and duplicate check) // ListModel scanChecksModel = scannerMatchRules.getModel(); // make sure the string is not already on the list for(int i=0;i<scanChecksModel.getSize();i++) { if(scanChecksModel.getElementAt(i).equals(newMatchRule.getText())) { // avoid duplicates return; } } // rewrite the entire model into an array String newValues[] = new String[scanChecksModel.getSize()+1]; for(int i=0;i<scanChecksModel.getSize();i++) { newValues[i]=scanChecksModel.getElementAt(i).toString(); } // and add the new rule newValues[scanChecksModel.getSize()]=newMatchRule.getText(); // set the new data model scannerMatchRules.setListData(newValues); }//GEN-LAST:event_jButton2ActionPerformed private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed // TODO add your handling code here: if(scannerMatchRules.getSelectedIndex()!=-1) { ArrayList<String> toRemove = new ArrayList<>(); int indices[]=scannerMatchRules.getSelectedIndices(); for(int i=0;i<indices.length;i++) { toRemove.add((String)scannerMatchRules.getModel().getElementAt(indices[i])); } for(int i=0;i<toRemove.size();i++) { removeFromListData(scannerMatchRules,toRemove.get(i)); } } }//GEN-LAST:event_jButton3ActionPerformed private void noLiteralNullbyteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_noLiteralNullbyteActionPerformed // TODO add your handling code here: }//GEN-LAST:event_noLiteralNullbyteActionPerformed private void LFIOptimizeCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_LFIOptimizeCheckBoxActionPerformed // TODO add your handling code here: if(LFIOptimizeCheckBox.isSelected()==true) { optimizeLFI=true; } else { optimizeLFI=false; } }//GEN-LAST:event_LFIOptimizeCheckBoxActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables protected javax.swing.JCheckBox LFIModeCheckBox; protected javax.swing.JCheckBox LFIOptimizeCheckBox; private javax.swing.JButton addBreakupButton; private javax.swing.JTextField addBreakupField; private javax.swing.JTextPane addTargetField; private javax.swing.JRadioButton breakupASCIIFormat; private javax.swing.JRadioButton breakupHexFormat; protected javax.swing.JList<String> breakupList; private javax.swing.JPanel byteGeneratorPanel; private javax.swing.JComboBox<String> byteGeneratorRangeCombo; private javax.swing.JButton copyToClipboardButton; private javax.swing.JComboBox<String> docrootsAddLists; protected javax.swing.JList<String> docrootsList; protected javax.swing.JCheckBox doubleUrlEncode; protected javax.swing.JList<String> drivesList; protected javax.swing.JList<String> evasiveList; protected javax.swing.JPanel evasiveTechniquesPanel; protected javax.swing.JComboBox<String> evasiveTechniquesSetToAdd; protected javax.swing.JTextPane fileNameField; private javax.swing.JPanel globalSettingsPanel; private javax.swing.JButton jButton1; private javax.swing.JButton jButton16; private javax.swing.JButton jButton17; private javax.swing.JButton jButton2; private javax.swing.JButton jButton3; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel15; private javax.swing.JLabel jLabel16; private javax.swing.JLabel jLabel18; private javax.swing.JLabel jLabel19; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel20; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel5; private javax.swing.JPanel jPanel6; private javax.swing.JPanel jPanel7; private javax.swing.JScrollPane jScrollPane10; private javax.swing.JScrollPane jScrollPane11; private javax.swing.JScrollPane jScrollPane12; private javax.swing.JScrollPane jScrollPane13; private javax.swing.JScrollPane jScrollPane14; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JScrollPane jScrollPane3; private javax.swing.JScrollPane jScrollPane4; private javax.swing.JScrollPane jScrollPane5; private javax.swing.JScrollPane jScrollPane6; private javax.swing.JScrollPane jScrollPane7; private javax.swing.JScrollPane jScrollPane8; private javax.swing.JScrollPane jScrollPane9; protected javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JTabbedPane jTabbedPane2; protected javax.swing.JSpinner maxTraversalsPerPayloadSpinner; protected javax.swing.JCheckBox mixEncodingsCheckBox; private javax.swing.JTextField newMatchRule; protected javax.swing.JTextPane nixFileName; protected javax.swing.JCheckBox noLiteralNullbyte; protected javax.swing.JCheckBox optimizeDocrootTraversalsBox; private javax.swing.JCheckBox overlong2; private javax.swing.JCheckBox overlong3; protected javax.swing.JCheckBox rawEncodingCheckbox; private javax.swing.JButton removeSelectedEvasive; public javax.swing.JPanel savePayloadsPanel; private javax.swing.JButton saveToFileButton; public javax.swing.JCheckBox scannerChecksCheckbox; public javax.swing.JList<String> scannerMatchRules; protected javax.swing.JComboBox<String> slashesToUseCombo; private javax.swing.JButton suffixAddButton; private javax.swing.JTextPane suffixAddField; private javax.swing.JButton suffixClearButton; private javax.swing.JButton suffixLoadButton; private javax.swing.JButton suffixPasteButton; private javax.swing.JButton suffixRemoveButton; protected javax.swing.JList<String> suffixesList; private javax.swing.JButton targetAddButton; private javax.swing.JButton targetClearButton; private javax.swing.JButton targetLoadButton; public javax.swing.JComboBox<String> targetOS; private javax.swing.JButton targetPasteButton; private javax.swing.JButton targetRemoveButton; protected javax.swing.JList<String> targetsList; protected javax.swing.JCheckBox terminateAllBox; private javax.swing.JPanel traversalOptionsPanel; protected javax.swing.JCheckBox urlEncode; protected javax.swing.JCheckBox urlEncodeUtf; private javax.swing.JCheckBox useAbsoluteWebrootsBox; protected javax.swing.JCheckBox useTerminatorsCheckBox; private javax.swing.JCheckBox utfEncode; private javax.swing.JButton webrootAddButton; private javax.swing.JTextPane webrootAddField; private javax.swing.JButton webrootCLearButton; private javax.swing.JButton webrootLoadButton; private javax.swing.JPanel webrootOptionsPanel; private javax.swing.JButton webrootPasteButton; private javax.swing.JButton webrootRemoveButton; protected javax.swing.JTextPane winFileName; private javax.swing.JComboBox<String> windowsDrivesToUse; // End of variables declaration//GEN-END:variables }