SQL注入测试
SQL注入是针对一种数据库而言的,而不是针对网页语言。在任何使用了数据库查询环境下都可能存在。常见的数据库包括:MSSQL、Oracle、Informix、Db2、Access、Sybase等。
所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
SQL注入受到的威胁,(但不限于)以下几种情况:
- 数据泄漏
- 修改现有数据
- 插入新数据
- 任意的文件系统访问
- 任意的网络访问
- 系统泄漏
针对不同的数据库系统使用的一些函数会有所不同,不过从测试是否存在SQL注入的角度考虑,只需要进行几个最基本的判断语句就可以了。
编号 | Web_ 01 |
测试用例名称 | 手工SQL注入测试 |
测试目的 | 由于SQL注入有可能造成信息泄漏,在严重情况下(根据使用的数据库而定)甚至可能造成数据修改、删除,从而导致业务中断。因此必须发现所有存在的注入点。 |
用例级别 | 一级 |
测试条件 |
- Web业务运行正常
- 已知待测目标URL,假设为http://www.example.com/page.xxx
- 待测目标存在参数输入,假设为name=value
|
执行步骤 |
- 观察参数的值value是否为数字型。如果是数字型进行数字型测试,否则跳到第4步进行字符型测试(例如如果出现a那说明是字符型,如果出现2则将其当做数字型测试)
- 将被测参数后加上测试语句“and 1=1”,即:地址栏中填入“http://www.example.com/page.xxx?name=value and 1=1”, 如果返回正确页面则进行下一步操作,否则跳到第4步。
- 将被测参数后加上测试语句“and 1=2”(这里以第n个参数为例),其他参数保持不变,即:地址栏中填入“http://www.example.com/page.xxx? name=value and 1=2”, 如果返回正确页面则进行下一步操作,否则该参数存在注入漏洞,完成测试
- 将被测参数后加上测试语句“’ and ‘1’=’1”,即:地址栏中填入“http://www.example.com/page.xxx? name=value’ and ‘1’=’1”, 如果返回正确页面则进行下一步操作,否则该参数存在注入漏洞,完成测试
- 将被测参数后加上测试语句“’ and ‘1’=’2”,即:地址栏中填入“http://www.example.com/page.xxx? name=value’ and ‘1’=’2”, 如果返回正确页面则不存在漏洞,否则该参数存在注入漏洞,完成测试
|
预期结果 | 不存在注入点 |
备注 |
- 页面可能接受多个参数,需对每个参数都进行测试
- 如果客户端脚本对输入数据进行合法行校验,阻止非法数据,可以通过方法(通过WebScarab拦截并修改参数值),绕过客户端数据校验。
- POST、AJAX以及隐藏域提交参数也需要测试(方法是通过WebScarab拦截HTTP请求,找到提交的参数并参照上面的方法修改参数值)
- 本测试包含了现有最常见的两种测试方法
|
测试结果 | |
编号 | Web _02 |
测试用例名称 | 自动化工具SQL注入测试 |
测试目的 | 由于SQL注入有可能造成信息泄漏,在严重情况下(根据使用的数据库而定)甚至可能造成数据修改、删除,从而导致业务中断。因此必须发现所有存在的注入点。 |
用例级别 | 一级 |
测试条件 |
- Web业务运行正常
- 已知待测目标URL,假设为http://www.example.com/page.xxx
- 待测目标存在参数输入,假设为name=value
- 测试用机安装了pangolin测试工具
|
执行步骤 |
- 运行pangolin
- 在URL输入框中输入http://www.example.com/page.xxx?name=value
- 点击Check按钮执行扫描操作
- 观察结果
|
预期结果 | Pangolin工具不能得到目标服务器的注入类型和数据库类型。 |
备注 | 页面可能接受多个参数,需对每个参数都进行测试 |
测试结果 | |
命令执行测试
编号 | Web _03 |
测试用例名称 | 命令执行测试 |
测试目的 | 某些页面可能接受类似于文件名的参数用于下载或者显示内容。 |
用例级别 | 一级 |
测试条件 |
- Web业务运行正常
- 已知某页面URL(假设为http://www.example.com/abc.jsp)接收参数,且参数中接收类似于系统命令的字符(假设为cmd=ls)
|
执行步骤 |
- 更改参数的值为其他命令,可以尝试以下一些字符串:
net user ipconfig cat /etc/passwd - 观察页面返回信息。比如使用net user命令的话,页面中可能包含类似于如下的字符串:
\\host 的用户帐户 Administrator
|
预期结果 | 页面的源代码中不包含类似于系统命令的返回信息。 |