1.什么是SQL注入
SQL注入就是指Web应用程序对用户输入数据的合理性没有进行判断,前端传入后端的参数是攻击者可控制的,并且根据参数带入数据库查询,通过SQL语句,实现无账号登录,甚至篡改数据库。不是利用BUG,而是程序员编写时的疏忽造成潜在危险!
我的理解就是:通过构造一条精巧的语句,来查询想要得到的结果!!!
2.注入分类
1.按照查询字段:
①字符型:输入参数为字符串类型,默认为字符串类型的注入
②数字型:输入参数为整形类型,默认为数字型类型的注入
2.按照注入方法:
union注入,报错注入,布尔注入,时间注入
3.什么是注入点
访问数据库的连接
那怎么查找注入点呢?就是不断尝试前端输入和后端有交互的点!
有几个常见的就是:
①xxx.xxx.xxx/xxx.php?id=1.....(从数据库中获取数据的过程)
②对网站进行抓包,注意有post参数的数据包
③网站的搜索框
4.如何判断是字符型注入还是数字型注入
①使用xxx.xxx.xxx/xxx.php?id=1 and1=1和xxx.xxx.xxx/xxx.php?id=1 and1=2来判断!
若两个都提交且都能正常回显页面,则不可能是数字型,那就是字符型
若提交xxx.xxx.xxx/xxx.php?id=1 and1=2没有正常回显,则是数字型
②使用xxx.xxx.xxx/xxx.php?id=2-1来判断
若为数字型,则可以正常回显,因为字符型不能做“减法”
5.闭合
字符型需要闭合
数字型不需要闭合符来闭合
常见的闭合方式有 ' (英文单引号) " (英文双引号) ') (英文单引号和英文括号)
") (英文双引号和英文括号)
闭合作用:手工提交闭合符号,结束前一段查询语句,后面即可加入其它语句,查询需要的参数。
不需要的语句可以用注释符号“--+” 或 "#" 或 "%23" 来注释掉!
6.union联合注入
闭合之后,先用group by n(n为当前页面的数据列数量)用二分法判断默认页面数据列数量!
然后union select 1,2,......,n(1~n就是当前页面的数据列数量)database()
可以回显某一列中的数据,记住第一列没有回显位
页面只能显示一列内容,第二列的内容是不显示的,可以把第一列的内容改为数据库不存在的数据
比如xxx.xxx.xxx/xxx.php?id=0或者?id=-1
7.一般步骤
①查找注入点
②判断是字符型还是数字型
③如果是字符型,找到闭合方式
④判断查询列数 ,用 group by 或者 order by
⑤查询回显位置 ,如id=0或者id=-1
注意:一定要都是英文符号!!!!!!!!!!!
以上就是今天学习的内容,如有不对的知识点,请大家指出,我认真修改!
谢谢大家的支持!!!