07年时候,我在博客里写过关于SQL的安全,是从运行用户的角度考虑,设置安全权限,以防止被普通用户通过备份指令上传木马。。。详情参看原文(
http://www.3018.com/article.asp?id=40)
这几天闲来无事,所以打算详细谈谈SQL的安全。首先从黑客最基本的SQL入侵常用的xp_cmdshell扩展存储说起。以前一直没提这个,也是因为本人也常用这个扩展存储在肉鸡上提权,呵呵。今天就详细的写出来吧。
在SQL Server中,只要具有sysadmin权限的用户可以,都可以通过xp_cmdshell存储扩展以system的权限执行任意系统命令,包括CMD命令和SQL命令。所以一旦服务器里的SQL管理员sa密码被破,而服务器里又没设置安全权限,那么你就乖乖沦为肉鸡吧`` 本文是安全系列文章,所以SA弱口令的破解及扫描就略过了~~
黑客在选择目标时候,首先选择一个网站作为突破口,检测该站点SQL运行用户是否具有sysadmin权限,提交注入点检测方式:
www.XXX.com/show.asp?id=3018 and 1=(select IS_SRVROLEMEMBER('sysadmin'))
如果返回正常,那就证明该站是以管理员用户运行SQL数据库,一般多是sa账户。
那么是否就是sa用户呢,我们再来提交测试下:
www.XXX.com/show.asp?id=3018 and 'sa'=(Select System_user) 如果IE返回正常,就是SA用户。
(注:以上示例中的www.XXX.com/show.asp?id=3018 为网站注入点)
如果你服务器提前删除了xp_cmdshell,黑客一般会再配合SQL另外2个存储,尽力得到webshell,再上传 xplog70.dll文件,帮你服务器恢复xp_cmdshell存储扩展。呵呵,下面是2个常用的存储,使用方法略过:
1. Xp_regread 用来读取注册表信息,通过这个存储过程来得到保存在注册表中Web绝对路径
2. sp_makewebtask 用来得到WebShell的,其主要功能就是导出数据库中表的记录为文件
根据以上分析得出,我们在做好SQL安全运行用户及目录权限同时,还要删除一些必要的存储扩展。
另外结合其他一些手段,我们打造安全的服务器,本人总结的几点SQL安全设置的经验:
1:将以下有安全问题的SQL扩展存储过程删除. 将以下代码全部复制到"SQL查询分析器":
use master
EXEC sp_dropextendedproc xp_cmdshell
EXEC sp_dropextendedproc Sp_OACreate
EXEC sp_dropextendedproc Sp_OADestroy
EXEC sp_dropextendedproc Sp_OAGetErrorInfo
EXEC sp_dropextendedproc Sp_OAGetProperty
EXEC sp_dropextendedproc Sp_OAMethod
EXEC sp_dropextendedproc Sp_OASetProperty
EXEC sp_dropextendedproc Sp_OAStop
EXEC sp_dropextendedproc Xp_regaddmultistring
EXEC sp_dropextendedproc Xp_regdeletekey
EXEC sp_dropextendedproc Xp_regdeletevalue
EXEC sp_dropextendedproc Xp_regenumvalues
EXEC sp_dropextendedproc Xp_regread
EXEC sp_dropextendedproc Xp_regremovemultistring
EXEC sp_dropextendedproc Xp_regwrite
drop procedure sp_makewebtask
恢复的命令是:
EXEC sp_addextendedproc 存储过程的名称,@dllname =存储过程的dll
例如:恢复存储过程xp_cmdshell
EXEC sp_addextendedproc xp_cmdshell,@dllname =xplog70.dll
另外,恢复时如果xplog70.dll已删除需要再copy一个。
2:新开的数据库,我们只给PUBLIC和DB_OWNER权限。网站里的SQL用户,一定不要用SA。
3:系统cmd.exe文件只保留administrators和sysytem权限。(这是为了防止入侵后直接可以提权)
4:可以设置IP策略,选择关闭1433端口的任意IP外连,只开启某某IP用户可以连接SQL服务器。因为服务器里网站是利用localhost本机连接,所以关闭外连端口,对网站的访问没有影响。(本人认为这招最绝,最安全,直接无法连接SQL服务器,更不用说提权了)
5:最后还是提及下,2年前写过的,关于SQL运行用户及目录安全:
㈠.计算机管理 -- 建立一个普通用户及密码(用户不允许更改密码,密码永不过期)
㈡.服务- Mssqlserver,更改运行用户,输入我们创建的用户和密码。默认为系统system用户。
SQL 2000企业管理器, 属性-安全中设置的用户,输入创建的用户及密码。默认为系统system用户。
㈢.然后设置安装有SQL2000 的盘权限, 如:D盘
D盘需要以下权限:
administrators 全部权限
System 全部权限
IIS_WPG只读与运行的权限(只应用在当前文件夹)
SQL2000的运行用户(只应用在当前文件夹)
列出文件夹/读数据
读属性
读扩展属性
读取权限
D:\Program Files\Microsoft SQL Server (SQL数据库安装目录)
administrators 全部权限
System 全部权限
SQL2000的运行用户全部权限(该文件夹、子文件夹及文件夹)
通过以上5点设置,一般就能彻底杜绝目前所有已知的SQL安全隐患。如果大家还有其他好想法,可以交流一下。
查看更多...