存储过程是存储在SQLServer中的预先写好的SQL语句集合,其中危险性最高的扩展存储过程就是xp_cmdshell了,它可以执行操作系统的任何指令,而SA是Microsoft SQLServer的管理员帐号,拥有最高权限,它可以执行扩展存储过程,并获得返回值,比如执行: exec master..xp_cmdshell 'net user test 1234 /add'和exec master..xp_cmdshell 'net 这样对方的系统就被添加了一个用户名为test,密码为1234,有管理员权限的用户,如图一所示。 现在你应该明白为什么得到SA密码,就可以得到系统的最高权限了吧。而往往不少网络管理员不清楚这个情况,为自己的SA用户起了一些诸如1234,4321等简单的密码,甚至根本就不设置密码,这样网络入侵者就可以利用一些黑客工具很轻松的扫描到SA的密码,进而控制计算机。 除了xp_cmdshell,还有一些存储过程也有可能会被入侵者利用到: 1、xp_regread(这个扩展存储过程可以读取注册表指定的键里指定的值),使用方法(得到机器名): DECLARE @test varchar(50) 2、xp_regwrite(这个扩展存储过程可以写入注册表指定的键里指定的值),使用方法(在键HKEY_LOCAL_MACHINE\SOFTWARE\aaa\aaaValue写入bbb): EXEC master..xp_regwrite 如果被入侵的计算机的administrator用户可以浏览注册表中的HKEY_LOCAL_MACHINE\SAM\SAM\信息,那使用 xp_regread、xp_regwrite这两个存储过程可以实现克隆administrator用户,得到管理员权限。 xp_regdeletekey、xp_regdeletevalue也会对系统带来安全隐患。 DECLARE @shell INT EXEC SP_OACREATE 'wscript.shell',@shell OUTPUT 这样对方系统增加了一个用户名为test,密码为1234的用户,再执行: DECLARE @shell INT EXEC SP_OACREATE 'wscript.shell',@shell OUTPUT 用户test,被加入管理员组。 既然我们知道了SP_OACREATE的使用方法,那我们就可以到\WINNT \system32下找到cmd.exe,net.exe和net1.exe这三个文件,在“属性”—“安全”中把可以对他们访问的用户全部删除掉,这样就无法使用SP_OACREATE来增加系统用户了,在我们需要访问这些文件的时候再加上访问用户就可以了。 (责任编辑:admin) |