【一起玩蛇】python武器库的打开方式

网上有很多python相关的学习资料,但适用于具体场景的解读方式却较少。于是乎,突然想起开启“一起玩蛇”这一系列,想以最基础最简单的方式打开python,在渗透测试或安全领域进行浅浅的应用,自定义实现期望的操作,高效学习,高效工作,高效生活。

1 、实现功能

作为网络安全从业者,想必都看到过“安全行业从业人员自研开源扫描器合集”(https://github.com/We5ter/Scanners-Box)

其中不乏有很多优秀的项目,无论是从功能,还是工具框架与实现思路都值得借鉴。如果一个个去翻阅然后下载,会变得十分麻烦;如果可以全都下载到本地用编辑器去打开,那将非常便利。因此,便有了写个小脚本去实现批量下载的想法。

2、基础知识

2.1 基础环境

系统环境:win10

语言环境:python 2.7.13

所需模块:re, urllib2

2.2 文件下载

使用python实现文件下载,通常可以使用以下三种方式:

(1)urllib

(2)urllib2

(3)requests

2.3 流程分析

在进行脚本编写前,需要了解github上这些工具的页面结构以及下载流程。

(1)页面分析

访问https://github.com/We5ter/Scanners-Box并查其源码,以第一类工具SubdomainScanners or Enumeration Tools中的第一个工具subDomainsBrute为例,在源码中确定其具体位置:

(2)下载流程

当页面上点击subDomainsBrute时,实际上是通过https://github.com/lijiejie/subDomainsBrute跳转至工具的主页面:

当点击Download ZIP时,可以看到下载链接为:https://codeload.github.com/lijiejie/subDomainsBrute/zip/master

重新下载一个工具,比如:wydomain,下载链接为:https://codeload.github.com/ring04h/wydomain/zip/wydomain2

(3)地址提取

通过手工从Scanners-Box下载几款工具,梳理对应的链接以及下载链接:

不难看出工具实际的下载链接可由两部分组成:

不得不说,关于作者更新过版本的工具存在特殊情况,比如wydomain,实际下载链接为https://codeload.github.com/ring04h/wydomain/zip/wydomain2,但通过https://codeload.github.com/ring04h/wydomain/zip/master也能下载,不过应该是旧版本:

类似的情况并不多,所以该脚本中均构造/zip/master结尾的网址来实现工具的下载。

(4)本地保存

在上一部分中已经介绍常见的文件下载方式,此处采用urllib2来实现该功能。

3、脚本编写

按照上面的流程,可以把整个功能的实现分为三个小块,编写边调试。

3.1 获取所有工具地址功能

通过正则匹配出工具在Scanners-Box中显示的链接,此时获得的是数组[(工具1-a, 工具1-b, 工具1-c,), (工具2-a, 工具2-b, 工具2-c,), (), …]

3.2 提取所有工具名称功能

将获取的工具数组,按照不用工具(一个工具一个元组)提取出第一个URL,再将其按照左斜杠分割,提取出倒数第一个或第二个作为下载至本地的名称。

3.3 构造下载链接并保存本地

先构造完整的下载链接,再替换域名,获得真正的下载地址。

通过urllib2去请求资源并根据工具名保存到本地。需要注意的是根据工具名保存下载的压缩包文件,并设置异常与下载完成的提示信息。

4、结果展示

完整的脚本如下:

# -*- coding:utf-8 -*-# Author : aerfa# Functions :批量下载“安全行业从业人员自研开源扫描器合集 https://github.com/We5ter/Scanners-Box” import urllib2import re def downloadGithub(target): req = urllib2.urlopen(target)result = req.read()pContent = re.compile(r'''<li><a href="(.+?)">(.+?)</a> (.+?)</li>''')mContent = pContent.findall(result)for row in mContent: content = row[0] line = content.rstrip('\n') tool = line.split('/') if tool[-1] : toolName = tool[-1] else: toolName = tool[-2] print toolName url = content + '/zip/master' url = url.replace('https://github.com', 'https://codeload.github.com') print url try: f = urllib2.urlopen(url) print f.code data = f.read() with open('%s.zip' % toolName, 'wb') as code: code.write(data) print 'downloading %s over!' % toolName except urllib2.URLError as e: if hasattr(e, 'code'): print 'Error code:', e.code elif hasattr(e, 'reason'): print 'Reason:', e.reason print 'downloading github-resources success!' def main(): sourceUrl = "https://github.com/We5ter/Scanners-Box" downloadGithub(sourceUrl) if __name__ == '__main__': main()

download_github_tools.py运行效果:

在桌面上已经有下载完成的文件,具体路径可以在open()中进行设置。

5、注意事项

整个实现过程相对简单,不过对于新手可能会遇到:

在对URL进行拼接时,变成两行而不是完整的一行URL。这是由于在每行换行时使用了回车,可以通过line.rstrip('\n')移除换行符。

原文发布于微信公众号 - 我的安全视界观(CANI_Security)

原文发表时间:2018-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

7 条评论
登录 后参与评论

相关文章

来自专栏Youngxj

Windows7上帝模式?手把手教你打开!

1725
来自专栏美丽应用

为安卓Chrome加入自定义手势控制

2433
来自专栏针针小站

【Skill】PageSpeed – 利用七牛云加速Gravatar

1065
来自专栏Android-JessYan

MVPArms官方首发一键生成组件化,体验纯傻瓜式组件化开发

原文地址: https://www.jianshu.com/p/2452ea776a45

903
来自专栏SAP最佳业务实践

SAP最佳业务实践:ETO–报价处理(232)-5连接WBS与询价

image.png VA12连接WBS与询价 一旦你创建了项目,你就可以把WBS元素分配给它控制的销售单据行项。 项目和询价已在系统中创建。 后勤® 销售和分销...

2833
来自专栏西枫里博客

阿里短信通知的接入与实现(二)暨云通信短信平台API接口调用

事情变化太快,上线还不到一个月的注册短信验证功能就遇到了平台搬家的尴尬。阿里云发了一个邮件通知。原淘宝短信和阿里云市场短信将迁移到云通信平台,自2018年1月2...

843
来自专栏ytkah

小程序与小游戏使用wx.getUserInfo 接口直接弹出授权框的开发方式将逐步不再支持

各位小程序开发者注意了:从2018年4月30日开始,小程序与小游戏的体验版、开发版调用 wx.getUserInfo 接口,将无法弹出授权询问框,默认调用失败。...

5365
来自专栏SAP最佳业务实践

SAP最佳业务实践:ETO–项目装配(240)-14开始生产

CJ20N开始生产 image.png 在此步骤中审批 WBS 要素生产。 角色项目经理 后勤®项目系统®项目®项目构造器 1. 在工作清单中选择相关项目 (...

3286
来自专栏HaHack

comment.js:一个纯JS实现的静态站点评论系统

1394
来自专栏全华班

基于Maven构建的springmvc/shiro/easyui权限快速开发框架(含高清脑图)

基于springmvc、spring、mybatis-plus、shiro、easyui、Log4j2简单实用的权限系统。界面基于EasyUI,图标采用较为开放...

722

扫码关注云+社区