第一关

 

目的:拿到所有的用户和密码

 

1、分别?id=1  ?id=2  ?id=2-1

 

 

 

 通过id=2-1 的界面和id=1的界面不一致 判断为字符型注入

所以接下来要判断闭合方式

2、判断闭合方式:

输入 ?id=2'

 出现报错

看这一部分

 引号从头部和从尾部开始往中间配对,会发现剩下  2’  ,  所以判断闭合方式为单引号'

3、接下来要查看列数

利用 order by 进行二分法查询 这里先从5开始

 发现5不对

再试一下 3

 没有出现报错,所以列数为3

4、接着进行回显查询

 这里要把id改为-2(因为页面每次只会显示一条语句,把id改成数据库不存在的id,比如-2,),利用union进行查询

 发现回显位为2,3,也就是第二位和第三位,就可以从这2个位置输入我们想要的指令去查询我们想要的信息

 

我们想要拿到数据库的用户和密码,那首先得知道是哪个数据库

数据库里面又有很多数据表,那我们也要拿到是哪个数据表

那数据表里面又有很多列,包含很多信息,但我们只要用户名和密码这2列就行了

 

所以顺序为:爆库->爆表->爆字段->获取信息

 

 

1、爆库

2,3选一个位置去进行就行了,我这里选择3这个位置

 拿到数据库名:security

2、爆表

 这里可以看到它只把一个表名给我,但数据库又不止一个表名,要怎么一次性拿到所有的表名呢 ——————利用group_concat()函数

grouo_concat函数就是把所有的字符串拼接起来,每个字符串之间用逗号隔开

 但问题又来了,这么多表,我要的是哪个?

刚才我们的数据库名是security

所以可以根据库名和where来缩小范围

 可以看到security这个库有emails,referers,uagents,users这4个表,显然用户名和密码是放在users之中的

再解释一下为什么这样要用 where table_schema=database()  而没有用 where table_schema='security'

从网上看的是说有一些网页对单引号检测很严格,输入'security'  用了2个单引号 从而被检测出来 无法执行

 

3、爆字段

现在我们要拿到users这个表所有的列

 

 可以看到这里有很多列,但我这个语句查找的是这个数据库中所有的表的列,不是单独users这个表的列,所以要继续限制一下范围

 可以看到users这个表有id,usersname,password这3列

个人理解:其实因为这数据库中只有security这个库中有user这个表,所以其实也可以把table_schema=database()删掉 也是一样的结果

如果别的库也有user这个表,估计就要把table_schema=database()加上

4、获取用户和密码

 用户名和密码用波浪号~隔开

做到这里就已经完成任务了

posted @ 2023-09-13 13:31  Xuraniiiz  阅读(55)  评论(0)    收藏  举报