测试技术之渗透测试:域名爆破及端口扫描
白羽 2018-05-21 来源 :网络 阅读 959 评论 0

摘要:对每个企业的web安全都起了至关重要的作用。在渗透测试过程中,最先要做的就是信息收集,子域名爆破就是信息收集中重要的一个环节。发现的子域名越多,渗透测试的切入点就越多,也越容易找到网站弱点所在。端口扫描主要通过对枚举出来的子域名对应的IP地址的扫描来确定目标网站所用服务器的系统、所开端口等信息,进而了解目标网站的架构及应用部署情况。本文讲述了测试技术之渗透测试:域名爆破及端口扫描,希望本文对大家学测试技术有所帮助。


    对每个企业的web安全都起了至关重要的作用。在渗透测试过程中,最先要做的就是信息收集,子域名爆破就是信息收集中重要的一个环节。发现的子域名越多,渗透测试的切入点就越多,也越容易找到网站弱点所在。端口扫描主要通过对枚举出来的子域名对应的IP地址的扫描来确定目标网站所用服务器的系统、所开端口等信息,进而了解目标网站的架构及应用部署情况。


  本文使用Python脚本,实现了子域名爆破及端口扫描的自动化,通过运行Python脚本,可以对目标域名进行子域名枚举,对收集到的子域名所对应的IP地址进行端口扫描。下面介绍一下脚本实现的原理。


  脚本的运行在kali系统下,主要分为三部分,第一部分是对子域名的枚举,第二部分通过对枚举域名所对应的IP进行nmap端口扫描,将扫描的结果进行xml存储,第三部分是对xml文件的解析,将文件中IP及端口提取出来整理格式后和子域名枚举的结果一起发送邮件。


  以下是脚本代码:

 

 #coding:utf-8
  import os,sys,xml.dom.minidom,multiprocessing
  from sendmail import *
  from time import sleep
   
  def dnsbrute():
         try:
                domain ='XXX.com' #指定要进行域名爆破的域
                dnsserver ='114.114.114.114' #指定dns服务器
                os.system('rm-rf *.xml')
                os.system('dnsenum-f wydomain.csv --noreverse --dnsserver '+str(dnsserver)+' '+str(domain))
                while True:
                       ifos.system('ps -ef |grep dnsenum |grep -v grep') != 0:
                              IPlist= []
                              fori in os.popen('cut -d/ -
f 1 '+str(domain)+'_ips.txt'):
                                     IPlist.append(str(i).strip())
                              break
         except Exception,e:
                print e
         return IPlist
  def nmap_port_scan(i):
         try:
                cmd = 'nmap -sV--open -n  -Pn -oX '+i+'.xml '+i+'1>/dev/null 2>&1'
                os.system(cmd)

        

except Exception,e:
                print e
   
  def multiprocess_scan(IPlist):
         try:
                filename = []
                process = []

  

             for i in IPlist:
                       filename.append(i+'.xml')
                       process.append(multiprocessing.Process(target=nmap_port_scan,args=(i,),name="process-"+ i))
                for x inprocess:
                       x.start()
                x.join()
         except Exception,e:
                print e
         return filename
   
  def port_xml_parser(filename):
         try:

              

 total =len(filename)
                finished = 0
                remainder =len(filename)
                print '正在进行nmap扫描,请稍等:'
                while True:
                       res =os.system('ps -ef |grep nmap |grep -v grep |grep -v "/dev/null"1>/dev/null 2>&1')
                       ifres==0:
                              sleep(1)
                              status= int(os.popen('ps -ef |grep nmap |grep -v grep |grep -v "/dev/null"|wc -l 1>/dev/null 2>&1'))
                              ifstatus != remainder:
                                     remainder= status
                                     finished= total -
remainder
                                     print'扫描进度:'+str(finished)+'/'+str(remainder)+' 请等待.\n'
                              else:
                                     print '#',
                       else:
                              print'扫描进度:'+str(total)+'/'+str(total)+' 扫描已完成.\n'
                              break
                results = {}
                IPs = []
                for i infilename:
                       ports ={}
                       dom =xml.dom.minidom.parse(i)
                       root =dom.documentElement
                       ifroot.getElementsByTagName('address'):
                              ip= str(root.getElementsByTagName('address')[0].getAttribute("addr"))
                              port= root.getElementsByTagName('port')
                              service= root.getElementsByTagName('service')

                        

     forj in range(len(port)):
                                     ports[str(port[j].getAttribute("portid"))]=str(service[j].getAttribute("name"))
                              ifports!=None:
                                     IPs.append(ip)
                                     results[ip]=ports
                mail('results','results:'+str(results))
         except Exception,e:
                print e
         return results,IPs
   
  def run():
         port_xml_parser(multiprocess_scan(dnsbrute()))
   
  if __name__ == '__main__':
         run()

   

  这个脚本的意义在于自动化信息收集过程,给渗透测试人员节省出时间进行更多有针对性的测试。


    本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试技术频道!



本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程