想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

仅用于渗透测试教学,禁止用于不当目的

什么是SQL注入

SQL注入是Web渗透测试中的一种攻击手段,主要针对目标数据库。sql注入就是指:Web应用程序对用户输入数据的合法性没有做判断,前端输入后端的参数是攻击者可控的,并且能够将参数带入数据库进行查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作


一般情况下,开发人员可以使用动态SQL语句创建通用、灵活的应用。

动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的SQL语句。当开发人员在运行过程中需要根据不同的查询标准决定提取什么字段(如select语句),或者根据不同的条件选择不同的查询表时,动态地构造SQL语句会非常有用!

下面以PHP语句为例:

<code>$query = "SELECT * FROM users WHERE id = $_GET['id']"/<code>

由于上面的尝试ID可控,且是带入数据库进行查询的,所以攻击者可以任意拼接SQL语句进行攻击。

当然,SQL注入按照不同的分类方法可以分为报错注入、盲注、Union注入等。

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

SQL注入原理

要想产生SQL注入漏洞,必须满足两个条件:

  • 参数用户可控:前端传给后端的参数内容是用户可以随时改变可控的
  • 参数带入数据库查询:传入的参数拼接到SQL语句中,而且直接带入数据库查询,和数据库进行交互!

当传入的ID参数为1'时,数据库要执行的代码就是:

<code>select * from users where id = 1'/<code>

这明显不符合数据库的语法规范,所以会报错。当传入的ID参数为and 1=1时,执行的SQL语句如下:

<code>select * from users where id = 1 and 1=1/<code>

因为后添加的and 1=1,1=1永远是真(对的),而且where语句中的id=1也为真,所以页面返回的情况会和id=1的页面一模一样。如果你将传入的参数ID为and 1=2时,由于后面的1=2不成立,结果会返回假(错的),页面就会显示不同的结果!

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

由此可以判断ID参数存在SQL注入漏洞,攻击者可以进一步拼接SQL语句进行攻击,致使数据库信息泄露,甚至进一步拿取服务器权限!

请记住,在实际web网站渗透的过程中,凡是满足上面两个条件就会存在SQL注入漏洞,因此所有的开发者都会尽量迫使外部输入的参数不能直接和数据库进行交互,否则就会引起数据库被黑的隐患!

MySQL数据库重要基础!

MySql是常用的数据库版本之一!我们先来学习下MySQL的SQL注入知识点:

1、在所有的MySQL5.0版本之后,MySQL默认在数据库中存放一个"information_schema"的数据库。在该库中,大家一定要记住三个表名:

<code>a、SCHEMATA
b、TABLES
c、COLUMNS/<code>
  • SCHEMATA

该表中存储该用户创建的所有数据库的库名

,这个表下有个字段SCHEMA_NAME,这个字段记录了所有的数据库名。

运行win7靶机的WAMP服务器,这个服务器已经安装好了mysql数据库,然后打开phpmyadmin页面,如图!

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

  • TABLES

该表储存了用户创建的所有数据库库名、表名

。在该表中的字段TABLE_SCHEMA记录的是所有的库名,而字段TABLE_NAME记录的是所有的表名。

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

  • COLUMNS

这个表中存储了所有的数据库的库、表、字段。这个表中的三个字段TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME刚好记录数据库所有的库名、表名、字段名!

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

2、常用的MySQL查询语句如下。

在不知道任何条件时:

<code>select 要查询的字段名 from 库名.表名/<code>

知道一个已知条件时:

<code>select 要查询的字段名 from 库名.表名 where 已知条件的字段名='已知条件的值'/<code>

知道两个已知条件时:

<code>select 要查询的字段名 from 库名.表名 where 已知条件1的字段名='已知条件1的值' AND 已知条件2的字段名='已知条件2的值'
比如第一个:/<code>
想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

3、mysql数据库的limit用法

Limit的使用格式为limit m,n,m是指记录开始的位置,从0开始,表示第一条记录;n是指提取一共n条记录。简单说limit 0,5,就是从第一条开始,一共提取5条!

比如不使用limit查询,结果会是:

你会发现显示所有信息!

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

如果使用limit用法,将会如下图:

你会发现显示前两条信息!

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

4、学会使用MySQL数据的终端

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

启动后,就会看到如图所示,默认没有密码,回车即可登录!

你发现,首先使用use security这个数据库;然后select * from users;,意思是从当前的security数据库中选择表users,当然你也可以使用其他的数据库,比如mysql、platform,这要看你的MySQL数据库中有哪些数据库名称。然后例举该表下的所有字段id、username、password!

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

5、需要记住的几个mysql数据库的函数

<code>database():当前网站使用的数据库名称
version():当前MySQL的版本
user():当前MySQL的用户!/<code>

使用例子:

<code>select datebase();/<code>
想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

上图的意思是,首先没有进入任何一个数据库名称中,使用database();,发现是null,当然啊!你还没有选择一个数据库进入!接下来我们使用了"test"数据库,就发现database()显示了当前使用的数据库名称是test!

继续查询下函数user():

<code>select user();/<code>

发现连接该mysql数据库的用户是root用户!

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

推荐一款数据库管理连接软件

前面我们使用过phpmyadmin网页数据库管理平台,实在不便,接下来我们也使用了mysql的黑白管理终端。那么现在我们使用一款可视化非常好的数据库管理软件,也就是说让你更加容易控制你的MySQL数据库——Navicat for Mysql!加入我的 即可获取下载、安装、使用等教学视频。

直接默认安装即可,详细参照视频安装!

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

这里的Navicat for Mysql就是mysql数据库的管理软件(类似以一个操作界面),非常方便!

连接成功,我们就可以进行查询使用,比如,我们来查询security数据库下users这个表中的字段username、password:

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

这里还使用函数user()查询了当前数据库登录的用户。

下面显示是root,本地登录!

想学SQL注入?我帮你收集了SQL注入的入门基础,小白都能学会

以后,只要操作数据库,只要win7靶机的wamp开启了,或者你获得了目标服务器的数据库,就能使用Navicat for Mysql来操作!

关于更多web渗透实战技术,可以点击 ,进入我专栏进行学习。欢迎关注、点赞、评论!


分享到:


相關文章: