1. 前言
MSSQL是一种常见的关系型数据库,但是在使用MSSQL的过程中容易忽略权限的问题,导致攻击者可以通过一些简单的手段获取更多的信息。本文将介绍MSSQL低权限利用的案例,以及从极其有限的权限中获取更多信息的方法。
2.案例: MSSQL低权限利用
2.1 登录SQL Server Management Studio
在本案例中,攻击者使用了一个有限的SQL Server账号进行攻击,该账号只有SELECT权限。首先需要通过SQL Server Management Studio登录到数据库,并在Object Explorer中右键单击要连接的数据库,选择新建查询。
SELECT @@servername AS 'Server Name';
SELECT db_name() AS 'Database Name';
上述代码的含义是查询数据库的名称和服务器的名称。从查询结果可以看出,该攻击者已成功连接到服务器并找到要攻击的数据库。
2.2 查看数据库架构
通过以下的SQL代码,攻击者可以查看所有表、视图、存储过程和函数等对象:
SELECT
s.name AS 'Schema',
o.name AS 'Object',
o.type_desc AS 'Type'
FROM
sys.objects o
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE
o.type IN ('U', 'V', 'P', 'FN') AND s.name NOT IN ('sys', 'INFORMATION_SCHEMA');
该代码的查询结果将显示数据库的所有对象,包括其名称、对象类型和模式名称。
2.3 查看表格架构
攻击者可以使用以下查询查看表格的架构:
SELECT
t.name AS 'Table',
c.name AS 'Column',
typ.name AS 'Type',
c.max_length AS 'Max Length'
FROM
sys.tables t
JOIN sys.columns c ON c.object_id = t.object_id
JOIN sys.types AS typ ON typ.user_type_id = c.user_type_id
WHERE
t.name NOT LIKE 'sys%' AND t.is_ms_shipped = 0;
该查询将返回所有用户定义的表和列的列表,包括列的名称、数据类型和最大长度。
2.4 查看数据
通过 SELECT 语句查询表格中的数据:
SELECT * FROM table_name;
该查询语句可以返回整个表的所有数据,可以使用WHERE子句对数据进行过滤。
3. 从低权限中获取更多信息
3.1 利用sys.syslogins表格
sys.syslogins 表存储服务器登录信息,包括用户名、密码散列值、默认数据库和默认语言,在MSSQL中可以通过SELECT语句查询该表:
SELECT name, password, dbname, language
FROM master.sys.syslogins
WHERE name NOT LIKE '##%';
上述查询语句可以返回服务器上所有系统和SQL鉴定的登录信息和密码散列。
3.2 利用信息架构视图
系统表 sys.dm_exec_sessions 提供了有关当前数据库会话的信息。其中包括会话标识符、登录名、客户端应用程序名称、连接时间、最后一次请求的时间和当前状态。以下是sys.dm_exec_sessions的查询语句:
SELECT
session_id,
login_name,
host_name,
program_name,
last_request_start_time
FROM
sys.dm_exec_sessions;
可以使用此信息对正在运行的会话进行跟踪,并确定哪些用户正在连接到数据库,以及他们正在执行什么操作。
4. 总结
本文介绍了MSSQL低权限利用的案例,展示了攻击者如何从有限的权限中获取更多的信息。通过查询数据库架构、表格架构和争取的数据、sys.syslogins表格和sys.dm_exec_sessions,攻击者可以增大攻击的范围,并在进一步攻击中获取更多的权限。为了更好的保护数据库安全,管理员需要检查并限制用户权限,并避免赋予过多的权限。