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

不同数据库的注入报错信息

不同数据库在报错注入时返回的报错信息具有显著差异,了解这些差异可以帮助快速判断数据库类型并构造针对性的注入攻击语句。以下是主流数据库的典型报错模式及对比:


目录

​​

1. MySQL​​

​​2. Microsoft SQL Server​​

​​3. Oracle​​

​​4. PostgreSQL​​

​​5. SQLite​​

​​对比表​​

​​实战应用:通过报错快速判断数据库类型​​

​​防御建议​​


1. MySQL​

​报错特征​​:

  • 关键词"You have an error in your SQL syntax"
  • 错误中包含near关键字(显示错误位置)。
  • 使用特定函数触发报错(如extractvalueupdatexml)。

​示例​​:

' AND updatexml(1,concat(0x7e,version()),0) --+

​错误信息​​:

XPATH syntax error: '~5.7.38-log'

​其他特征​​:

  • 错误代码以1064开头(语法错误通用代码)。
  • 默认关闭详细错误(需配置display_errors=On才会显示完整信息)。

​2. Microsoft SQL Server​

​报错特征​​:

  • 关键词"Conversion failed""Incorrect syntax"
  • 错误信息格式清晰,明确提示数据类型或语法问题。
  • 错误代码前缀为Msg 245Msg 8114等(不同代码代表不同问题)。

​示例​​:

' AND 1=convert(int,@@version) --+

​错误信息​​:

Conversion failed when converting the nvarchar value 'Microsoft SQL Server 2019...' to data type int.

​其他特征​​:

  • 可利用错误堆栈信息泄露敏感数据(如error=后的内容)。

​3. Oracle​

​报错特征​​:

  • 标准错误前缀"ORA-xxxxx"(如ORA-01756)。
  • 错误信息直接提示具体问题(如quoted string not properly terminated)。
  • 依赖精度或类型转换错误触发信息泄露。

​示例​​:

' AND 1=ctxsys.drithsx.sn(1,(select banner from v$version where rownum=1)) --+

​错误信息​​:

ORA-20000: Oracle Database 19c Enterprise Edition...

​其他特征​​:

  • 系统视图如v$versionuser_tables常用于泄露信息。
  • 报错空间限制较严格(需通过substr()分段获取数据)。

​4. PostgreSQL​

​报错特征​​:

  • 关键词"ERROR:"开头,错误信息简洁。
  • 类型转换或函数参数不匹配时触发详细报错。
  • 错误代码格式如22P02(无效文本表示)。

​示例​​:

' AND 1=cast(version() as int) --+

​错误信息​​:

ERROR: invalid input syntax for integer: "PostgreSQL 14.4..."

​其他特征​​:

  • 可利用pg_read_file等函数泄露文件内容。

​5. SQLite​

​报错特征​​:

  • 错误信息较简洁,格式为"Error: near ...: syntax error"
  • 错误可能提示未找到表名或列名。

​示例​​:

' AND 1=load_extension(0,char(116,101,115,116)) --+

​错误信息​​:

Error: not authorized to use function: load_extension

​对比表​

数据库典型报错触发方式错误前缀或关键词示例函数/句法
​MySQL​XPATH函数、除零错误syntax error + nearupdatexmlextractvalue
​SQL Server​类型转换(如convertMsg 8114Conversion failedconvert(int,@@version)
​Oracle​精度错误或虚拟表访问ORA-xxxxxctxsys.drithsx.sn()
​PostgreSQL​类型转换(如castERROR: + 错误代码(如22P02cast(version() as int)
​SQLite​未授权函数调用Error: near ...load_extension()

​实战应用:通过报错快速判断数据库类型​

  1. ​触发一个可控错误​​:
    输入 ' AND 1=invalid_func(1) --
    观察错误信息:

    • XPATH错误 → ​​MySQL​
    • invalid functionMsg → ​​SQL Server​
    • ORA-00904 → ​​Oracle​
    • ERROR: function invalid_func → ​​PostgreSQL​
  2. ​校验函数是否存在​​:
    探测数据库特有函数(如Oracle的dbms_xmlgen.getxml):

    ' AND dbms_xmlgen.getxml('select 1 from dual')=1 --+

​防御建议​

  1. ​关闭详细错误​​:禁止返回数据库原始错误信息(显示统一提示页面)。
  2. ​参数化查询​​:使用预编译语句(如PreparedStatement)。
  3. ​权限控制​​:数据库账号仅授予最低权限。

通过结合错误特征和数据库特有函数,可以快速定位目标数据库类型,并调整攻击策略(如改用特定于该数据库的注入手法)。

http://www.dtcms.com/a/131045.html

相关文章:

  • ubuntu 2204 安装 vcs 2018
  • L1-5 吉老师的回归
  • Python赋能量子计算:算法创新与应用拓展
  • 浏览器发起调用到服务器的全过程解析
  • Mybatis的简单介绍
  • 记一次Agora-RTSALite编译遇到的问题
  • SuperPoint论文及源码解读
  • 使用Lombok无法生成Getter()与Setter()和toString()方法的解决方案
  • RocketMQ 中 DefaultMessageStore 的 AllocateMappedFileService 属性详解
  • 【Linux】Linux 权限:数字背后的神秘 “门禁卡” 系统
  • 剖析Spring中的设计模式(一) | 工厂观察者
  • 【零基础玩转多模态AI:Gemma3 27B开源视觉模型本地部署与远程访问】
  • 全星APQP软件:为用户提供高效、合规、便捷的研发管理体验
  • HDLBIT知识点
  • 探索 Vue 3 响应式系统:原理与实践
  • 蓝桥杯电子赛_E2PROM(AT24C02)
  • Agent 2 Agent VS MCP
  • 【C++】深拷贝与浅拷贝
  • GitHub 趋势日报 (2025年04月08日)
  • C语言精讲-12
  • 【Linux】基础开发工具
  • 八大可商用桌面客户端应用开发框架深度指南-优雅草卓伊凡
  • 操作系统基础:05 系统调用实现
  • playwright 教程高级篇:掌握网页自动化与验证码处理等关键技术详解
  • [数据结构]排序 --2
  • 【C++】C++的引用
  • 在 Ubuntu 下通过 Docker 部署 Caddy 服务器
  • C++双链表介绍及实现
  • 从输入URL到页面渲染:浏览器请求的完整旅程解析
  • LLM学习笔记3——使用Docker(vLLM+OpenWebUI)实现本地部署DeepSeek-R1-32B模型