zoukankan      html  css  js  c++  java
  • 渗透测试---SQL注入~web日志分析thinkphp漏洞及duplicate报错注入

    查看web时可以直接检索关键字,如cmd,就是直接执行系统命令这种的。

    select count(*),floor(rand(0)*2) x from information_schema.character_sets group by x;

    rand(0)

    随机输出0~1间的浮点数

    select rand(0) from information_schema.schemata;

    rand(0)*2

    随机输出0~2间的浮点数

    select rand(0)*2 from information_schema.schemata;

    floor(rand(0)*2)

    将随机输出的浮点数取整

    select floor(rand(0)*2) from information_schema.schemata;

    count(*)

    统计输出数目

    select count(*),floor(rand(0)*2) from information_schema.schemata;

    select floor(rand(0)*2)a from information_schema.schemata;

    字段名

    group by a

    对a列分类汇总

    select floor(rand(0)*2)a from information_schema.schemata group by a;

    报错原因分析:

    本质:

    group by语句的报错。

    group by语句报错的原因:

    floor(rand(0)*2)的不确定性,即可能为0也可能为1。

    group by key 执行时循环读取数据的每一行,将结果保存于临时表中。

    读取每一个行key时:

    如果key存在于临时表中,则更新临时表中的数据(不再计算rand值)。

    如果key不存在于临时表中,则在临时表中插入key所在行的数据(再次计算rand值)。

    假设此时临时表只有key为1的行,不存在key为0的行,那么数据库要将该条记录插入临时表,由于是随机数,插入时要再次计算rand值,此时floor(rand(0)*2)结果可能为1,就会导致插入时冲突而报错。即检测时和插入时都计算了rand值。

    实际测试中发现,出现报错至少要求数据记录为3行,记录数超过3行一定会报错,2行时是不报错的。

    利用concat将报错的key和我们想要注入的语句一并执行输出,达到报错回显的效果。

    利用floor函数进行报错时只能爆一行结果,group_concat函数不适用于此报错函数。

    可以利用limit 0,1逐行遍历。

  • 相关阅读:
    团队项目-个人博客-4.25
    团队项目-个人博客-4.24 学习进度08
    评价使用的输入法
    个人工作总结08
    个人工作总结07
    第八周学习进度条
    个人工作总结06
    构建之法阅读笔记04
    个人工作总结05
    个人工作总结04
  • 原文地址:https://www.cnblogs.com/123456ZJJ/p/12810283.html
Copyright © 2011-2022 走看看