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 ‘旧口令’,‘新口令’,用户名

管理用户权限:

  1. 企业管理器-〉数据库-〉对应数据库-〉角色-中创建新角色;
  2. 调整角色属性中的权限,赋予角色中拥有对象对应的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数据库管理工具进行连接。

7、相关资源