经学长推荐准备刷一刷sqli lab这个闯关赛,提高一波
第一关 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)
首先我们输入?id=1‘测试一下,于是就提示这里是有漏洞的,而且是一个字符型注入,最后面的limit 0,1要注意了,每次只显示一行
接着用order by测试字段数,直到3还是正常的,所以有三个字段
因为这里是limit 0,1 所以如果我们前面写的是1’就会查出东西来,那样我们后边union select查的东西就显示不出来了,然后这里看到,它会把联合查询的第二和第三部分显示出来
接下来是利用联合查询查库名。查到当前库名是security
接着查表名
这里就要注意了,因为它一次只回显一个,而一般表名肯定不止一个,所以我们需要利用limit一个一个显示出来,直到没有回显为止
第一个表:email
第二个表:referers
第三个表:uagents
第四个表:users,而一般用户名和密码都放在这个表中
所以我们继续在users中检索列名:
user_id
username
password
我们想要的显然就是user和password
最后直接查找里面的内容即可,还是用limit一个个列举即可
第二关 GET - Error based - Intiger based (基于错误的GET整型注入)
第二关开始依旧是先看注入类型,输入1‘报错,后面加上注释仍报错,所以初步推测不是字符型注入,就是数字型注入(即没有单引号把id括起来)
验证后,确实如此
除了这个地方和第一关并无太大区别,依旧是自带limit0,1
所以想获取全部的表名和列名依旧是一个个枚举。。。
第三关 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)
我们还是先拿1’试一试,发现这次报错有些特殊:后面多了个括号)
这说明这题的形式是id=(‘xxx’),所以我们不仅要考虑闭合单引号,还得考虑闭合括号
第四关 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)
还是照样试试
直接上单引号,发现没有报错,这是为什么呢,因为php中双引号可以包含单引号
所以我们在判断注入时,要加入双引号进行判断哦,而且从下图可看到右括号,那么我们要用右括号闭合左括号
在综合上一个题,payload就是: