前言

好久没更新了,算是做个备忘吧。这段时间一直在搞漏洞扫描方面相关的东西,Web漏洞扫描碎碎念
上篇说到了一些黑盒漏扫的一些架构之类的,其实真正在做的时候还是会遇见挺多实际的问题的。

Tips

我们内部在构思这款扫描器时,就定位它为一款轻量级漏洞发现的扫描器。比较关心的指标:发包量、误报率、检出率、足够智能。通过一定的算法让他尽可能的和安全人员在做安全测试时的步骤、思路一致。
举个简单的例子,我们在进行某一个漏洞测试时,测试多个payload服务器返回与正常相同,大概会有哪些情况,应该怎么处理呢?那我们就应该让扫描器也尽量去模拟这个过程。
在开发的时候每个任务或需求都通过任务看板做记录,现在回头整理发现还是做了挺多的优化点的。
团队的小伙伴也是出了很多建设性的意见,在漏洞识别逻辑和产品使用体验方面上。现在经过打磨,也算是比较成熟了,满足日常安全测试的需求。

从看板复制出来小部分需求title

  • 统一的扫描接口字段及方法定义
  • 统一的扫描结果bean类
  • 调度器实现获取所有的插件类并加载扫描
  • 参数解析支持所有常见参数格式及其混合格式(urlencode、json、amf)
  • SQL注入插件,采用NLP分词和相识度等算法判断回显
  • RCE插件,采用运算符或dnslog判断
  • SSRF插件,采用dnslog做漏洞判定
  • SSTI插件,内置常用payload做fuzz判断
  • XXE插件,内置文件读取与dnslog外联payload做漏洞判定
  • XSS插件,使用语义分析输出点位置,检测XSS平均发送两个请求包
  • RLI/LFI插件,内置Windows于Linux部分文件路径payload做漏洞判定
  • StrutsRCE插件,集成部分较通用的poc进行扫描
  • ……
  • Java序列化插件,分析HTTP包特征,无需Payload发包
  • JWT插件,分析HTTP包特征,无需Payload发包
  • 信息泄露插件,分析HTTP包特征,无需Payload发包
  • POST请求中body为空异常处理
  • POST请求中path中存在动态参数处理
  • 适当优化返回包中时间戳、traceID等无用信息
  • 支持域名黑白名单
  • 对于空字符串如:null、undefine某种情况识别为json的处理
  • 对所有插件加入识别waf模块,如无法绕过则跳过扫描,避免发送无用包
  • 加入参数跳过机制,对明显不是漏洞的参数进行跳过
  • 整合部分RCE和SSTI相似payload,减少发包
  • 对于非动态内容,资源类请求跳过扫描
  • 适配POST包乱码的情况
  • 加入参数黑名单配置,可忽略所有请求的该参数,如_t,testid

最开始对扫描器的认识无非就是payload一把梭,其实真正在做扫描器的时候就会发现有很多的点值得推敲优化。