Burpsuite插件开发(二):信息采集插件
作者:admin | 时间:2017-12-28 22:46:47 | 分类:黑客技术 隐藏侧边栏展开侧边栏
0×00
之前写过burpsuite联动sqlmap的插件,这次是一个信息采集的插件,插件名字是TheMagician。是“渗透测试重心由Windows转移至Mac”计划的一小步。本来想简单写写的,但是越写越麻烦,幸亏基友的鼎力相助,总算顺利完成。
在使用该插件之前需要修改三个全局变量,分别是NMAPPATH,BINGKEY以及HOMEPATH,其他的全局变量不需要改
插件的使用和联动sqlmap插件的一样遵循”简单就是美”的原则通过右键单击最简单的调用
创建右键菜单的源代码
#创建菜单右键 def createMenuItems(self, invocation): menu = []
responses = invocation.getSelectedMessages()
if len(responses) == 1:
menu.append(JMenuItem(self._actionName, None, actionPerformed=lambda x, inv=invocation: self.quoteJTab(inv)))
return menu
return None
三个标签代表三个不同的功能
0×01 C段端口扫描
第一个是C段扫描,其中的IP地址继承自Proxy标签中HTTP请求头的host地址,可以是单个IP地址,也可以是一个CIDR。鉴于nmap在端口扫描的绝对领袖地位,我并没有自己重写端口扫描引擎,而是通过Python的subprocess库调用nmap。
Mac在使用之前要首先安装nmap
brew install nmap
class NmapScan(threading.Thread): def __init__(self): threading.Thread.__init__(self)
self.thread_stop = False def setCommds(self,cmds,Jobject,pcontrol): self.runcms=cmds
self.setobject=Jobject
self.pcontrol=pcontrol def run(self): #self.setobject.setResult('Nmap task for '+self.runcms[5]+' is running\n') child1 = subprocess.Popen(self.runcms, stdout = subprocess.PIPE, stdin = subprocess.PIPE, shell = False) child1.poll() resultScan = child1.stdout.read() self.setobject.setResult(resultScan) #self.setobject.setResult('Nmap task for '+self.runcms[5]+' is finnished\n') self.pcontrol.subnum() self.stop() def stop(self): self.thread_stop = True
单个IP地址扫描结果
C段扫描结果
通过之前的联动sqlmap的插件,实现了三神器:burpsuite,sqlmap和nmap的三位一体化。
0×02 子域名查询
当前子域名查询的方案我知道的有三个:一个是通过bing的语法查询,第二个是通过二级域名的集合网站,第三个则是进行DNS爆破。三种方案比较好的是第三种方案,比较优秀的轮子是subdomainsbrute。当然最好的方法是三种方案全部使用,只需要一个好的去重方式,我这边用的是第一个方案,别问我为什么:写起来简单。
调用bing的主函数
def BingSearch(query): payload={}
payload['$top']=top
payload['$skip']=skip
payload['$format']=format
payload['Query']="'"+query+"'" url='https://api.datamarket.azure.com/Bing/Search/Web?' + urllib.urlencode(payload)
sAuth='Basic '+base64.b64encode(':'+BINGKEY)
headers = { }
headers['Authorization']= sAuth try:
req = urllib2.Request(url,headers=headers)
response = urllib2.urlopen(req)
data=response.read() #print data data=json.loads(data) return data except Exception as e: print e #print e.info() urlList = [] returnData = BingSearch("domain:" + theTopDomain) if not returnData['d']['results']: print "The Url Error" else: for tarUrl in returnData["d"]["results"]: tmpUrl = urlparse.urlparse(tarUrl["Url"]).netloc if tmpUrl not in urlList: urlList.append(tmpUrl)
0×03 敏感文件扫描
敏感文件扫描也是信息采集重要的一步,通过文件扫描往往会有有意想不到的收获。第三个功能仿御剑大牛的设计
并发20线程,速度还算说的过去
除此之外这个有个特点就是能完整继承Proxy标签中的http请求头信息包括ua和cookie
用的是httplib库,一开始用的是urllib2库,但在burpsuite下多线程并发各种问题,浪费了不少时间
try:
connection = httplib.HTTPConnection(self.hostUrl)
connection.request("GET", self.eachUrl, "", self.theDict)
time.sleep(0.1)
response = connection.getresponse() if response.status == 200 or response.status == 302 or response.status == 301:
theDisMess = "http://" + self.hostUrl+self.eachUrl + "----------" + str(response.status) + os.linesep #print theDisMess self.luoAgain.setResult3(theDisMess) if connection: connection.close() except : if connection: connection.close() pass finally: if connection: connection.close()
如果时间允许的话,我打算写成一个系列。下次打算写个端口扫描的工具,插件名字是 The High Priestess(女祭司)
完整的源代码在:https://github.com/5ir1us/Tarot/tree/master/s1riu5TheMagician
*本文作者:山东安云(企业账号)