package burp.zn.dirbuster; import burp.IBurpExtenderCallbacks; import burp.IExtensionHelpers; import burp.zn.gui.DirbusterPanel; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import javax.swing.table.DefaultTableModel; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; public class DirbusterThread implements Runnable { static final Logger log = LogManager.getLogger(DirbusterHandler.class.getName()); private URL url; private DirbusterPanel panel; private IBurpExtenderCallbacks callbacks; DirbusterThread(URL url, IBurpExtenderCallbacks callbacks, DirbusterPanel panel) { this.url = url; this.panel = panel; this.callbacks = callbacks; } @Override public void run() { try { /** * Make pre check, host existing */ int statusCode = makeHttpRequest(); if ( statusCode == 302 || statusCode == 404 || statusCode == 501 || statusCode == 502) { return; } log.info("Status code: ---" + statusCode + "--- Found path " + url); /** * Add data to GUI table model */ ((DefaultTableModel) panel.getTblFoundDirs().getModel()).addRow(new Object[]{true, url, statusCode}); /** * Send to spider this host */ if (!callbacks.isInScope(url)) { callbacks.includeInScope(url); } callbacks.sendToSpider(url); log.info("Sent to Spider: " + url); } catch (Exception e) { log.error("Error make HTTP Request: " + url + e.getMessage()); } } /** * Make Http request to url * @return HTTP status code * @throws IOException */ private int makeHttpRequest() throws IOException { HttpURLConnection.setFollowRedirects(false); HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setConnectTimeout(Integer.valueOf(panel.getTbxTimeout().getText())); con.setRequestMethod("HEAD"); return con.getResponseCode(); } }