您当前的位置: 首页 >  合天网安实验室

安服福音--第一弹!wvs结果批量整理工具

合天网安实验室 发布时间:2018-05-28 20:41:00 ,浏览量:3

本文原创作者:3s_NwGeek

原创投稿详情:重金悬赏 | 合天原创投稿等你来!

0x01 应用背景

无论是安全服务的苦逼还批量挖洞的渗透伙伴时不时会使用到wvs批量扫描,而且结果要逐个打开wvs报告,然后把漏洞整理漏洞等级、名称、描述、修复建议到excel里。历经40小时开发和调整,现在实现了自动化完成而且免python环境执行,批量输出漏洞等级,漏洞名称,漏洞url,扫描资产的url,还自动翻译漏洞名称、漏洞描述和修复建议英文,大大改善重复体力工作。

0x02 使用示范

wvs批量提取扫描结果工具使用说明书。已升级到3.0版本,比较完善,可以提取漏洞等级,漏洞名称,漏洞url,扫描地址,漏洞参考数据包,漏洞描述,漏洞修复建议,使用百度翻译api,自动翻译,联网即可使用。

  1. 使用wvs 10.5

  2. 批量扫描时,使用以下模式生成报告(Affected Items)

  3. 生成html报告

  4. 扫描完成结果会自动存放在C:\Users\Public\Documents\Acunetix WVS 10\Saves

  1. 打开cmd,把wvsReprot3.0.exe拖进cmd (需要联网环境)

  1. 然后再加保存wvs扫描结果的文件夹的路径

  2. (默认是这个: C:\Users\Public\Documents\Acunetix WVS 10\Saves)

  1. 回车执行即可输出报告

  1. 输出结果示例如下:

漏洞等级|漏洞名称|漏洞url| 扫描资产|参考数据包|漏洞描述|修复建议

按照是wvs报告使用百度翻译api输出。

工具在文末发放!

0x03 实现原理

1.python爬虫

2.python excel处理模块

3.百度翻译api

4.python 2 exe 打包编译

1.首先来看一下wvs报告的html格式

每个扫描到的漏洞的信息都会有标签顺序

漏洞url

Alertgroup 漏洞名称

漏洞等级

漏洞描述

漏洞参考数据包

漏洞修复建议

所以大概实现的原理只需定位一个Alertgroup,然后再上下按顺序找每个特定的标签即可。

Python爬虫只爬取中高危漏洞

用到模块

importos,sys,re      #文件i/o
frombs4 importBeautifulSoup #标签爬取
importhttplib,md5,urllib,random,time#baidu翻译

importxlwt#excel写入

关键代码如下

sites= soup.find_all(class_=re.compile('^s'),text="Alertgroup")
#获取host
tem=str(soup.find_all(class_=re.compile('^s'),text=re.compile('^Scanof'))[0].string).split("/")
host=(tem[0].replace("Scanof ","")+"//"+tem[2])
scanurl= str(soup.find_all(class_=re.compile('^s'),text=re.compile('^Scanof'))[0].string).replace("Scanof ","")#扫描的资产url,跟漏洞url会不一样

===================================================================
#定义标准attrs爬取
#漏洞名称attrs爬取
vulname_attrs=sites[0].find_next(class_=re.compile('^s')).attrs
#漏洞等级attrs爬取
vullevel_attrs=sites[0].find_next(class_=re.compile('^s')).find_next(class_=re.compile('^s')).find_next(class_=re.compile('^s')).attrs
#漏洞urlattrs爬取
vulurl_attrs=sites[0].find_previous(class_=re.compile('^s')).attrs
test=sites[0].find_previous(class_=re.compile('^s'))
if"Parameter"intest.find_previous(class_=re.compile('^s')).string:
   vulurl_attrs =test.find_previous(class_=re.compile('^s')).find_previous(class_=re.compile('^s')).attrs

##############################

#漏洞描述爬取
vuldes= site.find_next(class_=re.compile('^s'),text="Description").find_next()
vuldes= ''.join(vuldes.parent.stripped_strings)
vuldes= str(vuldes).decode("unicode_escape")
vuldes= translate(vuldes)#百度翻译
time.sleep(1)              #百度翻译api只允许1秒1次
#print vuldes
##############################
# 修复建议爬取
vulre= site.find_next(class_=re.compile('^s'),text="Recommendations").find_next()
vulre= ''.join(vulre.parent.stripped_strings)
vulre= str(vulre).decode("unicode_escape")
vulre= translate(vulre)#百度翻译
time.sleep(1)              #百度翻译api只允许1秒1次

###############################
#获取数据包
try:
  requestattrs = vulname.parent  #漏洞名tag
  request =site.find_previous(attrs=vulurl_attrs).string # 路径
  #上面已定义sep= re.compile(r'\s*\((.*?)\).*?' )          #同一个漏洞不同参数会出现路径后有(md5)导致出错,正则去除
  request = sep.sub('',request)
  rex = "^(GET|POST|OPTION|DELETE).+"+ request + ".+" # 正则
  if request== "Web Server" andrequest =="/":
       req = "WebServer"
   else:
      req = requestattrs.find_next(text=re.compile(rex))
      req=''.join(req.parent.stripped_strings) # 数据包tag
      req =str(req).decode("unicode_escape")
exceptException asdes:
   req="Nodata"

2.python excel处理模块

file= xlwt.Workbook(encoding ='utf-8') # 注意这里的Workbook首字母是大写,
table= file.add_sheet('wvs')
table.col(1).width=320*20
table.col(2).width=320*20
table.col(3).width=320*20
table.col(4).width=220*20
table.col(5).width=520*20
table.col(6).width=520*20
table.write(k,0, u"漏洞等级")#写入第一行
table.write(k,1,u"漏洞名称")
table.write(k,2,u"漏洞url")
table.write(k,3,u"扫描资产url")
table.write(k,4,u"漏洞参考数据包")
table.write(k,5,u"漏洞描述")
table.write(k,6,u"修复建议")
table.write(k,7,u"漏洞验证")
table.write(k,8, u"备注")

table.write(k,0,vullevel) #写入爬取的标签
table.write(k,1,vulname)
table.write(k, 2,vulurl)
table.write(k, 3,scanurl)
table.write(k, 4,req)
table.write(k, 5,vuldes)
table.write(k, 6,vulre)

genpath="%s\\wvsReport.xls"%sys.argv[1]      # 保存文件
file.save(genpath)
print"\n\n\n\nVultotal:", k
print"xls Report in%s\\wvsReport.xls"%sys.argv[1]

3.百度翻译api

比较好理解:输入英文输出中文

deftranslate(WORD):
   appid ='20151113000005349'
  secretKey = 'osubCEzlGjzvw8qdQc41'
  httpClient = None
  myurl = '/api/trans/vip/translate'
  q = WORD
   fromLang ='en'
   toLang= 'zh'
   salt= random.randint(32768,65536)
  sign = appid+q+str(salt)+secretKey
  m1 = md5.new()
   m1.update(sign)
   sign =m1.hexdigest()
   myurl =myurl+'?appid='+appid+'&q='+urllib.quote(q)+'&from='+fromLang+'&to='+toLang+'&salt='+str(salt)+'&sign='+sign
  try:
      httpClient = httplib.HTTPConnection('api.fanyi.baidu.com')
      httpClient.request('GET',myurl)
       response = httpClient.getresponse()
      trword=response.read().split("\"")[-2].decode('unicode_escape')
  except Exception,e:
       print e
  finally:
      if httpClient:
          httpClient.close()
   returntrword

4.python 2 exe 打包编译

使用py2exe

fromdistutils.core importsetup
importpy2exe
#cli # python C:\Users\lenovo\PycharmProjects\untitled\test100\打包.pypy2exe

def main():
 setup(console=["C:\Users\lenovo\PycharmProjects\untitled\\3s_NwGeek\work\\wvsReport.py"])
if__name__ == '__main__':
   main()
   pass

编译打包后就可以不需要python环境运行。

0x04 文末福利

工具分享链接

链接:https://pan.baidu.com/s/1a3crdN-UFf-1WBeUa5SWcg

密码:mo32

看不过瘾?合天2017年度干货精华请点击《【精华】2017年度合天网安干货集锦》

别忘了投稿哦!

合天公众号开启原创投稿啦!!!

大家有好的技术原创文章。

欢迎投稿至邮箱:edu@heetian.com

合天会根据文章的时效、新颖、文笔、实用等多方面评判给予100元-500元不等的稿费哟。

有才能的你快来投稿吧!

点击了解投稿详情 重金悬赏 | 合天原创投稿等你来!

关注
打赏
查看更多评论

合天网安实验室

暂无认证

  • 3浏览

    0关注

    728博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录