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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解决touchStart滑动时触发点击事件「建议收藏」

    解决touchStart滑动时触发点击事件「建议收藏」由于我们在将点击事件委托到div,span,font,p等元素标签上时会导致移动端的ios设备无法识别这个点击事件(一般指click事件),此时我们一般会使用touchstart来替换click事件,但是使用touchstart来代替click事件的弊端就立刻显示出来,每当我们滑动屏幕时就会立刻出发点击事件此时加入我这个封装的方法,这个弊端就会迎刃而解functiontap(el,fn…

    2022年6月19日
    24
  • sqlserver怎么用语句创建表_mysql查询表的创建语句

    sqlserver怎么用语句创建表_mysql查询表的创建语句原文地址:http://database.51cto.com/art/201010/231018.htmSQLServer创建表是最常见也是最常用的操作之一,下面就为您介绍SQLServer创建表的语句写法,供您参考,希望可以让您对SQLServer创建表方面有更深的认识。USE suntest create table 仓库 ( 仓库编号 int ,  仓库

    2022年10月17日
    0
  • 菜鸟系列之C/C++经典试题(七)「建议收藏」

    菜鸟系列之C/C++经典试题(七)

    2022年1月26日
    41
  • mysql字符串和数字的互相转换

    mysql字符串和数字的互相转换1.最简单的方式就是直接在字符串后面+0,就相当于直接把字符串转为数字类型了,下面可以看一下具体的操作,可以看到通过+0操作,成功将两个字符串转化为了数字,并得到了相加后的结果。2.使用CAST()函数,使用方式为CAST(valueAStype);,下面可以看一下具体的操作例子,通过如下sql语句查看结果:SELECTCAST(‘5.45’ASSIGNED);…

    2022年5月30日
    49
  • idea里面怎么查看自己的激活码(注册激活)2022.03.11

    (idea里面怎么查看自己的激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月13日
    432
  • Perl 正则表达式小结

    Perl 正则表达式小结Perl正则表达式小结1.m定界符“/****/”斜杠为默认定界符,若更改“/”,则须m定界符说明,m{****}2.g全局匹配3.i大小写不敏感4.s用于替换操作5.e求表达式值6.\d 匹配单个数字7.\D匹配非数字字符

    2022年5月25日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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