最近又重新收集了一波 src 的信息,整理了上百万的网站资产,主要步骤:
可能大家都知道互联网上存在的漏洞中,nday 漏洞占比很可观,那么针对上百万的网站如何更快,更有效的从中挖掘 nday 漏洞呢?
有的人可能会说,poc 工具一把梭就可以了,比如 nuclei、xray、goby 等一键扫描,这种是最直接,最方便的打法,但是如果针对的是单个网站,或者几个网站,一把梭下来也要不了多久,但是针对上百万的资产,这么操作下来估计得个一年半载。
又有人说了,时间长,你不会采用分布式的打法吗?一台扫描器需要一年,你用十二台不就之需要一个月了吗?这种方式对于实现目标而言当然是可以的,但是对于服务器的操作和管理成本比较,服务器的租用成本与上一种一样,但是我很穷,有没有时间更短,服务器成本更低的方法?
poc 越多,对于单个网站的测试时间越长,比如 xray 高级版自带近 800 个 POC,nuclei 有三千个,上百万的网站,这么测试下来,以 xray 为例,需要 800 个一百万,以每秒 100 次的请求计算,大概需要三个月,如果测试的速度再慢点,时间会更长。
在这个测试中,其实有大量的测试是无效的,因为 poc 测试之有针对对应的系统才有效果,如果系统类型不对,则测试的过程无效,那么我们可以基于要测试的系统进行指纹识别,然后针对要测试的 POC 进行分类,这样精细化的测试,可以大大节约测试的时间,效果上面也不会太差。
1、 基于 POC 定制指纹库
我的第一个操作是,基于 poc 所对应的系统进行整理,并提取相关指纹,然后获取这百万网站的 header、首页内容作为基础数据,然后进行指纹识别,找出那些 poc 所针对的系统目标。
对于以上操作,需要解决两个难点:
1、指纹提取
我的做法是,首先去 fofa(指纹识别能力还不错) 上搜索,找到一个在线案例,然后通过观察其 header 信息、body 内容、标题等关键点,提取与该系统相关的信息作为其识别的特征,比如:
以标题为特征:
以 header 为特征:
以 body 内容关键词为特征:
基于以上三个部分的特征可以识别大部分的系统,这种系统主要为商业、开源的系统,客户不做二次开发,直接拿来用的,除了这些系统,还有大量框架、组建、服务器之类的,无法很好的进行指纹识别,这类 poc,我会将其作为通用 poc,针对全部系统进行测试,以免因为指纹识别结果漏报而无法全面发现漏洞。
2、指纹规则与 poc 命名联动
编写指纹规则时,我们想要让规则识别出的系统与其对应的 POC 联动,那么就需要在命名上与 poc 的命名保持一致,比如 xray 中关于 wordpree 的 poc 命名如下:
那么我们就需要编写一个可以产品名为 wordpress 的指纹规则,如图:
那么在指纹识别结束后,就能知道那些系统是使用 wordpress 系统搭建,这个时候就可以使用其对应的 poc 列表进行测试。
2、基于指纹识别结果进行 POC 测试
经过第一步的操作,基于 xray 提供的 poc 列表,定制了一份包含 247 个系统的指纹库,对于那些针对开发框架、服务器、通用组件测试的 POC 提取出来,大概 99 个,这些 poc 将作为后续,针对每一个系统测试的 poc 列表。
其余 POC 将基于指纹识别的结果进行针对性的测试,共计 713 个,经过以下两个步骤,针对百万网站做了指纹识别:
1、获取百万网站的首页内容(响应码、header、body内容)
2、基于指纹库识别通用系统类型(7 万左右目标,识别出的系统类型 166 个)
从实战结果来看,整体测试下来相比全部测试,时间上至少提高 8 倍,原本需要三个月测试完成的目标,使用这种方式仅需要十来天即可完成。
有了这些基础数据,漏洞测试就是一条命令的事儿,相信用过 xray 的都知道怎么用,这里就不多说了。