1. 概述
对于MSSQL数据库,盲注是一种比较常见的攻击方式,其中一个重要的步骤就是探测数据库的版本信息。正确的数据库版本信息可以帮助攻击者针对性地利用相关漏洞,提高攻击成功率。本文将介绍在MSSQL盲注中常用的版本探测技术。
2. 基于ERROR信息的版本探测
2.1 原理
通过发送SQL语句触发MSSQL数据库产生逻辑错误,进而获取ERROR信息,通过分析ERROR信息中的一些关键字、提示信息等特征,可以推断出MSSQL的版本信息。这种方式比较简单粗暴,但对于较老版本的MSSQL或者一些特殊定制版本的MSSQL有可能会有误判。
2.2 实现
攻击者可以通过在SQL语句中故意出错来触发ERROR信息,类似如下写法:
SELECT * FROM a' OR 1=1--
这里将单引号缺失,造成语法错误,从而触发ERROR信息。常见的ERROR信息和MSSQL版本的对应关系如下表所示:
ERROR信息 | 版本 |
---|---|
...Microsoft SQL Server Native Client... | 2005 |
...OLE DB Provider for SQL Server... | 2000 |
...[Microsoft][ODBC SQL Server Driver]... | 7 |
3. 基于SERVERPROPERTY函数的版本探测
3.1 原理
SERVERPROPERTY是MSSQL提供的一个函数,可以用于查询数据库实例和版本信息。攻击者可以通过执行如下SQL语句,获取MSSQL的版本信息:
SELECT SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
其中productversion表示版本号,由四段数字组成;productlevel表示补丁程序的级别;edition表示MSSQL的版本,例如“Enterprise Edition”等。
3.2 实现
攻击者可以通过在注入的SQL语句中增加SERVERPROPERTY函数来获取版本信息,具体写法如下:
SELECT @@version;
执行以上SQL语句即可得到类似如下信息:
------------------------------------------------------------------------
Microsoft SQL Server 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64)
Oct 20 2015 15:36:27
Copyright (c)
Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.3
(Build 9600: ) (Hypervisor) (1 row(s) affected)
其中粗体部分就是MSSQL的版本信息,可以通过正则表达式或字符串处理来提取。
4. 基于数据库信息表的版本探测
4.1 原理
系统表sys.databases可以提供关于所有数据库的信息,包括数据库的ID、名称、创建时间、状态等。攻击者可以通过读取sys.databases表来获取MSSQL的版本信息。
4.2 实现
攻击者可以通过如下SQL语句读取sys.databases表中的信息来获取版本信息:
SELECT name, compatibility_level FROM sys.databases WHERE name=NULL
其中name表示数据库名称,compatibility_level表示MSSQL的版本。常见的compatibility_level与MSSQL版本的对应关系如下表所示:
compatibility_level | 版本 |
---|---|
80 | 2000 |
90 | 2005 |
100 | 2008 |
110 | 2012 |
120 | 2014 |
130 | 2016 |
140 | 2017 |
5. 总结
以上介绍了MSSQL盲注中常用的版本探测技术,包括基于ERROR信息、基于SERVERPROPERTY函数、以及基于数据库信息表等方式。攻击者可以根据需要选择适合自己的版本探测方式,在获取到正确的版本信息后再进一步进行攻击。同时,MSSQL也不断地更新升级,攻击者需要时刻关注最新版本的MSSQL及其相关漏洞,以便更好地实施攻击。