1、测试步骤
首先要确定业务的sql语句类型,一般是对select语句进行测试,安全。
1.1 数值测试
如果参数是数值类型,那么有可能是数值型参数,可以比较id=1与id=2-1类似的测试,比较两者的响应体部是否相同。
如果相同,那么猜测存在sql注入,且为数值型。
1.2 空格测试
对参数添加多个空格,如果响应与未带空格时测试不变,则说明两者的参数对于sql语句是意义一致的,比如均查询不存在,或者是数值型参数。
1.3 利用单双引号测试
对参数添加单引号、双引号进行测试。
如果参数是数值型,那么添加引号会异常;如果参数是字符型,那么添加包围相同的引号会异常。
- 综合来说,如果响应检查到sql异常被输出,那么判定存在sql注入
- 如果参数必然是字符型,那么单双引号的测试相同则不存在sql注入
1.3 利用注释测试
- 注释掉参数的引号后,如果响应检查到sql异常被输出,那么判定存在sql注入
- 注释掉引号的同时补足引号,则不出现sql异常,进一步说明存在sql注入
- 如果在注释后的部分添加,不影响响应输出,说明判定存在sql注入
1.3 利用order by测试
- 根据oder by 1,2,3的不同,如果只有一个正常查询,而其他发送sql异常,或者说响应相同,那么判定存在sql注入
1.4 limit测试
limit从0开始递增测试,如果响应体部长度也递增,说明有效,存在sql注入
1.6 布尔测试
测试and 0 和and 1,如果前者的响应长度小于后者,说明有可能存在sql注入
1.7 时间测试
where条件中,基于时间测试,程序可以更准确的进行判断
1.8 where错误测试
2、利用补充
文件读写
命令执行
3、绕过技巧
(1)内联注释充当空格作为间隔符,以及基于内联注释包含关键字绕过防火墙
(2)大小写混杂
(3)两个注入点各使用一个引号
(4)编码