iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >sql注入报错怎么解决
  • 839
分享到

sql注入报错怎么解决

2023-07-02 08:07:13 839人浏览 独家记忆
摘要

今天小编给大家分享一下sql注入报错怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。0x01我们先来看一看现

今天小编给大家分享一下sql注入报错怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

0x01

我们先来看一看现象,我这里有一个users表,里面有五条数据:

sql注入报错怎么解决

然后用我们的报错语句查询一下:

select count(*),(concat(floor(rand()*2),(select version())))x from users group by x

sql注入报错怎么解决

成功爆出了数据库的版本号。

要理解这个错误产生的原因,我们首先要知道group by语句都做了什么。我们用一个studetn表来看一下:

sql注入报错怎么解决

现在我们通过年龄对这个表中的数据进行下分组:

sql注入报错怎么解决

形成了一个新的表是吧?你其实应该能够想到group by 语句的执行流程了吧?最开始我们看到的这张sage-count()表应该时空的,但是在group by语句执行过程中,一行一行的去扫描原始表的sage字段,如果sage在sage-count()不存在,那么就将他插入,并置count()置1,如果sage在sage-count()表中已经存在,那么就在原来的count(*)基础上加1,就这样直到扫描完整个表,就得到我们看到的这个表了。

注:这里有特别重要的一点,group by后面的字段时虚拟表的主键,也就是说它是不能重复的,这是后面报错成功的关键点,其实前面的报错语句我们已经可以窥见点端倪了

sql注入报错怎么解决

0x02

正如我前面所说的,报错的主要原因时虚拟表的主键重复了,那么我们就来看一下它到底是在哪里,什么时候重复的。这里rand()函数就登场了。
首先我们先来了解rand()函数的用法:

1.用来生成一个0~1的数

2.还可以给rand函数传一个参数作为rand()的种子,然后rand函数会依据这个种子进行随机生成。

那他们的区别是什么呢?我们来看一下,这两个语句的执行效果:

sql注入报错怎么解决

可以看到rand()生成的数据毫无规律,而rand(0)生成的数据则有规律可循,是:
0110 0110

注:如果你觉得数据不够,证明不了rand()的随机性,你可以自己多插入几条数据再查询试一下。

0x03

现在我们弄清楚了group by语句的工作流程,以及rand()与rand(0)的区别,那么接下来就是重点了,mysql官方说,在执行group by语句的时候,group by语句后面的字段会被运算两次。

**第一次:**我们之前不是说了会把group by后面的字段值拿到虚拟表中去对比吗,在对比之前肯定要知道group by后面字段的值,所以第一次的运算就发生在这里。

**第二次:**现在假设我们下一次扫描的字段的值没有在虚拟表中出现,也就是group by后面的字段的值在虚拟表中还不存在,那么我们就需要把它插入到虚拟表中,这里在插入时会进行第二次运算,由于rand函数存在一定的随机性,所以第二次运算的结果可能与第一次运算的结果不一致,但是这个运算的结果可能在虚拟表中已经存在了,那么这时的插入必然导致错误!

所以我们现在通过一个例子来验证我们的理论,拿出我们最开始的例子:

select count(*),(concat(floor(rand(0)*2),'@',(select version())))x from users group by x

声明:users表就是本文第一个表,表中有五条数据

注意我这里用的是rand(0),不是rand(),rand(0)生成的有规律的序列:

sql注入报错怎么解决

我们跟着刚刚的思路走,最开始的虚拟表是空的,就像下面一样:

当我扫描原始表的第一项时,第一次计算,floor(rand(0)*2)是0,然后和数据库的版本号(假设就是5.7.19)拼接,到虚拟表里去寻找x有没有x的值是x@5.7.19的数据项,结果显然是没有,那么接下来就将它插入到上表中,但是还记得吗,在插入之前会进行第二次计算,这时x的值就变成了1@5.7.19,所以虚拟表变成了下面这样:

count(*)x
11@5.7.19

现在扫描原始表的第二项,第一次计算x==’1@5.7.19‘,已经存在,不需要进行第二次计算,直接插入,得到下表:

count(*)x
21@5.7.19

扫描原始表的第三项,第一次计算x==‘0@5.7.19’,虚拟表中找不到,那么进行第二次计算,这时x==‘1@5.7.19’,然后插入,但是插入的时候问题就发生了,虚拟表中已经存在以1@5.7.19为主键的数据项了,插入失败,然后就报错了!

上面是使用rand(0)的情况,rand(0)是比较稳定的,所以每次执行都可以报错,但是如果使用rand()的话,因为它生成的序列是随机的嘛,所以并不是每次执行都会报错,下面是我的测试结果:

sql注入报错怎么解决

执行了五次,报错两次,所以是看运气。

以上就是“sql注入报错怎么解决”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: sql注入报错怎么解决

本文链接: https://www.lsjlt.com/news/340616.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • sql注入报错怎么解决
    今天小编给大家分享一下sql注入报错怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。0x01我们先来看一看现...
    99+
    2023-07-02
  • SQL注入怎么解决
    小编给大家分享一下SQL注入怎么解决,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言SQL注入即是指web应用程序对用户输入数...
    99+
    2022-10-18
  • SQL注入--盲注及报错注入
    盲注查询 盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的 布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根据你的注入信息返回Ture...
    99+
    2014-11-30
    SQL注入--盲注及报错注入
  • SQL注入报错注入函数图文详解
    目录前言常用报错函数用法详解updateXML()函数实例extractvalue()函数floor()函数exp()函数12种报错注入函数总结前言 报错注入的前提是当语句发生错误时,错误信息被输出到前端。其漏...
    99+
    2022-07-08
    sql注入解决方法 sql注入 报错注入 sql报错注入原理
  • SQL注入教程之报错注入
    目录SQL报错注入概述报错注入的前提条件Xpath类型函数extractvalue()updatexml()其他函数floor()、rand()、count()、group...
    99+
    2022-11-13
  • sql注入报错之注入原理实例解析
    目录前言0x010x020x03总结前言 我相信很多小伙伴在玩sql注入报错注入时都会有一个疑问,为什么这么写就会报错?曾经我去查询的时候,也没有找到满意的答案,时隔几个月终于找到搞清楚原理...
    99+
    2022-06-13
    sql注入 报错注入 SQL报错注入 sql注入报错
  • @Autowired注解注入的xxxMapper报错怎么办
    这篇文章主要介绍了@Autowired注解注入的xxxMapper报错怎么办,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。@Autowired注解注入的xxxMapper报错...
    99+
    2023-06-25
  • 详解SQL报错盲注
    目录一、SQL报错函数详解二、SQL报错盲注payload构造1、updateXML语句构造思路2、查询当前数据库3、查询表名4、查询列名5、查询字段名6、查询数据今天继续给大家介绍linux运维相关知识,本文...
    99+
    2022-07-22
    SQL报错盲注 SQL盲注
  • navicat导入sql报错的解决方法
    小编给大家分享一下navicat导入sql报错的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!场景:100多M的sql文...
    99+
    2022-10-18
  • @Autowired注解注入的xxxMapper报错问题及解决
    目录@Autowired注解注入的xxxMapper报错项目场景问题描述解决方案分析@Autowired无法加载Mapper,报错404或者500@Autowired注解注入的xxx...
    99+
    2022-11-12
  • @Transactional注解异常报错怎么解决
    这篇文章主要介绍“@Transactional注解异常报错怎么解决”,在日常操作中,相信很多人在@Transactional注解异常报错怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”@Transact...
    99+
    2023-06-29
  • SQL报错注入的示例分析
    小编给大家分享一下SQL报错注入的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!SQL报错注入概述通过构造特定的SQL语句,让攻击者想要查询的信息(如数据...
    99+
    2023-06-29
  • 报错型sql注入原理分析
    0x00:前言  关于sql注入,经久不衰,现在的网站一般对sql注入的防护也相对加强了,2016年的***测试报告中,出现最多的是xss(跨站脚本***)和明文传输等,但是对...
    99+
    2022-10-18
  • sql注入报错方式有哪些
    sql注入报错方式有12种,分别是:通过floor报错,注入语句如下:and select 1 from (select count(*),concat(ver...
    99+
    2022-10-10
  • sql注入单引号为什么会报错
    sql注入单引号会报错的原因有:不符合sql语法规则,例如://一开始SQL语句是这样的:select * from users where id='1'//当你加了单引号后变成了这样:select * fro...
    99+
    2022-10-04
  • Mybatis详解在注解sql时报错的解决方法
    目录错误:文件结构BookMapper.javaBookMapperSQL .javaMybatis的配置文件分析:错误: 在做Mybatis用注解方式来注入sql的练习时,报了这样...
    99+
    2022-11-13
  • PHP导入SQL报错的原因有哪些及怎么解决
    这篇文章主要介绍“PHP导入SQL报错的原因有哪些及怎么解决”,在日常操作中,相信很多人在PHP导入SQL报错的原因有哪些及怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP导入SQL报错的原因有哪...
    99+
    2023-07-05
  • 引入SpringCloud-gateway报错怎么解决
    本篇内容介绍了“引入SpringCloud-gateway报错怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.问题描述在我引入Sp...
    99+
    2023-06-20
  • python导入selenium报错怎么解决
    在导入selenium时,可能会遇到各种不同的错误。以下是一些常见的报错和解决方法:1. ImportError: No modul...
    99+
    2023-10-25
    python selenium
  • vue加入cdn报错怎么解决
    如果在Vue项目中加入CDN报错,可以尝试以下解决方法:1. 检查CDN链接是否正确:确保在index.html文件中引入的CDN链...
    99+
    2023-09-05
    vue cdn
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作