sqllab第七关通关笔记

知识点:

  • 利用回显信息不同进行盲注爆破出敏感信息
  • 两种绕过方法
    • 单引号闭合绕过;不加注释符
      • id =1' and 1='1 
    • 完全闭合原始语句的绕过;这题是采用了where id=(('输入'))
      • id =1')) and 1=1 --+

首先判断注入类型

构造id=1/0

正常回显,字符型注入

构造id=1'

出现错误了,说明单引号读取输入

构造id=1’‘

输出正常的语句;此时确认了这里是单引号引起的sql注入

构造id=1'+and+1=1

发现返回错误,说明语句不对

再尝试构造id=1’+and+1='1

正常回显,说明是简单的单引号绕过(这里猜错了,不只是单引号绕过,但是刚好可以用)

构造id=1’+and+1='1 --+

这里发现也能正常回显;这就纳闷了??如果是简单的单引号绕过的话,注释符应该把后面的那个引号进行注释了,那么and后面的引号应该会因为引号不闭合进行报错,但是这里正常显示了,这里就搞不懂了;但是不影响使用,既然这能解析,那就在构造一个测试一下

构造id=1’ and 'a'='a --+

出现了错误,说明还是有问题,但是不知道原始语句是什么样的

尝试把最后的注释符去掉,构造id=1' and 'a'='a

发现成功回显;说明这里可以通过单引号闭合的方式绕过,但是原始语句肯定不是只加了单引号进行读取输入数据

通过构造id=1' and database()='security(这步没截图,简单测了一下)

成功输出了正确内容;说明这里可以使用单引号闭合绕过并读取关键信息

由于没有有价值的回显信息,而且所有错误同一输出固定的语句,导致无法使用错误注入;

只能利用回显信息的不同进行bp爆破了,逐位爆破出对应的表名;利用bp抓包放到爆破模块

这里构造的payload:id=1%27+and+mid((select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27security%27),§1§,1)='§101§

对截取函数的起始位和后面的判断字符位进行标记;选择集束炸弹的方式进行爆破;

设置payload1为数字类型(numbers),步长为1,起始为1,终止为50,50位应该够了

设置payload2为字符组合类型(brute forcer),设置最小长度和最大长度都为1,因为他会把指定区间的长度都进行枚举,这里只需要进行字符爆破,所以设定长度为1,这样就是枚举每个字符和数字了

开始爆破,得出结果后进行过滤;因为错误和正确的输出长度是一样的,所以没办法利用长度进行辨别,点击上面的过滤条件,将正确的输出内容复制到过滤条件中,点击应用

出现了正确的内容,点击payload1进行排序,得到了所有的表明字符串;可以看到中间是由断号的,那个就是分隔符;按顺序从上往下依次读取表名信息,根据断号进行区分

到这里就算是完了,这关就是通了;但是到这里我还是没搞懂原始的查询语句到底是什么样的;之后看了一下别人的wp才发现,这里是采用了两层小括号进行读取的;即where id=(('输入'))

所以还有第二种方法进行绕过:构造payload:id=1')) and 1=1 --+

之后就跟我上面的方法一样,利用bp爆破出相关的敏感信息

10

上一篇:【Flutter 面试题】在Flutter中如何处理用户输入和手势操作?-写在前面


下一篇:人工智能|机器学习——K-means系列聚类算法k-means/ k-modes/ k-prototypes/ ......(划分聚类)