在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存在或者不存在哪些种类的漏洞。所以我们需要一个展现的页面,这个页面搭建会比较简单,只需要从数据库里读出内容并且展示就可以了。