在QA测试WebApp的时候我们可以做一些事,同时又完成Web安全测试,这该是多有趣的事情。
  传统的安全扫描大部分都是基于爬虫的,但是如果在QA测试的同时我们可以废弃爬虫,抛掉安全测试费时间,等待久的环节。
  基础架构:

  HTTP代理:
  我们采用HTTP Proxy的形式来捕获所有HTTP请求,将所有请求记录至Mysql中。
  数据库架构:
  数据库采用Mysql来记录请求,我们可以给他5个Columns (id、requests、type、value、response)。

  id为主键requests纪录着请求的url,
  type纪录着请求的方式(e.g. get、post),
  value记录着请求的详细参数(e.g. userid=10000),
  response纪录着当时请求的response,方便我们对比加入POC后的请求,用来判断是否存在漏洞。
  这样我们能解析出来的url是:
  http://www.example.com/getuserinfo?userid=10000.
  攻击模块:
  在常见的Web应用中,可能存在很多风险,考虑到迭代和拓展,我们的每一个漏洞测试都是一个模块(e.g. SQL injection、XSS、LFI…)。这样我们可以很方便的增加后续的攻击模块,比如爆出一个新的漏洞时,我们只需要编写一个新的POC并加入模块中,可以投入生产了。

  考虑到研发周期的因素,攻击模块我们可以使用一些已经比较完善的开源程序来做(e.g. sqlmap),当整个爬虫都不变的那么重要的时候,我们的攻击模块可以自由配置。
  任务调度模块:
  了更近一步的提到效率,与业务逻辑贴合,我们建立了一个任务分发调度模块。这个模块起的作用是把同一个URL里,同样value的URL去重,e.g. http://www.example.com/getuserinfo?userid=10000这个URL中userid的值可能会发生变化,但是我们又不用去重复测试,我们可以去掉多出来的重复的请求。如果不这样做的话,会严重影响我们测试的时间与效率。

  比如我的Web应用只有前端JS/HTML,我们只需要使用XSS测试模块。如果我的Web应用是一个resfulAPI的话,那我或许可以只用SQL injection的模块来测试。当然,你也可以一起使用,测试的时候可以很轻易的组合这些模块。
  漏洞报表:
  当我们测试完应用后,我们需要知道哪个URL存在或者不存在哪些种类的漏洞。所以我们需要一个展现的页面,这个页面搭建会比较简单,只需要从数据库里读出内容并且展示可以了。