原创

Web网站安全测试用例指南

1.1. 自动化Web漏洞扫描工具测试

自动化扫描工具只能检测到部分常见的漏洞(如跨站脚本、SQL注入等),不是针对用户代码的,也就是说不能理解业务逻辑,无法对这些漏洞做进一步业务上的判断。自动化工具测试可以为手工测试提供一些线索方便下一步的手工测试。

 编号SEC_WEB_001 
 测试用例名称 APPScan appication 扫描测试
 测试目的 用自动化的Web安全扫描工具AppScan进行扫描,以发现Web应用中存在的常见漏
 用例级别 高
 测试条件1、已知Web服务器域名或IP地址
2、Web业务运行正常
3、测试用机上安装了AppScan
 执行步骤

1、双击运行AppScan,选择file—new新建扫描,选择扫描模板default
2、弹出扫描配置对话框,选择扫描类型,默认为Web Application Scan,点击next
3、在Starting URL中填入需扫描的目标服务器域名或IP地址,其他配置不需修改,点击next
4、选择No Login,点击next
5、不需修改任何参数,点击next
6、不需修改参数,选择Start a full automatic scan,点击finish完成配置,开始扫描
7、扫描完成,保存扫描结果,并对结果进行分析

 预期结果 经过对扫描结果分析,确认不存在“中等等级”及以上级别的漏洞。
 备注 注意:该用例的执行对被测系统的性能影响比较大,而且可能导致一些垃圾数据,建议只在测试环境执行。

由于自动化工具在很多情况下只是提示一种漏洞存在的可能,因此需要对所有的结果进行人工的分析判断。分析过程参考以下章节的测试项,使用辅助工具或者是手动验证。
常用的自动化扫描工具还有ZAP,AWVS等。在有条件的情况下,可以综合使用



 编号SEC_WEB_002
 测试用例名称 GET方式跨站脚本测试
 测试目的 由于跨站脚本会导致会话被劫持、敏感信息泄漏、账户被盗,严重时甚至造成数据修改、删除,从而导致业务中断,因此需检测跨站脚本是否存在
 用例级别 高
 测试条件1、Web业务运行正常
2、已知待测目标URL,假设为http://www.exmaple.com/page.xxx
3、待测目标存在参数输入,假设为name=value
4、在某种情况下,用户输入被重新显示在网页上,包括名字、帐号、检索结果等等(说明目标网站服务器并没有对用户提交数据检测
 执行步骤

1、在输入的参数后逐条添加以下语句,以第一条为例,输入http://www.exmaple.com/page.xxx?name=<script>alert(123456)</script>只要其中一条弹出显示123456的告警框,就说明存在跨站漏洞,记录漏洞,停止测试。
2、如果没有弹出显示123456的告警框,则在返回的页面上单击鼠标右键,选择“查看源文件”
3、查找网页源文件中是否包含完整的字符串<script>alert(123456)</script>,则不管有没有弹出显示123456的告警框,都表明存在跨站脚本漏洞。
4、由于有些HTML元素(比如<textarea>或”)会影响脚本的执行,所以不一定能够正确弹出123456告警框,需要根据返回网页源文件的内容,构造value的值,比如
多行文本输入框:
</textarea><script>alert(123456)</script>
文本输入框:
</td><script>alert(123456)</script>
'><script>alert(123456)</script>
"><script>alert(123456)</script>
</title><script>alert(123456)</script>
--><script>alert(123456)</script>
[img]javascript:alert(123456)[/img]
<scrip<script>t>alert(123456)</scrip</script>t>
</div><Script>alert(123456)</script>

 预期结果 不存在跨站脚本漏洞
 备注 需要对页面上所有可以提交参数的地方进行测试。具体跨站脚本的测试语句根据实际情况的不同而不同,这里列出了一些最常见构造语句。

AppScan可以找出扫描到的页面的绝大部分跨站脚本漏洞,但对没有扫描到的网页就无能为力了。


 编号SEC_WEB_003
 测试用例名称 POST方式跨站脚本测试
 测试目的 由于跨站脚本会导致会话被劫持、敏感信息泄漏、账户被盗,严重时甚至造成数据修改、删除,从而导致业务中断,因此需检测跨站脚本是否存在
 用例级别 高
 测试条件1、Web业务运行正常
2、已知待测目标URL,假设为http://www.exmaple.com/page.xxx
3、待测目标以POST方式提交参数,显示为表单方式
在某种情况下,用户输入被重新显示在网页上,包括名字、帐号、检索结果等等(说明目标网站服务器并没有对用户提交数据检测)
 执行步骤 1、在POST表单中逐条输入以下语句,只要其中一条弹出显示123456的对话框,就说明存在跨站漏洞,记录漏洞,停止测试。

<script>alert(123456)</script>
>"'><img src="javascript.:alert('123456')">
" onclick=alert(123456) "
"><a href=javascript:alert(1)>123456
"><img src=# onerror=alert(123456)>>
2、如果没有弹出显示123456的告警框,则在返回的页面上单击鼠标右键,选择“查看源文件”
3、查找网页源文件中是否包含完整的字符串<script>alert(123456)</script>,则不管有没有弹出显示123456的告警框,都表明存在跨站脚本漏洞。
4、由于有些HTML元素(比如<textarea>或”)会影响脚本的执行,所以不一定能够正确弹出123456告警框,需要根据返回网页源文件的内容,构造value的值,比如
</textarea><script>alert(123456)</script>
'><script>alert(123456)</script>
"><script>alert(123456)</script>
</title><script>alert(123456)</script>
--><script>alert(123456)</script>
<scrip<script>t>alert(123456)</scrip</script>t>
</div><Script>alert(123456)</script>

 预期结果 不会弹出显示123456的对话框。
 备注 需要对页面上所有可以提交参数的地方进行测试

 编号SEC_WEB_004
 测试用例名称 手工SQL注入测试
 测试目的 由于SQL注入有可能造成信息泄漏,在严重情况下(根据使用的数据库而定)甚至可能造成数据修改、删除,从而导致业务中断。因此必须发现所有存在的注入点。
 用例级别
 测试条件1、Web业务运行正常
2、已知待测目标URL,假设为http://www.exmaple.com/page.xxx
3、待测目标存在参数输入,假设为name=value 
 执行步骤1、观察参数的值value是否为数字型。如果是数字型进行数字型测试,否则跳到第4步进行字符型测试(例如如果出现a那说明是字符型,如果出现2则将其当做数字型测试)
2、将被测参数后加上测试语句“and 1=1”,即:地址栏中填入“http://www.exmaple.com/page.xxx?name=value and 1=1”, 如果返回正确页面则进行下一步操作,否则跳到第4步。
3、将被测参数后加上测试语句“and 1=2”(这里以第n个参数为例),其他参数保持不变,即:地址栏中填入“http://www.exmaple.com/page.xxx? name=value and 1=2”, 如果返回正确页面则进行下一步操作,否则该参数存在注入漏洞,完成测试
4、将被测参数后加上测试语句“’ and ‘1’=’1”,即:地址栏中填入“http://www.exmaple.com/page.xxx? name=value’ and ‘1’=’1”, 如果返回正确页面则进行下一步操作,否则该参数存在注入漏洞,完成测试
将被测参数后加上测试语句“’ and ‘1’=’2”,即:地址栏中填入“http://www.exmaple.com/page.xxx? name=value’ and ‘1’=’2”, 如果返回正确页面则不存在漏洞,否则该参数存在注入漏洞,完成测试
 预期结果 不存在注入点
 备注1、页面可能接受多个参数,需对每个参数都进行测试
2、如果客户端script对输入数据进行合法行校验,阻止非法数据,通过WebScarab拦截并修改参数值,绕过客户端数据校验。
3、POST、AJAX以及隐藏域提交参数也需要测试(方法是通过WebScarab拦截HTTP请求,找到提交的参数并参照上面的方法修改参数值)
本测试包含了现有最常见的两种测试方法


 编号SEC_WEB_005
 测试用例名称 自动化工具SQL注入测试get方式
 测试目的 由于SQL注入有可能造成信息泄漏,在严重情况下(根据使用的数据库而定)甚至可能造成数据修改、删除,从而导致业务中断。因此必须发现所有存在的注入点。
 用例级别 高
 测试条件1、Web业务运行正常
2、已知待测目标URL,假设为http://www.exmaple.com/page.xxx
3、待测目标存在参数输入,假设为name=value
4、测试用机安装了sqlmap测试工具
 执行步骤1、运行sqlmap
2、输入测试地址执行http://www.exmaple.com/page.xxx?name=value
3、观察结果
 预期结果 可得到目标服务器的注入类型和数据库类型。
 备注 页面可能接受多个参数,需对每个参数都进行测试


 编号SEC_WEB_006
 测试用例名称 
 测试目的 
 用例级别 
 测试条件 
 执行步骤 
 预期结果 
 备注 

==========================未完待续==================================

正文到此结束
本文目录