自动化测试空间: http://www.automationqa.com/ 性能测试讨论群:119821036

数字数据SQL注入漏洞的验证方法

上一篇 / 下一篇  2011-10-20 10:05:18

对于数字数字,应用程序会有两种处理方式,一是应用程序可能还是会给它加上单引号,像字符串一样执行,二是能以数字形式直接传递到数据库中,这时,可以针对数字数据查找漏洞。

尝试输入一个结果等于原始数字值的简单表达式。例如,如果原始值是1,我们可以尝试提交1+0或者2-1,如果应用程序作出相同的响应,就表示它易于受到攻击。

如果证实被修改的数据会对应用程序的行为造成明显的影响,上面描述的方法最为可靠。例如,如果应用程序使用一个数字类型的no参数指定应返回什么内容,就用(1+1)代替2得到相同的结果,明显表示存在sql注入。然而,如果能够在数字类参数中插入一个完全随意的输入,但是应用程序的行为却没有发生改变,那么前面的检查方法是无法发现漏洞的。

如果第一个测试方法取得成功,可以利用更加复杂的、使用特殊sql关键字和语法进一步获得与漏洞有关的证据。ASCII命令就是一个典型的示例,它返回被提交字符的数字化ASCII代码。例如,因为65的ASCII值为A,在sql中,66-ASCII(’A')就代表1了。

如果单引号被过滤掉,那么前面的测试方法就没有用了。这时可以利用这样一个事实:在必要时,数据库会隐含地将数字数据转化为字符串数据。例如,以为1的ASCII值为49,在sql中,50-ASCII(1)代表的是1。

测试sql注入的时候我们要注意,某些字符在http请求中具有特殊含义。如果想插入这些字符进行攻击,就必须进行url编码,确保应用程序可以正常的解析他们。例如&和=用于连接名称/值对,建立查询字符串和post数据块,应当分别使用%26和%3d对他们进行编码。查询字符串不允许使用空格,所以必须使用%20进行编码,当然,编码记不住也没关系,有很多工具可以直接进行转换,比如firefox的插件hackbar。

无论是通过拦截代理服务器直接从浏览器中编辑参数值,还是使用其他方法进行编辑,都必须使用这些编码方法。如果忘记对相关字符进行编码,那么整个请求可能会无效,或者提交并不想要的数据


TAG:

 

评分:0

我来说两句

Open Toolbar