首先让我们来了解一下中的存储过程。存储过程是存储在中的预先写好的SQL语句集合。存储过程分为三类:系统提供的存储过程,用户定义的存储过程和扩展存储过程。系统提供的存储过程是在安装时创建的存储过程,名字以“sp_”开头。用户定义的存储过程是用的使用者编写的存储过程。扩展存储过程则是对动态链接库(DLL)函数的调用,主要是用于客户端与服务器端或客户端之间进行通信的,与一般动态链接库不同的是它们直接运行在SQLServer分配的内存地址内,其中危险性最高的扩展存储过程就是xp_cmdshell了,它可以执行操作系统的任何指令。
上面了解了什么是存储过程,我们再来看一下什么是Sa。Sa是的管理员帐号,拥有最高权限,它可以执行扩展存储过程,并获得返回值。这样你应该明白为什么得到Sa,就可以得到系统的最高权限了吧。可是,有的时候情况并不是这样,下面我们以在局域网中的入侵介绍一下的攻与防。
使用扫描工具扫描得到一个sa为空的机器,使用SQL Exec连接上,发现命令并不能用(如图1)。
怀疑是扩展存储过程xp_cmdshell在查询分析器里删除,
语句为:exec sp_dropextendedproc 'xp_cmdshell',于是打开自己机的SQLServer的查询分析器,连上对方的SQLServer,对对方的xp_cmdshell进行恢复,语句为:
exec sp_addextendedproc 'xp_cmdshell', 'Xplog70.dll' (如图2)。