在QA進行功能測試時,同時也進行安全測試,減小產品安全測試所花費的時間,將工具能夠發現的安全問題,儘量早的提出來。java
插件須要繼承IScannerListener,使用其newScanIssue函數獲取全部的掃描結果sql
package burp;數據庫
/*windows
only formatting tags and simple hyperlinks.
*/
public interface IScanIssue
{瀏覽器
/**安全
/**服務器
/**app
/**ide
*/
String getSeverity();函數
/**
/**
/**
/**
/**
/*
/*
}
**如上newScanIssue能夠獲取到掃描的全部結果,好比:
1.java.net.URL getUrl(); 掃描的url
2.String getIssueName(); 問題類型: 如SQL injection(sql注入)
3.getSeverity(); 漏洞等級 "High", "Medium", "Low", "Information" or "False positive"
4.String getConfidence(); 肯定程度 "Certain", "Firm" or "Tentative".
from burp import IBurpExtender
from burp import IScannerListener
from java.io import PrintWriter
from threading import Thread
from java.lang import Class
from java.sql import DriverManager, SQLException
import time
class BurpExtender(IBurpExtender, IScannerListener):
def registerExtenderCallbacks(self, callbacks): # keep a reference to our callbacks object self._callbacks = callbacks # set our extension name callbacks.setExtensionName("scann_test") # obtain our output stream self._stdout = PrintWriter(callbacks.getStdout(), True) self._helpers = callbacks.getHelpers() # register ourselves as an callbacks.registerScannerListener(self) def newScanIssue(self,issue): #self._stdout.println(issue.getConfidence()) Certain", "Firm" * or "Tentative" #CREATE TABLE `scanner` (`id` INTEGER PRIMARY KEY,`time` varchar(100),ip varchar(50),`url` varchar(30) ,`degree` varchar(30) ,`level` varchar(100) ,`detail` text ,`issueType` varchar(200) ,`issueBackground` text,`remediationBackground` text,`remediationDetail` text,`requests` text,`response` text ,issueName varcahr(50)) if(issue.getConfidence()): Class.forName("org.sqlite.JDBC").newInstance() JDBC_URL = "jdbc:sqlite:%s" % ("d:/scanner.db") dbConn = DriverManager.getConnection(JDBC_URL) sql="insert into `scanner` (time,ip,url,degree,level,detail,issueType,issueBackground,remediationBackground,remediationDetail,requests,response,issueName) values(?,?,?,?,?,?,?,?,?,?,?,?,?);" preStmt=dbConn.prepareStatement(sql) current_time=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) requests="" response="" for message in issue.getHttpMessages(): for i in range(len(message.getRequest())): if(message.getRequest()[i]<255 and message.getRequest()[i]>0): requests=requests+chr(message.getRequest()[i]) requests+="\n--------------------------\n" if(len(message.getResponse())!=0): for i in range(len(message.getResponse())): if(message.getResponse()[i]<255 and message.getResponse()[i]>0): response=response+chr(message.getResponse()[i]) response+="\n--------------------------\n" ip=issue.getHttpService().getHost() if(issue.getIssueDetail()): detail=issue.getIssueDetail() else: detail="none" if(issue.getIssueBackground()): issueBackground=issue.getIssueBackground() else: issueBackground="none" if(issue.getRemediationBackground()): remediationBackground=issue.getRemediationBackground() else: remediationBackground="none" if(issue.getRemediationDetail()): remediationDetail=issue.getRemediationDetail() else: remediationDetail="none" preStmt.setString(1, str(current_time)) preStmt.setString(2, str(ip)) preStmt.setString(3, str(issue.getUrl())) preStmt.setString(4,str(issue.getConfidence())) preStmt.setString(5,str(issue.getSeverity())) preStmt.setString(6,str(detail)) preStmt.setString(7,str(issue.getIssueType())) preStmt.setString(8,str(issueBackground)) preStmt.setString(9,str(remediationBackground)) preStmt.setString(10,str(remediationDetail)) preStmt.setString(11,str(requests)) preStmt.setString(12,str(response)) preStmt.setString(13,str(issue.getIssueName())) preStmt.addBatch() dbConn.setAutoCommit(False) preStmt.executeBatch() dbConn.setAutoCommit(True) dbConn.close() self._stdout.println("time:") self._stdout.println(current_time) self._stdout.print("ip") self._stdout.println(ip) self._stdout.println("qudingchengdu:"+issue.getConfidence()) self._stdout.print("url:") self._stdout.println(issue.getUrl()) self._stdout.println(issue.getIssueName()) self._stdout.println("level:"+issue.getSeverity()) self._stdout.print("detail:") if(issue.getIssueDetail()): self._stdout.println(issue.getIssueDetail()) else: self._stdout.println("none") self._stdout.println("getIssueType():") self._stdout.println(issue.getIssueType()) self._stdout.print("getIssueBackground") if(issue.getIssueBackground()): self._stdout.println(issue.getIssueBackground()) else: self._stdout.println("none") self._stdout.print("getRemediationBackground():") if(issue.getRemediationBackground()): self._stdout.println(issue.getRemediationBackground()) else: self._stdout.println("none") self._stdout.print("getRemediationDetail():") if(issue.getRemediationDetail()): self._stdout.println(issue.getRemediationDetail()) else: self._stdout.println("none") self._stdout.println("---------------------------")
scanner 掃描過程當中過濾js,jpg等文件將須要測試的url自動添加到scope中