SQL注入基本知识参考这个博客即可SQL注入
我主要想说一下自己在做sql注入过程中遇到的疑惑
例如:
数据库为
查询语句为
select * from userinfo where id='$_GET['id']'
此时闭合为单引号闭合,当判断注入类型时候,
输入1:SELECT * FROM userinfo WHERE id='1';
,此时正常返回结果;
输入1':SELECT * FROM userinfo WHERE id='1'';
,此时意料之中报错
输入1":SELECT * FROM userinfo WHERE id='1"';
,此时本来预料会报错的,因为闭合类型错误,但是没想到竟然正确输出结果:
当时遇到这种问题困扰好久:既然闭合类型为',为什么输入"时候没有报错,既然"没有报错,那么在SQL注入时候如何判断闭合类型呢,
为了查清楚原因所在,在数据库中不断测试,又换了一下别的符号SELECT * FROM userinfo WHERE id='1a';
也是输出正确结果,不论1后面跟什么字符,除了单引号和数字,都能正常输出结果!
这时候倒不得不把问题聚焦到id本身上来,果然问题出现在这里,在数据库中看到,id为
int类型,这说明,当输入内容为1'时候,这时候因为正常闭合了前面的',所以会出现语法错误;但是当我们输入1"或者1a等等,这时候并没有闭合',我们输入的内容被当做普通字符了,而id是int类型,这里有一个隐式转换,自动把我们输入的转换为数字,所以只要1后面不跟',无论其他什么符号,都会被忽略,最终转为数字1查询到id=1所对应的结果!