Web漏洞扫描的一些Tips
条评论前言
好久没更新了,算是做个备忘吧。这段时间一直在搞漏洞扫描方面相关的东西,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一把梭,其实真正在做扫描器的时候就会发现有很多的点值得推敲优化。