注:如果是零基础,那么一定要从上到下一个点一个点的学习,不然肯定有很多阻碍,一上来就想开始最后面的实战是不可能滴。
还不够了解SQL注入的可以看看我另一篇博客:
https://blog.csdn/weixin_45254208/article/details/105033276
还没搭建SQL注入平台的也可以看看我另外一篇博客:https://blog.csdn/weixin_45254208/article/details/104698495
实战前需要掌握的基础知识:
上面两篇博客的内容只是能让人简单了解SQL注入并且搭建环境,就凭这两点就想实战肯定是远远不够滴,你还需要以下基础:
1. MYSQL基础学习
这个你可以学的不是很深入,但是一定要了解基本MYSQL语句(增删改查,还有limit也常常用到)的含义。网上到处可以学习MYSQL语句,很多人写了博客,B站上也有教学视频,我不要你觉得,我觉得,只要会上网,就可以打好MYSQL的基础
2. 记住三个表名(重点)
如果你有了MYSQL基础,那么你肯定知道show databases;这个命令,该命令可以查看所有的数据库,其中就包含information_schema,MYSQL默认在数据库中存放了一个“information_schema”的数据库,你所需要记住的3个表名就在该库中,分别是schemata、tables和columns。
schemata表:
存储用户创建的所有数据库名,记录数据库名的字段名为schema_name。
首先打开phpMyAdmin,前面搭建SQL注入平台的博客有写过怎么进去
进入之后,左侧是所有数据库
点击进入information_schema数据库,找到schemata表,可以看到该表的schema_name字段下面就是所有的数据库
tables表:
存储用户创建的所有数据库的库名和表名,如下图所示,记录库名和表名的字段分别为table_schema和table_name。(点击全部显示就可以不用翻页,直接看到所有数据库名以及它们对应的表名)
columns表:
存储用户创建的所有数据库的库名、表名和字段名,如下图所示,记录库名、表名和字段名的字段为table_schema、table_name和column_name。
SQL实战:
打开phpstudy2018,启动服务,记住phpstudy下面的SQL注入平台文件夹的名字,这里我的是sqli-labs-master。
访问SQL注入平台,进入第一题
黄色字体是题目的提示:请输入ID作为带有数字值的参数。那就传个?id=1(?用于在url中分隔实际的URL和参数)
并未报错,并且返回了信息
然后在?id=1后面加 ’ (通常先加单引号试错,其实双引号,反斜线,数字等都可以试错),结果报错,查看报错信息’‘1’’ LIMIT 0,1’
由于报错信息是用两个单引号括起来的,所以去掉首尾的两个单引号就是实际上传的了,去掉之后便可以看出问题所在
在MYSQL中order by语句用于根据指定的列对结果集进行排序,注释符是两个- -加一个空格,而在url中是不能用空格的,空格在url中是用加号+来表示的,如果传入的参数为?id=1' order by 3 --+
,那么实际上是下面这样的
在url中输入并访问,返回正常,说明可以根据第3个字段排序,目前已知有3个字段
order by 3表示根据字段3来排序,那么order by 4呢?3换成4就报错,所以得知表中只有三个字段
所以传入一句?id=0' union select 1,2,3--+
,看看回显
这里的select1,2,3不懂的,有一篇不错的博客可以解惑:https://blog.csdn/weixin_44840696/article/details/89166154
可以看出数字2和3就是注入的通道,前端与数据库之间的通道
数字2,3不向任何数据库查询,只是回显,那么将2,3换成version()和user()
结果回显了数据库的版本和用户名
将user()改为database(),查看当前数据库
得知当前数据库是security
数据库的名字知道了,数据表名还会远吗?接下来就会用到前面讲到的数据库information_schema里面的3张表了,所以赶紧复习一下,这次复习,表的字母拼写全部用小写,反正不区分大小写,小写更容易记忆
查询security数据库中的数据表
?id=0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
验证一下,确实是这几个表
数据表的名字知道了,字段名还会远吗?就拿数据表referers举例
?id=0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='referers' --+
验证一下,OK
字段名知道了,字段值还会远吗?以users表为例,除了主键id,还有有用户名(username)和密码(password)两个字段
直接查字段值(这里的users就不需要加引号了)
?id=0' union select 1,group_concat(username,password),3 from users --+
查询成功
能看到这里肯定是会一点了,初次利用一个SQL注入漏洞可以查看到数据库里面这么多的信息,这的确有点amazing,所以说无知者无畏啊,真的是要不断学习,其他姿势的注入还有很多,我也就不写了。这次博客一是记录一下自己学习SQL注入的过程,二是分享给更多像我这样的小白来当作一个教程,三是…三什么也不是,就酱紫了。
更多推荐
SQL注入零基础实战
发布评论