sqli-labs Less1-5题 Write Up

[toc]

Less-1

image-20200713154808415

输入一个id看看

image-20200713154939518

题目是单引号,因此id加一个单引号看看

image-20200713155040120

可以看到报错了。说明单引号被成功解析,那么我们就通过闭合单引号来进行注入。

首先通过order by判断字段:

image-20200713155238806

不断提高order by后面的数值

image-20200713155311592

可以看到order by到4的时候报错了,说明字段只有3个。

接下来通过union看看页面显示的内容对应的位置

image-20200713155813890

页面成功执行,但是返回的内容没有变化,说明页面只会返回第一条结果(id=1),因此我们可以把id变成系统中没有的(id=-1),让服务器返回select的结果

image-20200713155932512

可以看到页面返回了2和3,说明页面返回的是select的第二个和第三个地方,所以我们注入的地方就是2和3

接下来查询当前网站使用的数据库 database()、当前Mysql的版本 version()、当前Mysql的用户 user()

CONCAT_WS(separator,str1,str2,…),连接str1、str2等字符串,并在各字符串中以separator分隔

image-20200713160539637

接下来先查询服务器一共有多少个数据库

Mysql中默认存放一个information_schema的数据库,该库中,有三个重要的表,分别是schemata, tables和columns

schemata储存该用户创建的所有数据库的库名,库名字段为schema_name

tables储存该用户创建的所有数据库的库名和每个库中的表名,库名字段是table_schema,表名字段是table_name

columns储存该用户创建的所有数据库的库名、每个库的表名和每个库中每个表中的字段名,库名字段是table_schema,表名字段是table_name,字段名是column_name

image-20200713162304922

可以看到第一个表为information_schema,修改limit 0,1中0的值,遍历

image-20200713162401207

最终得到所有的库名。

然后查询数据库中的表名,以security为例

image-20200713163201802

遍历查询,就得到所有的表名。

然后获取表的字段名,以emails为例

image-20200713164353082

遍历可以得到emails的所有字段id,email_id

然后获取字段内容

image-20200713165034010

遍历

image-20200713165402331

可以看到一共有8条数据

image-20200713165624149

通过这样我们就可以把整个服务器的数据库down下来。

补充:

我们可以使用group_concat将信息输出到一行,这样更为方便。

image-20200713170544482

Less-2

image-20200713171603173

注入单引号,根据报错信息可以看出id在sql中是整型

image-20200713171622650

通过布尔条件测试判断能否注入

image-20200713171850699

image-20200713171924317

得出结论存在注入,使用union注入

image-20200713172017996

查询数据库名

image-20200713172117403

注入成功,后续爆库步骤省略。

Less-3

单引号测试,查看报错信息

image-20200713172910823

猜测sql语句形式为

SELECT * FROM * WHERE id=('$id') LIMIT 0,1

布尔测试

image-20200713173111249

image-20200713173120963

可以注入,注意构造的形式

image-20200713173536293

爆库

image-20200713173648836

Less-4

双引号测试

image-20200713174125565

猜测sql语句

SELECT * FROM * WHERE id=("$id") LIMIT 0,1

布尔测试

image-20200713174333657

union注入:

image-20200713174422863

爆库

image-20200713174656504

Less-5

单引号测试

image-20200713174921832

布尔测试

image-20200713174941031

image-20200713174949880

可以看到存在注入,但是当布尔值为真时页面没有回显,因此考虑布尔注入

首先判断该数据表的字段

image-20200713175252435

image-20200713175301836

可以看到一共有三个字段。

判断数据库名字的长度

使用length()函数

可以看到长度大于等于1

image-20200713175615810

小于15

image-20200713175702619

多次测试后发现数据库名长度为8

再按位测试数据库每一位的值

使用substr(str,a,b)函数,a是从第几个字符开始(注意:字符从1开始,不是从0开始),b是每次返回几个字符

image-20200713180012852

当测试到s时返回真,则数据库名的第一个字符为s

image-20200713180044267

通过这种方式可以进行爆库。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

20 − 3 =