利用 SQL 注入识别数据库方法总结

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 利用 SQL 注入识别数据库方法总结

一、概述


识别数据库的最好方法在很大程度上取决于是否处于盲态。


如果应用程序返回(至少在某种程度上)查询结果和(或)数据库服务器错误消息(例如,非盲态),那么跟踪会相当简单,因为可以很容易通过产生的输出结果来提供关于底层技术的信息。


但如果处于盲态,无法让应用返回数据库服务器消息,那么就需要改变方法,尝试注入多种已知的、只针对特定技术才能执行的查询。


通过判断这些查询中的哪一条被成功执行,获取目前面对的数据库服务器的精确信息。

二、非盲跟踪


大多数情况下,要了解后台数据库服务器,只需查看一条足够详细的错误消息即可。

根据执行查询所使用的数据库服务器技术的不同,这条由同类型SOL错误产生的消息也会各不相同。

例如,添加一个单引号将迫使数据库服务器将单引号后面的字符看作字符串而非SOL代码,这会产生一条语法错误


2.1 常见数据库报错

Microsoft SQL Server

Microsot OLE DB Provider for ODBC Drivers error '80040e14'
[Microsof][ODBC SOL Server Driver][SQL ServerjUnclosed quotation mark after the character string "
/products.asp, line 33

MySQL

ERROR 1064(42000):You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use
near '' at line 1

这里的错误消息也包含了清晰的、关于数据库服务器技术的线索。

其他错误可能用处不大,但通常这不是问题。

请注意后面这条错误消息开头部分的两个错误代码。这些代码本身就是MySQL的 “签名” 。


Oracle

ORA-01773:may not specify column datatypes in this CREATE TABLE

PostareSQL

然而有时,具有启示意义的关键信息并非来自于数据库服务器本身,而是来自于访问数据库的技术。例如,请看下面的错误:

pg query(): Query failed: ERROR: unterminated quoted string at or near
""at character 69 in /var/www/php/somepge.php on line 20

这里并没有提及数据库服务器技术,但是有一个特定数据库产品所独有的错误代码。

PHP使用 pg_query 函数(以及已经弃用的版本pgexec函数)对 PostgreSQL 数据库执行查询,因此可以立即推断出后台运行的数据库服务器是 PostgreSQL。

2.2 获取标志信息

幸运的是,如果 Web 应用返回了所注入查询的结果,那么要弄清其准确技术通常会很容易。


所有主流数据库技术都至少允许通过一条特定的查询来返回软件的版本信息。


我们需要做的是让 Web 应用返回该查询的结果。


此表给出了各种特定技术所对应的查询示例,它们将返回包含准确数据库服务器版本信息的字符串

数据库 查询
Micrsoft SQL Server SELECT @@version
MySQL SELECT verson()
SELECT @@version
Oracle SELECT banner FROM v$version
SELECT banner FROM v$version WHERE rownum = 1
Postgre SQL SELECT version()

现在咱们主要注意两个数据库,因为它们会返回底层操作系统和系统架构信息的数据库


Micrsoft SQL Server

Microsoft SQL Server 2019 (RTM-CU12) (KB5003830) - 15.0.4188.2 (X64)   
    Jun 15 2022 02:36:30   
    Copyright (C) 2019 Microsoft Corporation  
    Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19041: ) (Hypervisor)

Microsoft SQL Server 2019: 这是 SQL Server 的主要版本号,这里表示是 2019 版本。

(RTM-CU12) (KB5003830): 这部分提供了关于该 SQL Server 版本更新和补丁的额外信息。RTM 可能代表“Release to Manufacturing”,CU 代表累积更新(Cumulative Update),KB 号码是用于标识特定更新或补丁的编号。

15.0.4188.2: 这是 SQL Server 的内部版本号,通常由主版本号、次版本号、构建号和修订号组成。

(X64): 表示这个 SQL Server 实例是为 64 位系统编译的。

Jun 15 2022 02:36:30: 这是 SQL Server 实例的编译日期和时间。

Copyright (C) 2019 Microsoft Corporation: 版权信息,表明这个 SQL Server 是由 Microsoft Corporation 在 2019 年发布的。

Developer Edition (64-bit): 表示这个 SQL Server 实例是开发者版,并且是 64 位的。SQL Server 有多个版本,包括企业版、标准版、开发者版等,每个版本都有其特定的用途和许可要求。

on Windows 10 Pro 10.0  (Build 19041: ) (Hypervisor): 这部分描述了 SQL Server 实例运行的操作系统环境。这里表明 SQL Server 是在 Windows 10 Pro 10.0 的 64 位版本上运行的,并且该 Windows 版本构建号是 19041。(Hypervisor) 表示该操作系统可能正在虚拟机或具有超虚拟化功能的物理机上运行。


Postgre SQL

PostgreSQL 13.3 (Debian 13.3-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit


PostgreSQL 13.3: 这是 PostgreSQL 的主要版本号,这里表示是 13.3 版本。

(Debian 13.3-1.pgdg100+1): 这部分提供了关于 PostgreSQL 版本在特定发行版(这里是 Debian)中的额外信息,包括该发行版特有的版本号或补丁信息。

on x86_64-pc-linux-gnu: 这部分描述了 PostgreSQL 运行的硬件架构和操作系统类型。在这里,它运行在 x86_64 架构的 Linux 系统上。

compiled by gcc (Debian 8.3.0-6) 8.3.0: 这部分告诉我们 PostgreSQL 是用哪个编译器以及哪个版本编译的。在这里,它使用 Debian 8.3.0-6 版本的 gcc 编译器进行编译的。

64-bit: 这表示 PostgreSQL 是 64 位版本的。

三、盲跟踪

3.1 根据字符串推断


如果应用不直接在响应中返回您所需要的信息,那么要想了解后台使用的技术,就需要采用一种间接方法。


这种间接方法基于不同数据库服务器所使用的SQL方言上的细微差异。


最常用的技术是利用不同产品在连接字符串方式上的差异。我们以下面的简单查询为例:

最常用的技术是利用不同产品在连接字符串方式上的差异。我们以下面的简单查询为例:

SELECT "somestring"

该查询对大多数主流数据库服务器都是有效的,但如果想将其中的字符串分成两个子串,不同产品间便会出现差异。具体来讲,可以利用此表列出的差异来进行推断。

数据库 查询
Micrsoft SQL Server SELECT 'some' + 'string'
MySQL SELECT 'some' 'string'
SELECT CONCAT('some', 'string')
Oracle SELECT 'some' || 'string'
SELECT CONCAT('some', 'string')
PostgreSQL SELECT 'some' || 'string'
SELECT CONCAT('some', 'string')


因此,如果拥有一个可注入的字符串参数,便可以尝试不同的连接语法。

通过判断哪一个请求会返回与原始请求相同的结果,您可以推断出远程数据库的技术。

3.2 根据数字函数推断

假使没有可用的易受字符串参数,则可以使用与数字参数类似的技术。

具体来讲,您需要一条针对特定技术的SQL语句,经过计算后它能成为一个数字。

此表中的所有表达式在正确的数据库下经过计算后都会成为整数,而在其他数据库下将产生一个错误。

数据库 查询
Micrsoft SQL Server @@pack_received
@@rowcount
MySQL connection_id()
last_insert_id()
row_count()


Oracle BITANID(1,1)
Postgre SQL SELECT EXTRACT(DOW FROW NOW())













相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
20天前
|
存储 监控 安全
数据库多实例的部署与配置方法
【10月更文挑战第23天】数据库多实例的部署和配置需要综合考虑多个因素,包括硬件资源、软件设置、性能优化、安全保障等。通过合理的部署和配置,可以充分发挥多实例的优势,提高数据库系统的运行效率和可靠性。在实际操作中,要不断总结经验,根据实际情况进行调整和优化,以适应不断变化的业务需求。
|
7天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
8天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
9天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
19天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
26 7
|
17天前
|
SQL BI 数据库
SQL操作的一些基本方法
【10月更文挑战第27天】SQL操作的一些基本方法
29 3
|
17天前
|
SQL 监控 固态存储
SQL优化有哪些方法?
【10月更文挑战第27天】SQL优化有哪些方法?
15 3
|
19天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
16 2
|
24天前
|
SQL JSON Java
没有数据库也能用 SQL
SPL(Structured Process Language)是一款开源软件,允许用户直接对CSV、XLS等文件进行SQL查询,无需将数据导入数据库。它提供了标准的JDBC驱动,支持复杂的SQL操作,如JOIN、子查询和WITH语句,还能处理非标准格式的文件和JSON数据。SPL不仅简化了数据查询,还提供了强大的计算能力和友好的IDE,适用于多种数据源的混合计算。
|
25天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)

热门文章

最新文章