SQL注入总结
友情提示:查payload没问题,不适合0基础学习。虽然有目录但因为想起来一点补一点还是挺乱的,建议直接ctrl+F
基本流程思路
一、判断注入点
- id = 1 加特殊符号与前边符号闭合,尾部加 --+ 或 # 注释掉后面的特殊符号,页面出错 这是参数为字符型才需要引号闭合,如果人家本来就是数字就不用加引号了
- 单引号:id = 1’
- 双引号:id = 1"
- 以上两种还多一个小括号:id = 1’) 或 id = 1")
- 如果这些符号被过滤了,如果是以GET方式提交的参数可尝试替换为url编码
- id = 1 and 1 = 1 正常,id = 1 and 1 = 2 出错
- 以上1=1,1=2仅仅是为了表达true和false,只要能体现出真假逻辑的世子都可替换,如-1 = -1 或 2 - 1 = 1
?id=1' and 1 = 1 --+
?id=1' and 1 = 2 --+
有的时候就是需要闭合而不是一味地注释
- 单引号过滤绕过:
源码中 if(preg_match(’/.* ‘. */’,$str)!== 0)exit();
$str为我们输入的字符串,只要我们输入的字符串中有” ’ “出现,就会匹配整个字符串,使我们所有操作都无效了,这时候可以加” \ “将username=’ '的第二个单引号转义,使第一个单引号与password那里的第一个单引号配对,再将最后一个单引号注释掉就可以了。
二、判断字段数
- order by 语句用于根据指定的列(可以为列名或列数)对结果集进行排序。
- 在页面正常显示的情况下,构造order by i(i = 1,2,3,4,…,*)直至页面出错,则能使正常显示的最大i即为当前页面所使用的表的列数也就是所谓的字段数
以 3 为例
- 在页面正常显示的情况下,构造order by i(i = 1,2,3,4,…,*)直至页面出错,则能使正常显示的最大i即为当前页面所使用的表的列数也就是所谓的字段数
?id=1 and 1 = 1 order by 3 --+
三、判断回显点
- 已判断出字段数 i
- 在出错页(and 1 = 2之后)上使用联合查询,union select 1,2,3,…,i
假设 i = 3
?id=1 and 1 = 2 union select 1,2,3 --+
若现在能在页面上看到3,那么语句中3的位置就为回显点了,看到1或2同理
四、查询相关内容
假设已知回显点为3的位置,那么用查询语句替换数字3就ok了
?id = 1' and 1 = 2 union select 1,2,(这里放各种查询的语句) --+
如果回显点不在最后,比如在2的位置,那么替换为(select balabalabala)。
意思就是得多加一个select,叫做子查询。
注入类型及构造语句
一、显错注入
条件: