SQL注入分类
SQL注入按照类型分为数字型注入和字符型注入。注入点的数据类型为数字型时为数字型注入,注入点的数据类型为字符型为字符型注入。
SQL注入按照服务器返回信息是否显示分为报错注入和盲注。如果在注入的过程中,程序将获取的信息或者报错信息直接显示在页面中,这样的注入为报错注入;如果在注入的过程中,程序不显示任何SQL报错信息,只能通过精心构造SQL语句,根据页面是否正常返回或者返回的时间判断注入的结果,这样的注入为盲注。
数字型注入
数字型注入就是注入点的数据类型是数字型,没有用单引号引起来。数字型注入的典型示例代码
1 | $id = $_GET['id']; |
判断数字型注入的方法如下
1. 输入单引号,不正常返回
如果用户提交index.php?id=1’,那么后面的SQL语句就变成为SELECT * FROM users WHERE id=1’ LIMIT0,1,SQL语句本身存在语法错误,会有不正常的结果返回。
2. 输入and 1=1,正常返回
如果用户提交index.php?id=1 and 1=1,那么后面的SQL语句就变成为SELECT * FROM users WHERE id=1 and 1=1 LIMIT 0,1,会有正常的结果返回。
3. 输入and 1=2,不正常返回
SQL语句变为SELECT * FROM users WHERE id=1 and 1=2 LIMIT 0,1,会有不正常的结果返回。
字符型注入
字符型注入就是注入点的数据类型是字符型。字符型注入与数字型注入的区别就是字符型注入要用一对单引号引起来。字符型注入的典型示例代码如下:
1 | $id = $_GET['id']; |
判断字符型注入的方法如下
1. 输入单引号,不正常返回
输入单引号后,SQL语句变为select * from users where id=1’ limit 0,1,SQL语句本身存在语法错误,会有不正常的结果返回
2. 输入’ and ‘1’=’1,正常返回
SQL语句变为select * from users where id=’1’ and ‘1’=’1’ limit 0,1,会有正常结果返回。
3. 输入’ and ‘1’=’2,会不正常返回
SQL语句变为select * from users where id=’1’ and ‘1’=’2’ limit 0,1,会有不正常的结果返回