Skip to content

titlescan思路总结

fengzhouc edited this page Mar 2, 2020 · 1 revision

简介

titlescan工具功能是根据状态码分类目标(ip、域名),我们进行信息收集过程中都会收集子域名,大量子域名将会耗费我们很多时间去确认,这是批量化就很有作用了,剩下很多时间将目标分类好,我们可以把时间更多的花在目标的漏洞挖掘过程中;

这款工具使用python协程进行设计,主要是用的库aiohttp跟aiomultiprocess,库的使用我这里就不多说了,可以看下这里简单写了使用方法https://www.cnblogs.com/alummox/p/12364498.html

下面就进入正文,这篇文章主要是理一下这个工具整体设计的思路,及以后需要注意的地方

设计思路

github:https://github.com/fengzhouc/tools/tree/master/TitleScan_cron

这里使用方法就不说了,有帮助文档

刚开始设计这个工具的时候,真的坑,觉得自己水的一逼,没有把握住这个工具的要点,浪费了很多时间,看了师傅的流程图及讲解了几个例子,才有点走回正道的样了

下面我们就来正式分析吧

需求:根据状态码分类目标
Q1:状态码有哪些
Q2:正常网站什么时候会有什么状态码
Q3:分类又是怎么分类呢,就是分几类,怎么分类
Q4:最后怎么去判断呢?总不能爬一遍整个网站吧

这其实是最后才这样分析的,要是一开始这样了,就不至于花那么多时间去画流程图了,哭死

Q1:状态码有哪些

请看菜鸟https://www.runoob.com/http/http-status-codes.html,真的看完有很多我都没遇到过的,所以很多也只是看解释去想象他出现的场景了

日常能遇到的主要是2xx、3xx、4xx、5xx,

你可能会想那1xx就不要了?不是的,我们要把所有情况都记录在案的,因为没遇过所以很难搞,只能记录,后面遇到了持续完善工具

Q2:正常网站什么时候会有什么状态码

正常响应:20x
重定向:30x
客户端请求错误:400
找不到资源:404
禁止访问:403
身份认证:401、407
服务器内部错误:500
具体的服务器内部错误:501、502、503、504、505

上面这些是比较常见的,且正常网站都是按标准设计的,

其他还有很多比较具体错误的状态码,但是没见到过,我自己也去测试了一些网站,大小网站都试了,其实基本都是上面那些,具体错误的很多都统一处理了(网站错误处理是很重要的),暴露太多信息不是好事,但是工具还是会包含这些,以后遇到再完善工具

Q3:最后怎么去判断呢?总不能爬一遍整个网站吧

一开始我是想着访问主页的,主页正常,整个站点就正常了,但是错了,我们要确认东西是不是好的,不止要确认擅长的,还要去确认不擅长的,比如一个厨子,如果把不擅长的菜都做得好吃,那说明是个好厨子;

前面也提到了,网站的错误处理是很重要的,而且如果根据通用且普通的东西去确认是不太准确的

所以我们判断方式如下

1、先请求一个不存在的资源,根据这个进行判断网站情况,原因有二:

(1)错误默认状态码404,但是基本都有定制的页面或者错误信息

(2)请求错误的资源是普遍存在的情况

2、再请求主页是否正常

Q4:分类又是怎么分类呢,就是分几类,怎么分类

主要我们要先把分类确定

我一开始想到的分类是

正常网站:请求资源与响应状态码符合预期,比如我访问首页返回200状态码

不正常网站:与正常相反的,就是不符合预期的,比如访问首页返回404状态码

不是网站:直接请求失败的,比如域名或ip可能是dns服务器的,这种就不是web网站,使用http/s肯定访问不了的

正常网站及不是网站分类还是比较确定的,不正常网站这个就有点大了;

这个时候你得反思一下这个工具你只是想要得到正常网站吗?一个防御齐全的网站?

不不不,在渗透测试中我们需要的是突破点,我们常说的旁站,就是利用周边站点,这些站点有别主站,可能是测试网站,或者某个方便功能的网站,正常网站其实请求的预期都是符合的,往往突破费事,所以不是优先目标,我们把不正常的网站在细化下

首先来看下不正常网站包含哪些状态码呢,

正常网站主要是20x、30x状态码,

不是网站没有状态码,

所以不正常网站有如下状态码:

客户端请求错误:400
找不到资源:404
禁止访问:403
身份认证:401、407
服务器内部错误:500
具体的服务器内部错误:501、502、503、504、505

我们将这些排个序,根据越靠近正常网站

1、身份认证:401、407
   找不到资源:404
说明:身份认证是需要进行配置的,所以有人维护,可能性高

2、客户端请求错误:400
   服务器内部错误:500
   禁止访问:403
说明:我们判断方式是GET请求,最基本的请求方法了,如果请求异常,大概率不是完备网站
注意:403这个需要注意,我们判断方式GET请求不存在资源跟主页,这两个其实很少情况会出现403状态码,出现这个大概率是不完备的网站

3、具体的服务器内部错误:501、502、503、504、505
说明:你可以细看一下这些状态码的解释,都指定功能不正常,比如网关、代理等设备,可能性低

所以最后分类确定为

正常网站
大概率正常网站
小概率正常网站
非正常网站
其他情况:这个主要是把条件以外的记录下来,有些情况现在肯定没考虑到的,以后要根据扫描结果完善工具

整个下来基本就是这样了,最后的流程图在github上有,可以看下

题外话:

关于python协程,这次我也是第一次使用,初略的学习记录,不嫌弃可以看下https://www.cnblogs.com/alummox/p/12329062.html

多线程、多进程、协程针对网络爬虫来说,协程是性能最好的,再加上aiomultiprocess的使用,利用上了多核处理,性能更是没的说,可以看下这里的初略对比https://www.cnblogs.com/alummox/p/12329316.html