总结了sql-labs的一些挑战关卡

Less54-61

Less-54

这里开始进入挑战关卡,明显比前面难度提升了很多

直接看源代码吧

首先导入两个php文件

先看看sql-connect-1.php

连接mysql数据库,选择challenges这个数据库

再看看functions.php

里面定义了一堆函数,后面会一个个用到,我们先放着继续看下面的代码

这句代码将php文件的路径取了出来,我们把$pag值输出到文件看看

继续看下面

利用到functions里面的函数了,看看table_name这个函数

在mysql命令行输入

将取到的表名赋值给$table

将取得的两个列名分别赋值给两个变量

接着来到判断语句

当我们一开始还没有点击提交和重置按钮时

来到else语句,然后一开始cookie字段中没有challenge值

执行data函数

返回sessid值

然后设置cookie值

然后需要我们get传入id值,输入id值后

执行这个函数

一开始时tryy值为0

可见这个tryy值就是我们输入id的次数

当我们输入Id的次数大于10时,就执行

删除cookie中challenge字段值

并且重定向到另一个php文件同时get一个id值,值为

而这个php就是检测如果不存在challenges数据库的话就建立challenges这个数据库 ,并建立一个表,这个表的表名是随机的,见如下代码

并往这个表中添加数据

当我们post key值后点击提交按钮

则进行一个判断的sql语句

如果我们post值在col1列中,则返回1,否则不返回

然后成功提交key后,重定向到建立表的php,重新建立challenges表

也就是说,这关整体思路就是利用id值进行注入,有10次尝试的机会,一开始已经告诉我们表名是challenges,要在表中拿到key值

那么我们开始注入

首先一开始仍然是判断id有没有被引号包裹

发现被单引号包裹,那么接下来判断返回列数

返回3列

那就可以联合注入了

爆数据库

爆表

爆列

我们要找的key应该是在第三个列

最后报出key,提交

Less-55

这里没有报错信息,id被()包裹,尝试次数为14次,其他和之前关卡没有什么区别

Less-56

Id被(‘’)包裹,剩下的跟之前关卡一样

Less-57

Id被””包裹,剩下的和之前一样

Less-58

这关输入id值发现并没有返回正确信息,而且这里尝试次数仅为5次

看一下源代码

这里定义了一个数组,并且将用了一个数组顺序反转的函数array_reverse()

写个test测试一下

如果是关联数组

然后根据我们输入的id值进行mysql查询,将查询结果的id值作为数组的索引

所以输出一定是数组里的内容,不可能得到我们想要的信息,但是这里有报错信息显示,所以我们可以考虑用报错注入

Less-59

这里id没有被引号包裹,其他跟之前一样

Less-60

Id被(“”)包裹,其他跟之前一样

Less-61

这关id被((‘’))包裹,其他跟之前一样