SQL注入原理之不安全的数据库配置

1、默认的用户

数据库带有很多默认的用户安装内容。SQL Server使用声名狼藉的“SA”作为数据库系统管理员账户,MySQL使用“root”和“Anonymous”用户账户,Oracle则在创建数据库时通常默认会创建SYS、SYSTEM、DBSNMP和OUTLN账户,当然这并非全部的账户。
应用开发人员在编写程序代码是,通常使用某个内置的权限账户来连接数据库,而不是根据程序需要老创建特征用户账户。

2、附加内容

攻击者在利用SQL注入漏洞时,通常会尝试访问数据库的元数据。元数据是指数据库内部包含的数据,比如数据库或表的名称、列的数据类型或访问权限。优势也适用数据字典和系统目录等其他项来表示这些信息。
MySQL服务器(5.0及之后的版本)的元数据位于Information_schema虚拟数据库中,可通过show databases和show tables命令访问。所有MySQL用户均有权访问该数据库中的表,但只能查看表中那些与该用户访问权限相对应的行。
SQL Server的原理与MySQL类似,可通过Information_schema或系统表(sysobjects、sysindexkeys、sysindexes、syscolumns、systypes等)及系统存储过程来访问元数据。SQL Server 2005引入了一些名为“sys.*”的目录视图,并限制用户只能访问拥有相应访问权限的对象。所有的SQl Server用户均有权限访问数据库中的表并可以查看表中的所有行,而不管用户是否对表或所查询的数据拥有相应的访问权限。
Oracle提供了恨过全局内置视图来访问Oracle的元数据(ALL_TABLES、ALL_TAB_COLUMNS等)。这些视图列出了当前用户可访问的属性和对象。此外,以USER_开头的视图只显示当前用户拥有的对象(列如,更加受限的元数据视图);以DBA_开头的视图显示数据库中所有对象。DBA_元数据函数需要有数据库管理员DBA权限。

语句示例
Oracle语句,列举当前用户可访问的所有表

SELECT OWNER,TABLE_NAME FROM ALL_TABLES ORDER BY TABLE_NAME;

MySQL语句,列举当前用户可访问的所有表和数据库

SELECT table_schema, table_name FROM information_schema.tables;

MS SQL语句,使用系统表列举所有可访问的表

SELECT name FROM sysobjects WHERE xtype = 'U';

MS SQL语句,使用目录视图列举所有可访问的表

SELECT name FROM sys.tables;
3、通过SQL方言推理识别数据库平台
平台连接符行注释唯一的默认表、变量或函数int转char函数
MS SQL Server‘A’+‘B’@@PACK_RECEIVEDchar(0x41)
Oracle‘A’||'B’
concat(‘A’,‘B’)
BITAND(1, 1)chr(65)
MySQL‘A’ 'B’
concat(‘A’,‘B’)
#
CONNECTION_ID()char(0x41)
Access“A”&“B”N/Amsysobjectschr(65)
PostgreSQL‘A’||‘B’getpgusername()chr(65)
DB2‘a’ concat ‘b’sysibm.systableschr(65)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值