最强*敏*感*词*化抓鸡工具构建思路
优采云 发布时间: 2020-08-09 14:49一、说明
你向他人说你是搞安全的,外行人会问你能盗QQ吗内行人会问你能拿站吗,在太长一段时间里只能反复难堪地回答不能,然后外行人就对你兴趣缺缺内行人也对你兴致缺缺。
大概2010年以前尤其2005年以前,一是厂商并没有这么注重安全所以漏洞好多二是用户也欠缺安全意识有补丁也极少打,造成的结果就是漏洞好多且长时间内都可借助。基于这些情况很容易地就可以编撰一款自动化工具之后在太长时间内都能拿来攻占大量系统,但在现今漏洞密度越来越小借助难度越来越高0day/1day时间越来越短的环境下,这种模式越来越无法持续了。新人们不能不比老人们当初我学几天就拿下xxx实在不是人的水平低了而是外部安全水平高了。
你说得太有道理而且谁在乎呢,正如姑娘问你有没有房,你说楼市跌得很快啦老家刚家装啦,那就是没有嘛。想了一想搞安全要求能拿站应当不算过份,环境怎么样是我们自己要去处理的问题而不是只要求结果的领导们要了解的问题。难道老人们水水就叫能拿站新人就毫无捷径可走被贴上一代不如一代的标签吗。想了一想,正如刚变革开放只要稍稍努力都能奔小康现今搞IT还有希望跨阶级,只要把自动化发挥到极至轻松抓鸡还是有可能。
二、自动化功击思路
集成化思路虽然在好多地方都存在,比如cvedetails上会尽量列举关联的exploit,再如shodan和zoomeye上搜索主机会列举相关CVE,又如AutoSploit就直接是一个抓鸡工具。
cvedetails首先有些exp并没有列到对应的cve条目上(不懂为何),其次在真正的渗透中我们须要自己扫描ip存在的服务。
shodan和zoomeye主是列举了主机相关的cve。并没有直接列举exp。
autosploit为了实现自动化,只能使用特定格式的msf模块,一些可以功击的百规范化exp都被放弃了。
结命以上各工具优缺点,我们这儿选实现的“IP-服务-CVE-EXP”三步,舍弃掉最后功击一步。
其实从标题“抓鸡”可知最初而言是希望能实现autosploit那样的自动化功击,但实现过程中发觉存在想得很简单,不是他人只想到集成而没想到自动化而是有很多问题。所以本文“抓鸡”是标题党,“最强”也是标题党,后来补起来的“*敏*感*词*化”也是标题党,程序只算能运行上去。不过对于采集CVE、MSF模块和exploitdb的exp及进一步的应急响应都还算有些意义。
2.1 指定ip查找exp
经过以下三步,得出最终IP及可用EXP(由IP确认EXP)
步骤
输入
处理
输出
第一步
IP
Shodan/Nmap
IP开放的服务及版本
第二步
IP开放的服务及版本
cvedetails类似数据库
服务及版本存在的CVE
第三步
服务及版本存在的CVE
metasploit/exploit-db
CVE对应的exp
2.2 使用最新exp找出适用该exp的ip
经过以下三步,得出最终IP及可用EXP(由EXP确认IP)
步骤
输入
处理
输出
第一步
最新的exp
metasploit/exploit-db
exp相关cve
第二步
exp相关cve
cvedetails类似数据库
cve影响的服务及版本
第三步
cve影响的服务及版本
Shodan
存在服务及版本的IP
三、数据库建设思路
在上一节中,我们谈到了以下几项:shodan、cvedetails、metasploit和exploit-db。
3.1 否定联网方法
首先,联网方法受网速限制。这些网站都是美国网站速度相对不稳定,几个网站依次访问历时会较长。
其次,联网方法受网站保护策略限制。频繁该问IP有可能被封掉(虽然测试中仍未发觉),其次象exploit-db查询须要验证码。
再次,联网方法受网站排版限制。比如cvedetails查询一个产品存在的cve列举的先是一个匹配产品汇总表,点进去再是一个漏洞年份汇总表,再点进去才是CVE列表,要走好几步这是很麻烦的。
除了shodan必然须要联网使用,cvedetails、metasploit和exploit-db都不适宜联网方法。
3.2 否定metasploit和exploit-db使用管线方式
在kali上metasploit通过启动msfconsole之后使用search命令可以进行搜索,但使用msfconsole的就会感觉到其启停是比较花费资源和时间的,所以启动msfconsole查询之后通过管线获取结果的方式并不好。
在kali上可以使用searchsploit命令查找exploit-db的exp,这资源和时间都算可接受,但是一定要安装好exploit-db能够用这限制很大也不是太理想。
3.3 数据库建设思路
在否定联网方法和否定管线方式后,剩下的只能建设本地数据库,而建设又可以分为在线建设和离线建设两种思路。
在线建设就是一个个页面去访问页面之后解析入库,这种方法一是耗费时间长,二是在实践时中间常由于恳求超时和解码有误而让程序中断,三是这些暴力的方式容易被封IP(metasploit最敏感,exploit最包容;在被封IP时你可以感受到动态IP也有用处)。基于以上缘由能离线建设就离线建设。
数据库
建设方法
更新方法
url
cve数据库
cvedetails其实没提供离线下载,但cvedetails的cve数据来源于nvd,nvd提供cve离线下载。离线建设
每日下载nvdcve-modified.xml更新数据库
metasploit数据库
metasploit在github有托管。离线建设。
metasploit实在很容易封ip,git同步项目后重新遍历采集
exploitdb数据库
exploitdb在github也有托管,但是cve只向exploitdb合作者提供而cve是程序的关键,所以只能使用在线建设
仍然只能在线追踪
关于更新还有以下几个关键点:
cvedetails在排列cve时只是简单地order by cve desc,这造成的问题就是排在最前面的cve并不一定是最新的cve,比如CVE-2018-1002209(2018-07-25发布)会排在CVE-2018-19115(2018-11-08发布)前面,所以cvedetails并不适宜拿来采集更新。
由于cve数据库使用nvdcve-modified.xml进行更新,这就要求必须每晚都执行更新程序不然cve都会不完整。nvdcve-modified.xml一是收录新发布的cve二是收录旧cve的修改,如果要保证cve的完整性须要重新下载搁置更新的年份的xml重新读取,如果要保证参考等的完整性那就要删掉数据库全部重新解析入库(还是要时间的大约半天)。
metasploit一个模块发布后通常不会再改动,所以我们以module_name为关键字,每次git pull同步后若果已存在就舍弃插入假如仍未存在就插入,这能挺好地保证metasploit数据库的完整性。单纯exploit模块整个过程大约只须要半个小时。
exploitdb在线建设耗费比较长的时间,一是在线不断恳求历时二是即使比较忍让但联接很久也会被禁,断断续续整个采集过程大约须要一周。
exploitdb以edbid为关键字,更新时依次访问exploitdb的remote、webapps、local、dos四大页面该页面,从头开始解析假如查到已存在expid则中止往下读取。remote等一个页面大约能显示一到三个月内的exp,在此时间范围内能填补缺位的记录假如超出一页这么这些记录也将不会补追补。当然你也可以在remote等中一页页地追踪下去但考虑以下两点这儿不那么实现,但这儿一是考虑一个月时间早已比较长,二是edbid是递增的可以自由地设置采集的edbid的区间。
3.4 数据库选择
首先,是选关系型数据库还是非关系型数据库,根据实际来看使用关系型数据库当有子查询时速率太慢,建索引也还是比较耗时间,所以可能非关系型数据库会快些。但是我需要同步到elk但elk不支持从非关系型读取数据,所以只能使用非关系型数据库。另外假如你要自己改成非关系型数据库那工作量比较大。
其次,选择关系型数据库后还要确定具体选那个数据库,其实不扯到高可用这种东西仅就使用来说关系型数据库都差异不大,开始想用sqlite但同步到elk时仍然报错处理不了,后来太慢想oracle可能快一些但很耗资源笔记本运行不起,所以就用mysql。你自己要改成其他数据库,连接句子和sql句子稍为更改应当就可以了。
3.5 数据库表设计3.5.1 cve表设计
cve_records表各数组如下:
对应cvedetails以下部分:
最终数据示例如下:
cve_affect_records表用于记录受cve影响的产品,各数组如下:
对应cvedetails以下部分:
最终搜集数据示例如下:
cve_refer_records表用于记录cve的参考链接,各数组如下:
对应cvedetails以下部份:
最终搜集数据示例如下:
3.5.2 msf表设计
msf_records表各数组如下:
对应模块查看页面的那几项内容:
最终搜集数据示例如下:
3.5.3 edb表设计
edb_records表各数组如下:
对应edb查看页面如下几项内容:
最终搜集数据示例如下:
四、程序说明4.1 程序使用说明
程序写了两周,实现疗效也不是挺好不是太有心情仔细说明,另外文件中也有一定注释。
配置好setting相关项,运行cve_offline_parse.py,就会搜集cve数据
配置好setting相关项,运行msf_offline_parse.py,就会搜集msf模块数据
配置好setting相关项,运行edb_online_parse.py,就会搜集edb模块数据
项目文件结构整体如下:
|-config|
| |-setting.py----程序配置文件,自己使用时主要修改这个文件
|
|-dao|
| |-src_db_dao.py----存放各dao数的文件
|
|-model|
| |-src_db_model.py----存放数据库表对应的model的文件
|
|-cve_offline_parse.py----通过下载nvd的xml解析入库cve的文件
|
|-cve_online_parse.py----原本设计通过读取cvedetails解析入库cve的文件,实际不使用
|
|-daily_trace_report.py----检查cve、msf、edb更新情况并发送通知邮件的文件
|
|-edb_online_parse.py----通过遍历www.exploit-db.com解析入库exp的文件
|
|-exploit_tool.py----所谓的“*敏*感*词*化抓鸡工具”实现文件
|
|-msf_offline_parse.py----通过git同步github的metasploit-framework解析入库模块的文件
|
|-msf_online_parse.py----原本设计通过遍历www.rapid7.com/db/modules解析入库模块的文件,实际只用其追踪更新功能。
|
|-search_engine.py----shodan搜索实现文件
说明:2018.12.08发觉exploit-db网站升级,新写edb_online_parse_new.py取代旧的edb_online_parse.py。
4.2 运行环境
语言:python3
额外安装库:pip install requests requests-html pymysql sqlalchemy shodan beautifulsoup4
4.3 程序源代码
代码比较多,直接上github(db目录是我搜集好的数据解压下来导出mysql即可):