当前位置: 首页 > 后端技术 > Python

从0开始写一个信息收集器

时间:2023-03-26 16:59:58 Python

从0开始写一个信息收集器0x00简介我们都知道信息收集是整个渗透测试不可或缺的一部分,所以我们总是需要一类信息来查询,非常耗时,(人生苦短,我用的是python)那我想做一个信息收集器,当然这样的工具有很多,可以说有那么多,那我为什么还要继续写呢,主要是为了练习的套路写工具(工具很渣(1.0版本),主要是思路,一篇文章,纯属废话),然后卖一波python广告,哈哈哈。0x01需求分析在编写工具之前首先要进行需求分析。只要把握好需求,就可以明确自己的写作方向,否则就会出现我让你给我面包,你给我巧克力的情况,真是哭笑不得。需求分析需要对“需求”或“需求”进行分析整理,确认后形成完整、清晰、规范的文档,以确定需要实现哪些功能,完成哪些任务。当然,你在这里编写自己的工具,所以工具的需求是由你而不是其他人决定的。这增加了我们工具的灵活性。大家可以尽量参考前人写的工具,取长补短,各取所需。完善自己的工具,增强工具的附着力。0x00平台选择首先要明确我们的工具会运行在哪个或哪些平台上,但是据我所知,安全界的大部分工具都是寄生在Linux平台上的,当然也有很多工具是有相应的Windows版本。适应Windows环境。那我们就可以按照这里前辈的步伐,选择Liunx平台。至于其他的平台,有空余的时候可以考虑实现(后面改进了window下的操作)。0x01FunctionalRequirements我们把需求列在这里,只要把需求定义清楚了,后面的写就不会陷入走错路的境地了。1.whois信息2.DNS记录3.端口状态4.子域名5.主机系统信息6.Robots.txt7.服务信息8.指纹识别0x02资源整合在一般开发中其实不存在这一步,但是在为了让大家了解我这个工具的开发过程,这里特意摘录一下。我们知道我们的信息采集功能难免会借用网站资源或辅助工具。这里所说的网站资源是指搜索引擎、工具网站等,辅助工具一般是Nmap。当然还有很多其他的工具,这里就不一一列举了。0x00网站资源一些特定网站提供的功能可以很好的帮助我们完成信息收集的任务,比如站长之家,who.is等,这些网站可以为我们提供whois相关的信息,减少我们的时间成本,在线获取信息简单方便。看图说话,把网址分类汇总,方便后续工作(我写的是我用的,国内访问不了小谷子)。0x01辅助工具我写的1.0版本需要用到辅助工具Nmap(众神之眼),所以简单介绍一下Nmap。Nmap简介Nmap(NetworkMapper)是一种开源工具,可实现专业的网络探测和安全审计。最初由Gordon"Fyodor"Lyon发布。官方网站官方网站是http://nmap.org。Nmap是一个免费的开源程序,用于网络检测和安全审计。许多系统和网络管理员发现它对一些日常任务也很有帮助。例如查看全网信息、管理业务升级计划、监控主机和业务的正常运行等。0x03设计工具经过艰苦的准备,我们要开始进入工具设计阶段了。这个阶段我们会选择面向对象的思想,而不是面向编程。我把设计阶段分为几个阶段:1.工具启动阶段。2.工具运行阶段。3.工具结束阶段。0x04代码编写写之前最好先画一个工具结构图:然后我们根据我们的结构图新建一个文件,然后根据我们上面的要求写我们的py文件。这里我只拿出最核心的main函数来说明我们在编写工具的时候是如何尝试使用分层和模块思维的。!/usr/bin/envpython#--编码:utf-8--"""@version:v1.0@author:yumu@software:PyCharm@file:Stealth.py@time:2018/3/3113:12"""importosfromutil.welcomeimportWelcomefromutil.helpimportHelpfromutil.is_selectimportselectifname=='__main__':script_path=os.path.dirname(os.path.abspath(__file__))_cache_path=os.path.join(script_path,'output/')ifnotos.path.exists(_cache_path):os.makedirs(_cache_path,777)(arg,domain)=Help.parse_args()ifdomain=='':欢迎().headline()Help.help_info()else:select(arg,domain)从上面可以看出该工具的主要功能代码非常简洁,主要是分层和模块化的思想。将每个py文件需要完成的功能分成相应的模块。分层是一种分而治之的思想,可以提高开发效率,降低维护成本。0x05创建并上传github项目。不明白的可以看这篇文章:https://jingyan.baidu.com/art...我主要说一下本地上传github的步骤(一定要按照步骤来):1.进入我们项目所在的路径2.gitstatus-s列出当前目录下所有没有被git管理过的,被git管理过的,修改过但还没有提交的文件3.gitadd。添加文件(全部添加)或gitaddfile(单个文件名)4.gitcommit-m"Comment"(建议对单个文件进行注释,方便其他人阅读)5.gitpush-uoriginmaster推送完成后提交代码到远程git仓库,可以登录github查看将代码和记录本地提交到仓库。如果项目有更新,想同步girhub,也可以按照上面的步骤操作。我将最后两个步骤的图片发布如下。然后是我们项目的语言设置。在这方面,github非常认可。不准确,我们需要把语言改成python,我们需要新建一个文件。文档非常重要。README.md文件是一个项目的介绍手册,需要描述项目的用途、运行环境、使用方法、版本更换信息等。下面结合本人项目的详细文档(大家可以参考),介绍如何编写README.md文件。0x061。项目描述描述项目的功能和作用描述Stealth是一个收集CMS、WHOIS、DNS、robots.txt、子域名、端口信息、系统信息、服务信息的工具。0x062。工具运行的运行环境详解运行环境python3+linuxorwindowsmap(nmap加入环境变量)0x063。安装指南详细描述了如何安装该工具安装指南linuxgitclonehttps://github.com/ANyedt/Ste...cdStealthpipinstall-rrequirements.txtwindowgitclonehttps://github.com/ANyedt/Stealthpipinstall-rrequirements.txt0x064。项目结构方便别人了解项目的结构。├──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│└──subdomainin.html(匹配域名)Matchdomainname│└──nmap_info_result.txt(系统信息,端口信息等)Systeminformation,portinformation等│└──dns。html(dns信息)DNS信息├──static(静态资源目录)Staticresourcedirectory├──util(函数目录)Functionfunctiondirectory├──.gitattributes(语言设置)Languagesettings└──README.md(文档)Documentation0x065。配置指南描述配置信息配置指南配置目录:config/config.py(配置目录:config/config.py)!/usr/bin/envpython#--encoding:utf-8--"""@version:v1.0@author:yumu@software:PyCharm@file:config.py@time:2018/3/3117:29"""importsysimportrandom#SSLcertificateverification(SSL证书验证)allow_ssl_verify=True#----------------------------------------------#请求配置项(请求配置项)#------------------------------------------------#超时时间timeout=60#是否允许URL重定向(WhethertoallowURLredirection)allow_redirects=True#是否使用session(是否使用session)allow_http_session=True#是否随机使用User-Agent(Whether随机使用User-Agent)allow_random_user_agent=False#代理配置(Agentconfiguration)allow_proxies={}USER_AGENTS=["Mozilla/5.0(Macintosh;IntelMacOSX10_7_3)AppleWebKit/535.20(KHTML,如Gecko)""Chrome/19.0.1036.7Safari/535.20","Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;AcooBrowser;.NETCLR1.1.4322;.NETCLR2.0.50727)","Mozilla/4.0(兼容;MSIE7.0;WindowsNT6.0;Acoo浏览器;SLCC1;.NETCLR2.0.50727;""MediaCenterPC5.0;.NETCLR3.0.04506)","Mozilla/4.0(兼容;MSIE7.0;AOL9.5;AOLBuild4337.35;WindowsNT5.1;.NETCLR1.1.4322;"".NETCLR2.0.50727)","Mozilla/5.0(Windows;U;MSIE9.0;WindowsNT9.0;en-US)","Mozilla/5.0(兼容;MSIE9.0;WindowsNT6.1;Win64;x64;Trident/5.0;“”.NETCLR3.5.30729;.NETCLR3.0.30729;.NETCLR2.0.50727;MediaCenterPC6.0)”,“Mozilla/5.0(兼容;MSIE8.0;WindowsNT6.0;Trident/4.0;WOW64;Trident/4.0;SLCC2;”).NETCLR2.0.50727;.NETCLR3.5.30729;.NETCLR3.0.30729;.NETCLR3.0.30729;.NETCLR1.0.3705;.NETCLR1.1.4322)”,“Mozilla/4.0(兼容;MSIE7.0b;WindowsNT5.2;.NETCLR1.1.4322;.NETCLR2.0.50727;”“InfoPath.2;.NETCLR3.0.04506.30)","Mozilla/5.0(Windows;U;WindowsNT5.1;zh-CN)AppleWebKit/523.15(KHTML,likeGecko,Safari/419.3)""Arora/0.3(Change:287c9dfb30)","Mozilla/5.0(X11;U;Linux;en-US)AppleWebKit/527+(KHTML,likeGecko,Safari/419.3)Arora/0.6","Mozilla/5.0(Windows;U;WindowsNT5.1;en-US;rv:1.8.1.2pre)Gecko/20070215K-Ninja/2.1.1","Mozilla/5.0(Windows;U;WindowsNT5.1;zh-CN;rv:1.9)Gecko/20080705Firefox/3.0Kapiko/3.0","Mozilla/5.0(X11);Linuxi686;U;)Gecko/20070322Kazehakase/0.4.5","Mozilla/5.0(X11;U;Linuxi686;en-US;rv:1.9.0.8)GeckoFedora/1.9.0.8-1.fc10Kazehakase/0.5.6","Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.56Safari/535.11","Mozilla/5.0(Macintosh;IntelMacOSX10_7_3)AppleWebKit/535.20(KHTML,likeGecko)""Chrome/19.0.1036.7Safari/535.20","Opera/9.80(Macintosh;IntelMacOSX10.6.8;U;fr)Presto/2.9.168Version/11.52",]#随机生成User-Agent(随机生成User-Agent)defrandom_user_agent(condition=False):ifcondition:returnrandom.choice(USER_AGENTS)else:returnUSER_AGENTS[0]#User-Agentsettings(用户代理设置)headers={'User-Agent':random_user_agent(allow_random_user_agent)}#nmap命令设置(Nmap命令设置)nmap_cmd_line=""0x065.UsageUsage描述该工具如何使用Usage1。首先是fullscan(收集所有信息)pythonStealth.py-ahttp://xxx.xxx(1.Thefirstisfullscan(collectallinformation)http://pythonStealth.py-axxx....(收集一些信息)例如:collectcmsandsubdomaininformationpythonStealth.py-s-c-Dhttp://xxx.xxx(2.第二次选择性扫描(收集一些信息例如:收集cms和子域信息)注意:当我们使用selectivescanning,必须加-D选项,后面加target(注意:使用selectivescanning时必须加-D选项,后面加target)检测cms信息时可能会出现连接错误,忽略0x066即可帮助信息帮助信息使用:pythonStealth.pydomain[-h][-a][-D][-d][-s][-R][-I][-c][-w][-q]收集message可选参数:-h,--help显示此帮助信息并退出-a,--all执行所有操作-D,--domainDoamin-d,--dnsDNS信息-s,--subdomain子域信息-R,--robots查询Robots.txt-I,--info服务信息和端口信息和系统Info-c,--cmsCmsInformation-w,--whoisWhois信息-q,--quit退出0x067。DemoDemoDemopythonStealth.py-ahttp://www.baidu.comScreenshotsThefinalresultisstoredintheoutputdirectory(Thefinalresultisstoredintheoutputdirectory.)0x068。版本变更信息CHANGELOG2018/3/31vsession:1.0.00x069。项目参考说明项目参考wydomainhttps://github.com/ring04h/wy...总结一下,这个工具就是一个简单的小爬虫,但是我们要学会去尝试模仿。有时候只有做简单的事情,才知道其中的难处。会继续改进。最后,如果对项目有其他建议,或者bug反馈项目地址:https://github.com/ANyedt/Ste...作者:CanMengBlog来源:CSDN原文:https://blog.csdn.net/weixin_...版权声明:本文为博主原创文章,转载请附上博文链接!