常见数据库注入

来源:互联网 发布:光明数据 编辑:程序博客网 时间:2024/05/29 13:17

利用方式可归为以下几大类:
查询数据
读写文件
执行命令
5.3.1SQLSever
1.利用错误消息提取信息
(1)枚举当前表及列
(2)利用数据类型错误提取数据
如果试图将一个字符串与非字符串比较,或者将一个字符串转换为另一个不兼容的类型时,SQL编辑器会抛出异常。
2.获取元数据SQLSever提供了大量视图,便于取得元数据。
取得当前数据库表:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
常见表视图
数据库视图
说明
sys.databases
SQL Sever中的所有数据库
sys.sql_logins
SQL server中的所有登录名
information_schema.tables
当前用户数据库中的表
information_schema.columns
当前用户数据库中的列
sys.all_columns
用户定义对象和系统对象的所有列的联合
sys.database_principals
数据库中每个权限或列异常权限
sys.database_files
存储在数据库中的数据库文件
sysobjects
数据库中创建的每个对象(例如约束、日志以及存储过程)
3.order by子句
为select查询的列排序,如果同时指定了top关键字,order by子句在视图、内联函数、派生表和子查询无效
攻击者通常会注入order by语句来判断此表的列数。eg:select id,username,password from user where id=1 order by 1

4.union查询
union关键字将两个或多个查询结果组合为单个结果集俗称联合查询。
基本规则:
所有查询中的列数必须相同
数据类型必须兼容
eg:select id,username,password,sex from user where id=1 union select null

5.无辜的函数
select suser_name():返回用户的登陆标识符
select user_name():基于指定的标识号返回数据库用户名
select db_name():返回数据库名
select is_member(‘db_owner’):是否为数据库角色
select conver(int,’5’):数据类型转换
SQL Server 常用函数

函数
说明
stuff
字符串截取函数
ascii
取ASCLL码
char
根据ASCII码取字符
getdate
返回日期
count
返回组中的总条数
cast
将一种数据类型的表达式显式转换为另一种数据类型的表达式
rand
返回随机值
is_srvrolemember
指示SQL Server登录名是否为指定服务器角色的成员
6.危险的存储过程
存储过程是在大型数据库系统中为了完成特定功能的一组SQL“函数”,如执行系统命令,查看注册表,读取磁盘目录等。
攻击者最常用的存储过程是“xp_cmdshell”,这个存储过程允许用户执行操作系统命令
注:并不是任何数据库用户都可以使用此类存储过程,用户必须持有control server权限
常见的存储

过程
说明
sp_addlogin
创建新的SQL Sever登录,该登录允许用户使用SQL Sever身份验证连接到SQL Sever实例
sp_dropuser
从当前数据库中删除数据库用户
xp_enumgouroups
提供microsoft windows本地组列表或在指定的windows域中定义的全局组列表
xp_regwrite
未被公布的存储过程,写入注册表
xp_regdeletevalue
删除注册表
xp_regread
读取注册表
xp_dirtree
读取目录
xp_password
更改密码
xp_servicecontrol
停止或激活某服务
SQL Sever数据库的角色与权限如下:
bulkadmmin:角色成员可以运行BULK INSERT语句
dbcreator:角色成员可以创建、更改、删除和还原任何数据库
diskadmin:角色成员可以管理磁盘文件
processadmin:角色成员可以终止在数据库引擎实例中运行的进程
securityadmin:角色成员可以终止在数据库引擎实例中运行的进程
securityadmin:角色成员可以登录名及其属性。可以利用GRANT、DENY和REVOKE服务器级别的权限;也可以重置SQL Sever登录名的密码
serveradmin:角色成员可以更改服务器范围的配置选项和关闭服务器
setupadmin:角色成员可以添加和删除链接服务器,并可以执行某些系统存储过程
sysadmin:角色成员可以在数据库引擎中执行任何活动

7.动态执行