SQL注入点分析
1:常见的注入点
从程序编写的角度看SQL注入,SQL注入漏洞产生的本质原因是将获取到的用户可控数据在没有经过安全处理的情况下拼接到SQL语句中并发送给数据库服务器执行导致的。因此,任何服务器能取到的用户输入,都是可能存在SQL注入的注入点,对于手工测试而言,通常根据业务找寻可能与数据库有交互的输入作为潜在的注入点进行测试:
常见注入点:
- 表单提交,主要是POST,或者GET请求。
- URL参数,主要为GET请求参数。
- Cookie中的参数。
- HTTP请求头部可修改的值,比如: Referer、User_Agent等。
2:注入点测试的基本思路
SQL注入点的测试本质上是基于原理的模糊测试,我们需要根据一个注入点的功能,推测其可能使用的SQL操作、用户输入的数据类型(数字型或字符型)以及用户输入拼接到SQL语句的位置,比如说登陆功能的话,它有可能执行的SQL语句就是select。然后尝试构造基础的报错注入语句、布尔盲注或时间盲注语句来验证相关位置是否存在sql注入漏洞。
注意,在未知源码的情况下,我们只能尽可能尝试构造各类测试语句来对注入点进行测试,如果测试现象符合条件可以认为存在SQL注入漏洞,但测试现象不符合预期并不能100%确定SQL注入漏洞不存在。
1)数字型与字符型的判别
一:数字型
1、参数后加单引号,报错注入
http://127.0.0.1/2/sql1.php?id=1'
SELECT first_name, last_name FROM users WHERE user_id = 1';
2、参数后加" and 1=1”,访问正常: 布尔型盲注
http://127.0.0.1/2/sql1.php?id=1 and 1=1
SELECT first_name, last_name FROM users WHEREuser_id = 1 and 1=1;
3、参数后加" and 1=2”,访问异常(如:无信息)
http://127.0.0.1/2/sql1.php?id=