MSSQL安全配置
1、MSSQL简介
Microsoft SQL Server是由美国微软公司所推出的关系数据库解决方案。 数据库的内置语言原本是采用美国标准局(ANSI)和国际标准组织(ISO)所定义的SQL语言,但是微软公司对它进行了部分扩充而成为作业用SQL(Transact-SQL)。
SQL Server一开始并不是微软自己研发的产品,而是当时为了要和IBM竞争时,与Sybase合作所产生的,其最早的发展者是Sybase,同时微软也和Sybase合作过SQL Server 4.2版本的研发,微软亦将SQL Server 4.2移植到Windows NT(当时为3.1版),在与Sybase终止合作关系后,自力开发出SQL Server 6.0版,往后的SQL Server即均由微软自行研发。
在与微软终止合作关系后,Sybase在Windows NT上的数据库产品原本称为Sybase SQL Server,后来改为现在的Sybase Adaptive Server Enterprise。
2、MSSQL服务器架设
Mssql试用版的下载地址可在Mssql试用版官方下载地址找到。
Mssql的安装有使用安装向导进行安装还有使用命令行进行安装两种方法,具体安装方法请参见官方文档。
使用安装向导的请参见使用安装向导安装 SQL Server 2012(安装程序)。
使用命令行进行安装请参见从命令提示符安装 SQL Server 2012。
3、错误配置及利用
使用了旧版本的Mssql
Mssql并不是一款免费的数据库解决方案,许多网站所使用的都不是最新版本的Mssql数据库,这些旧版本中存在着许多公开的漏洞,威胁着服务器的安全。
sa用户弱口令且Mssql端口对外开放
Mssql默认端口为1433端口,当该端口对外开放时,攻击者便可尝试对Mssql的账号密码进行爆破,此时若服务器使用了常用的用户名(如administrator)或默认用户名(Mssql默认用户为sa)且密码为弱口令或者默认的空口令则极易造成服务器被攻击者登陆,并进一步利用。参考MSSQL注射知识库 v 1.0中MSSQL 2000密码破解部分的内容。在攻击者获取到Mssql服务器数据库操作权限的时候服务器中缺少对用户权限的限制就极易导致服务器沦陷,参考MSSQL注射知识库 v 1.0中Get WebShell和系统命令执行部分的内容。
启用了xp_cmdshell等危险扩展命令
Mssql中有许多类似于xp_cmdshell的扩展命令,当攻击者获取到Mssql的数据库操作权限时,这些扩展命令非常容易被攻击者利用,最终导致服务器沦陷。因此,在使用Mssql时应尽量禁用这些扩展命令。常被利用的扩展命令有
Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty Sp_OAMethod Sp_OASetProperty Sp_OAStop Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues Xp_regremovemultistring xp_sdidebug xp_availablemedia xp_cmdshell xp_deletemail xp_dirtree xp_dropwebtask xp_dsninfo xp_enumdsn xp_enumerrorlogs xp_enumgroups xp_enumqueuedtasks xp_eventlog xp_findnextmsg xp_fixeddrives xp_getfiledetails xp_getnetname xp_grantlogin xp_logevent xp_loginconfig xp_logininfo xp_makewebtask xp_msver xp_perfend xp_perfmonitor xp_perfsample xp_perfstart xp_readerrorlog xp_readmail xp_revokelogin xp_runwebtask xp_schedulersignal xp_sendmail xp_servicecontrol xp_snmp_getstate xp_snmp_raisetrap xp_sprintf xp_sqlinventory xp_sqlregister xp_sqltrace xp_sscanf xp_startmail xp_stopmail xp_subdirs xp_unc_to_drive xp_dirtree
以下是使用xp_cmdshell执行系统命令的示例:
exec xp_cmdshell 'whoami'
4、实际案例
5、修复方案
使用了旧版本的Mssql
升级Mssql,或者使用其他的数据库解决方案。
sa用户弱口令且Mssql端口对外开放
#查看口令为空的用户 SELECT * FROM sysusers SELECT name,Password FROM syslogins WHERE password IS NULL ORDER BY name #更改口令 USE master EXEC sp_password ‘旧口令’,‘新口令’,用户名
管理用户权限:
- 企业管理器-〉数据库-〉对应数据库-〉角色-中创建新角色;
- 调整角色属性中的权限,赋予角色中拥有对象对应的SELECT、INSERT、UPDATE、DELETE、EXEC、DRI权限
启用了xp_cmdshell等危险扩展命令
#删除xp_cmdshell扩展命令,删除其它扩展命令同理 USE master sp_dropextendedproc 'xp_cmdshell'
6、漏洞扫描及发现
Mssql默认端口为1433,当数据库允许远程连接时该端口会对外开放。 通过对1433端口进行扫描就可以找到对外开放的Mssql服务器。
//扫描 nmap -n --open -p 1433 X.X.X.X/24 //使用nmap进行暴力破解 nmap -p1433 --script=ms-sql-brute --script-args=userdb=/var/passwd,passdb=/var/passwd 192.168.5.1
找到开放1433端口的服务器后便可尝试用Mssql数据库管理工具进行连接。