共计 7788 个字符,预计需要花费 20 分钟才能阅读完成。
从 0 开始编写信息收集器 0x00 引言
我们都知道在信息收集是整个渗透测试中无可或缺的一环,那我们老是需要一类一类信息去查询非常耗费时间,(人生苦短,我用 python)那这时我就想做一个信息收集器,当然这类工具很多,简直可以说是多如牛毛,那为啥我还要继续写呢,主要是练习编写工具的套路(工具很渣渣(1.0 版本),主要讲思想,纯粹抛砖引玉的一篇文章),然后卖一波 python 的广告,哈哈哈。
0x01 需求分析
首先我们在编写工具之前我们必须进行需求分析,只要把握好需求,我们明确自己编写的方向,不然会出现我要你给我面包,你给我巧克力的情况,真是使人哭笑不得。需求分析需要把“要求”或“需要”进行分析与整理,确认后形成描述完整、清晰与规范的文档,确定需要实现哪些功能,完成哪些工作。当然这里是你自己编写自己的工具,所以工具的需求就由你自己决定而非别人,这样增加了我们工具的灵活性,我们可以尽量多去参考前人写的工具,取长补短,尽自己的努力去完善自己的工具,增强工具的粘合性。
0x00 平台选择
首先我们必须明确我们工具将要运行那种平台或者那些平台下,但是据我所知安全界绝大部分的工具都是寄生在 Linux 平台下,当然也有很多工具出了对应的 Window 版本来适应 Window 环境。那我们这里还是紧跟前人的步伐选择 Liunx 平台即可,至于其他平台大家有余力的时候可以考虑去实现(后面已经完善了 window 下的运行)。
0x01 功能需求
我们这里列出需求,只有明确好需求,后面编写就不会陷入南辕北辙的局面。
1.whois 信息
2.DNS 记录
3. 端口状态
4. 子域名
5. 主机系统信息
6.Robots.txt
7. 服务信息
8. 指纹识别
0x02 资源整合
其实在一般的开发中是不存在这一步的,但我这里为了让大家更理解我这个工具的开发流程就特意抽出来讲。我们知道我们在进行信息收集的功能无可避免会借用到网站资源或者辅助工具。这里说的网站资源指的是搜索引擎、工具网站等等,而辅助工具一般会是 Nmap,当然还有很多其他的工具,我这里就不列举了。
0x00 网站资源
某些特定网站提供的功能能很好辅助我们完成信息收集的任务,例如站长之家,who.is 等这些网站能为我们提供 whois 的相关信息,减少我们的时间成本,而且在线获取信息简单方便。
我们看图说话,我们按类别对网址进行归纳一下,方便后续的工作(用到的我在写,国内访问不了小谷子)。
0x01 辅助工具
我写的 1.0 版本是需要使用辅助工具 Nmap(诸神之眼),那我们我们就来简单介绍一下 Nmap。
Nmap 介绍
Nmap (网络映射器)是一个开源工具,它使网络探测和安全审计得以专业化。最初由 Gordon“Fyodor”Lyon 发布。官网官方网站是 http://nmap.org. Nmap 是一个免费的用来实现网络探测和安全审计的开源程序。许多系统和网络管理员发现它对于一些日常的工作也有帮助。例如查看整个网络的信息,管理服务升级计划以及监控主机和服务的正常运行。
0x03 设计工具
经过辛苦的准备工作紧接着我们就得开始进入工具设计阶段了,在这个阶段我们会选择面向对象的思想而不是面向编程。我把设计阶段分了几个阶段:1. 工具启动阶段。2. 工具运行阶段。3. 工具结束阶段。
0x04 代码编写
在我们编写之前最好画一个工具的结构图:
然后我们根据我们得结构图先新建好文件,然后根据我们上面的需求对编写我们的 py 文件。
我这里只拿出核心的主函数来讲解一下我们编写工具时的尽量使用分层,模块思想。
!/usr/bin/env python # –– encoding: utf-8 –-“”” @version: v1.0 @author: yumu@software: PyCharm @file: Stealth.py @time: 2018/3/31 13:12 “””import osfrom util.welcome import Welcomefrom util.help import Helpfrom util.is_select import selectif name == ‘__main__’: script_path = os.path.dirname(os.path.abspath(__file__)) _cache_path = os.path.join(script_path, ‘output/’) ifnot os.path.exists(_cache_path): os.makedirs(_cache_path, 777) (arg, domain) = Help.parse_args() if domain == ”: Welcome().headline() Help.help_info() else: select(arg, domain)
从上面看出来工具的主函数代码是非常简洁的,主要是因为采用了分层,模块思想。把每个 py 文件需要完成的功能做了划分做成了对应的模块,分层是一个分治的思想,提高开发效率,降低维护成本。
0x05 新建并上传 github 项目
如果不懂得可以看看这篇文章:https://jingyan.baidu.com/art…
我这里主要讲一下本地上传 github 的几步(必须按步骤来):
1. 进入我们项目所在的路径
2.git status -s 列出当前目录所有还没有被 git 管理的文件和被 git 管理且被修改但还未提交
3.git add . 添加文件(添加所有) 或者 git add file(单个文件名)
4.git commit -m “ 注释 ”(建议大家对单个文件注释,这样方便他人阅读)
5.git push -u origin master 提交代码到远程 git 仓库
push 完成之后,登录 github 上可以查看到本地提交到仓库的代码和记录
如果项目更新了想同步 girhub 也可以按上面的步骤进行操作,我贴了最后两步的图如下
然后就是我们项目语言的设置,在这一方面 github 识别的非常不准确,需要我们自己更改语言为 python,我们需要新建一个文件.gitattributes , 然后添加内容如下:
.js linguist-language=python.css linguist-language=python*.html linguist-language=python
0x06 编写说明文档
说明文档至关重要,README.md 文件是一个项目的入门手册,里面需要描述项目的用途、运行环境、如何使用、版本更替信息等等。下面结合我项目详细说明文档介绍一下如何编写 README.md 文件(大家可以参考一下)。
0x061. 项目描述 描写项目的功能和作用 Description
Stealth 是一款收集 CMS、WHOIS、DNS、robots.txt、子域名、端口信息、系统信息、服务信息的工具。
0x062. 运行环境 详细描述工具运行的环境 Operating environment
python 3+
linux or window
nmap(nmap 添加到环境变量中)
0x063. 安装指南 详细描述工具如何安装 Installation guide
linux
git clone https://github.com/ANyedt/Ste…
cd Stealth
pip install -r requirements.txt
window
git clone https://github.com/ANyedt/Ste…
cd Stealth
pip install -r requirements.txt
0x064. 项目结构 方便别人了解项目的结构 Structure.├── Stealth.py(主函数) Mainfunction├── requirements.txt(依赖库) Dependentlibrary├── config(配置文件)Profile│ ├── cms.txt(cms 规则文件) Cmsrulefile│ ├── config.py(参数配置) Parameterconfiguration├── output(输出目录) Outputdirectory│ ├── whois1.html (whois 信息) Whoisinformation│ └── whois2.html (whois 信息) Whoisinformation│ └── rebots.txt (rebots.txt 信息) Rebots.txtinformation│ ├── subdomain.xls (子域名信息) Subdomaininformation│ └── subdoamin.html (匹配域名) Matchdomainname│ └── nmap_info_result.txt (系统信息,端口信息等) Systeminformation, portinformation, etc.│ └── dns.html (dns 信息) DNSinformation├── static(静态资源目录) Staticresourcedirectory├── util(功能函数目录) Functionfunctiondirectory├── .gitattributes(语言设置) Languagesettings└── README.md(说明文档) Documentation0x065. 配置指南 描述配置信息 Configuration Guide
配置目录:config/config.py (Configuration directory: config/config.py)
!/usr/bin/env python # –– encoding: utf-8 –-“”” @version: v1.0 @author: yumu@software: PyCharm @file: config.py @time: 2018/3/31 17:29 “””import sysimport random# SSL 证书验证 (SSL certificate verification)allow_ssl_verify = True# ————————————————-# requests 配置项 (Requests configuration item)# ————————————————-# 超时时间 (overtime time)timeout = 60# 是否允许 URL 重定向 (Whether to allow URL redirection)allow_redirects = True# 是否使用 session(Whether to use session)allow_http_session = True# 是否随机使用 User-Agent(Whether to use User-Agent randomly)allow_random_user_agent = False# 代理配置(Agent configuration)allow_proxies = {}USER_AGENTS = [ “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) “”Chrome/19.0.1036.7 Safari/535.20”, “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)”, “Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; “”Media Center PC 5.0; .NET CLR 3.0.04506)”, “Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322;”” .NET CLR 2.0.50727)”, “Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)”, “Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0;”” .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)”, “Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2;”” .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)”, “Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727;”” InfoPath.2; .NET CLR 3.0.04506.30)”, “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3)”” Arora/0.3 (Change: 287 c9dfb30)”, “Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6”, “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1”, “Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0”, “Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5”, “Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6”, “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11”, “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) “”Chrome/19.0.1036.7 Safari/535.20”, “Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52”,]# 随机生成 User-Agent(Randomly Generate User-Agent)defrandom_user_agent(condition=False):if condition: return random.choice(USER_AGENTS) else: return USER_AGENTS[0]# User-Agent 设置(User-Agent settings)headers = {‘User-Agent’: random_user_agent(allow_random_user_agent)}# nmap 命令设置(Nmap command settings)nmap_cmd_line = “”0x065. 使用方法 Usage 描述工具如何使用 Usage
1. 第一种是全扫描 (收集所有信息) python Stealth.py -a http://xxx.xxx
(1.Thefirstisfullscan (collectallinformation) http://pythonStealth.py-axxx….(收集部分信息)例如:收集 cms 和子域名信息
python Stealth.py -s -c -D http://xxx.xxx
(2.The second selective scan (collecting some information) For example: Collecting cms and subdomain information)
注意:当我们使用选择性扫描的时候必须加上 - D 选项,后面接目标
(Note: When we use selective scanning we must add -D option followed by the target)
在探测 cms 信息的时候可能会出现连接 error,无视即可
0x066. 帮助信息 Help informationusage: python Stealth.py <OPTIONS> domain [-h] [-a] [-D] [-d] [-s] [-R] [-I] [-c] [-w] [-q]Collect messageoptional arguments: -h, –help show this help message and exit -a , –all Perform all operations -D , –domain Doamin -d, –dns Dns information -s, –subdomain Subdomain information -R, –robots Inquire Robots.txt -I, –info Service Information and port Information and System Info -c, –cms Cms Information -w, –whois Whois information -q, –quit Quit0x067. 演示 DemoDemo
python Stealth.py -a http://www.baidu.com
Screenshots
最终结果存放在 output 目录下。(The final result is stored in the output directory.)
0x068. 版本更替信息 CHANGE LOG
2018/3/31 vsesion:1.0.0
0x069. 项目参考 描述项目的参考对象 Project reference
wydomain https://github.com/ring04h/wy…
总结
总结来说这个工具就是一个简单的小爬虫,但是我们要学会尝试去模仿,有时候看起来简单的事情只有自己做了才知道其中的困难,有困难是件好事,知道自己的不足,才会不断进步。
最后对项目如有其他建议,或者 bug 反馈
项目地址:https://github.com/ANyedt/Ste…
作者:CanMengBlog
来源:CSDN
原文:https://blog.csdn.net/weixin_…
版权声明:本文为博主原创文章,转载请附上博文链接!