boy-hack / goWhatweb

[学习GO] go语言写的web指纹识别 - Identify websites by go language

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

goWhatweb

go语言编写的指纹识别,指纹数据1800+,大量指纹跑完需要花费大量时间,用go的目的是尽可能的节省时间(单机上)和尽可能的发挥最大效率。

Useage

  • ./goWhatweb test.txt
  • 目录下goWhatweb是在MAC下编译好的
  • 但是根据go的特性,可以静态编译成二进制运行到任何平台

Some thinking

- 如何快速识别指纹?
    1. 为指纹添加更多的筛选条件,如php|asp|aspx类指纹
    2. 基于决策的指纹识别,每次决策增加一定权值

这当然会在'一定程度'上提高识别效率,但是却要收集到更多的指纹。对于不想如此大费周章的懒人来说(比如我),最好的优化效率方法就是”爆破“的方式,在提升程序运行的速度上进行改进。对于目前的1800+指纹,我认为单纯的增加筛选条件也�并不会比”纯爆破“类型强很多。

Feature&&Checklist

  1. 内存加载指纹,在内存中对每个指纹的命中率进行统计,优先使用命中率高的指纹。(就是对排序数组中的路径hash做一次位置替换)

  2. 根据统计,指纹可能达到了1800+,累计访问路径会达到1600,如果访问一个不知名的cms至少会请求1600+次,减少请求&提高效率的方法:

    1. 判断网站连通性,在请求之前,会访问一次首页,存储时间间隔来用于下一部判断,若时间间隔较长,则取消该次请求,标记该URL失败原因为“请求首页时间间隔过长”
    2. 优先使用命中率高的指纹,其次是排序(同一个访问地址有不同的cms指纹情况)中较高的指纹,在识别成功后立即关闭其他请求。
    3. 优先使用head请求,head为200才会进行下一步get请求。
    4. 每发包200次会随机延时片刻,在请求首页是否正常,若不正常则延时更大片刻,延时超过1分钟则取消该URL其他请求,标记该URL失败原因为“请求量过大 {}次请求后网页无法访问”
    5. 将请求UA伪装为随机爬虫
    6. WAF识别,识别到WAF后,自动减缓发包频率
    7. 针对单个URL的并发默认会达到7次(同时针对该URL的GET请求7个),当有waf时,这个数值为1
    8. 单个URL超时次数超过阈值(默认200),则该URL整个响应请求暂停,标记失败原因为"超时次数过多"
  3. 上述针对单个URL的指纹识别可能无法发挥机器的最大效率,所以设计上goWhatweb对多个URL同时进行指纹分析,并执行上述规则,每个URL的指纹分析是独立的,互不干扰的。所以,更多的URL会将机器的性能和宽带性能发挥到最大。

About

[学习GO] go语言写的web指纹识别 - Identify websites by go language


Languages

Language:Go 100.0%