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

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、获取用户和密码

用户名和密码用波浪号~隔开
做到这里就已经完成任务了

浙公网安备 33010602011771号