使用场景:
有回显,可以看到某些字段的回显信息
像下面的有具体的回显信息
一、判断注入位点
在原始的id(参数)的输入后面添加额外的条件
如果and 1=1 有结果,and1=0没有结果输出,
就说明我们添加的额外条件被拼接到了原始的sql语句的后面,说明判断注入位点成功
二、判断select列数
为什么要判断select列数:
因为最方便的注入方式
union语句可以填充查询结果,并且额外执行一次查询
而且union语句查询有个特殊的条件,后面的查询语句列数需与前面的列数相同
操作:
在原始输入后面直接添加order by语句
order by 1或2或3...
到哪一列失败,就可以确定前面的查询输出一共有几列
三、注入
因为sql查询结果展示的空位有限,将union前的结果不输出id=-或者其他的方法,把位置让出来就能把数据库的信息正常显示出来了
库名
select * from *** where id=1 union select 1,2,database()
表名
select group_concat(table_name) from information_schema.tables where table_schema=database()或者=‘库名(在引号内)’
列名
select group_concat(column_name) from information_schema.columns where table_name='answer'
结果
select 列名 from 表名
四、联合注入(字符型)
输入的参数,被当作一个整体,输入被引号包裹
- 闭合前引号
- 注释后引号:#