1.基于错误的注入
错误注入的思想是通过构造特殊的sql语句,根据返回的错误信息,确定注入点。
通过错误信息也可以探测数据库类型和版本等有用信息
通过输入单引号,触发数据库异常,通过异常日志判断数据库类型
2.基于布尔的注入
布尔注入的思想是闭合sql语句,构造or和and逻辑语句,注释多余的代码
例如 原sql语句:select * from Users where username='username' and password='pwd'
利用布尔注入构造语句: select * from Users where username='' or 1=1 -- ''and password='pwd',由于1=1恒真,所以可以返回所有表里面的信息。
简单的应用是万能密码: ‘ or 1=1#
3.基于union的注入
union语句用于联合前面的select语句获取更多信息
一般通过错误和布尔注入确认注入点后,就开始通过union语句获取信息
414a9060-9d5e-46ee-bbb5-fc85dd67d3c0.node4.buuoj.cn:81/index.php?id=1%27 order by 4 -- +
此时恰好没有页面没有回显,确认列数为3
414a9060-9d5e-46ee-bbb5-fc85dd67d3c0.node4.buuoj.cn:81/index.php?id=0%27 union select 1,database(),version() -- +
union联合的select语句的列数一定要与前面select语句查找的列数相同,如果union后select语句列数比原语句列数少,可以加数字填充,如果比前面多,需要用group_concat()关键字把内容合并成一条数据。这里利用union语句,得到了当前库名为note和数据库版本
4.基于时间的盲注
有些数据库对错误信息做了安全配置,使得无法通过上面方式确认注入点,通过设置sleep语句探测注入点
用法是: 测试的数据' and sleep(t) -- +
如果测试的数据存在数据库,页面会延迟t秒相应
标签:语句,union,列数,基础,sql,select,注入 From: https://www.cnblogs.com/dg05/p/17476320.html