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