题目链接:http://hbc.haobachang.com/see_bug_one?id=106
思路:
1.分别输入
1 and 1=1
1 and 1=2
进行判断是否能进行sql注入
2.输入1 order by n 按第n列进行排列,进行列数探测
3.测试union select 1,2,3…n 进行,行数据联合输出,方便后边进行查询
4.database()查库名,这是哪个库。
5.查询库中有哪些表
6.查询flag表中的字段名
7.取flag列数据。1 union select 1,2,flag,4,5 from flag 从flag表里查flag字段值。
知识补充:
1.回显位,用select 1,2,3…n.后面查询的数据都放回显位里。
2.information_schema 是 MySQL 自带的"元数据字典库",里面存着所有库、表、列的名字。它不是一个真实业务表,是系统视图。
3.information_schema.tables 一行 = 一张表,字段 table_name 是表名,table_schema 是它属于哪个库。
4.group_concat() 把所有行拼成一个字符串,用逗号分隔,这样一次就能全部显示出来。
不用的话只能显示第一行,得靠 limit 0,1、limit 1,1 一行行挪。
5.information_schema.columns,information_schema.tables。
tables 是"有哪些表 “的目录,columns 是” 每张表里有哪些字段"的目录。
前者给你表名,后者给你字段名
反思:这里我们与字符型进行对比
1.字符型和数字型本质相同,数字型限制条件更少
而字符型数据以字符存储,需加’string’
在你从前端输入完毕,自动补一个’符号,以完成字符的闭合
在进行sql注入时,我们应先加上’提前进行闭合,后进行注入,在注入完毕后加-- ,注释掉自动补充的’闭合符号。