0×00

之前写过burpsuite联动sqlmap的插件,这次是一个信息采集的插件,插件名字是TheMagician。是“渗透测试重心由Windows转移至Mac”计划的一小步。本来想简单写写的,但是越写越麻烦,幸亏基友的鼎力相助,总算顺利完成。

在使用该插件之前需要修改三个全局变量,分别是NMAPPATH,BINGKEY以及HOMEPATH,其他的全局变量不需要改

Clipboard Image.png

插件的使用和联动sqlmap插件的一样遵循”简单就是美”的原则通过右键单击最简单的调用

Clipboard Image.png

创建右键菜单的源代码

    #创建菜单右键     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

三个标签代表三个不同的功能

Clipboard Image.png

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地址扫描结果

Clipboard Image.png

C段扫描结果

Clipboard Image.png

通过之前的联动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) 

Clipboard Image.png

0×03 敏感文件扫描

敏感文件扫描也是信息采集重要的一步,通过文件扫描往往会有有意想不到的收获。第三个功能仿御剑大牛的设计

Clipboard Image.png

并发20线程,速度还算说的过去

Clipboard Image.png

除此之外这个有个特点就是能完整继承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() 

Clipboard Image.png

如果时间允许的话,我打算写成一个系列。下次打算写个端口扫描的工具,插件名字是 The High Priestess(女祭司)

完整的源代码在:https://github.com/5ir1us/Tarot/tree/master/s1riu5TheMagician

*本文作者:山东安云(企业账号)