打造抵御 SQL注入攻击的MSSQL服务器

  • MS SQL SERVER的安全性问题一般是由于设置不当而引起,攻击者可通过这样的设置获得非常高的权限来执行SQL指令 (如:sp_addlogin,xp_subdirs的存储过程),设置一台安全可靠的MS SQL SERVER对你的网站整体安全会起到关键性作用!让我们一起来看一看:  
    1.用户权限分布  
    用户分配的权限有两种:
    (1)网络空间提供商提供的MS SQL账号,一般这类型账号的权限是db_owner,也就是数据库所有者,拥有管理个人数据库文件的所有权限,针对自己的那个库文件,无法跨越别人的库 文件,针对MASTER更有一定的权限。
    (2)主机托管,这类型的主机的MS SQL的权限,有非常大一部分能达到SYSADMIN服务器角色组,相对来说这类型网站,被入侵的几率达到99%。
    权限的安全合理设置是至关重要的,对于使用网站程式调用SQL数据库的设置,更加重要。首先,用于程式连接数据库的用户应拒绝使用服务器角色组成 员,应使用数据库用户角色组的成员,最佳的方法是只给予db_reader,db_writer权限,遇见有需要备份的用户请另行新建用户??注意:只要 有备份权限就能通过BACKUP得到WEBSHELL!使用db_redaer,db_wirter不能直接用SQL指令建表,不过对于网站的安全也起到 了至关重要的作用,入侵者无法使用create talbe,想进一步获取服务器信息,无处保存。那当然,低权限也会给入侵者带来读表的权限,所以说合理的数据库权限,给你的网站安全加了一道墙。  
    bitscn.com


    2.数据库存储过程的分配
    删除所有对数据库可有可无的存储过程、对注册表操作的扩展进程:
    Xp_regaddmultistring  
    Xp_regdeletekey  
    Xp_regdeletevalue  
    Xp_regenumvalues (通过他可获得所以网页目录)
    Xp_regread (对Public能执行) (通过他可获得默认网页根目录,“\”)
    Xp_regremovemultistring  
    Xp_regwrite
    非常多人只留意到这几部分,更有一组:
    xp_instance-regaddmultistring
    xp_instance_regdeletevalue
    xp_instance_regenumkeys
    xp_instance_regread
    xp_instance_regremovemultistring
    部分重要的存储过程(以下的这些存储进程使用的权限达到DBO以上):
    xp_cmdshell(目前几乎所有的服务器都通杀了)
    xp_dirtree (查看目录树,由些了解你目录的
    xp_subdirs (用起来就跟DIR C:\相同,不过显示的只是目录)
    xp_fileexist,用来确定一个文件是否存在。  
    xp_getfiledetails,能获得文件周详资料。  
    sp_OACreate (通过他,危害非常得更大,不过要有有SYSADMINS权限才可能使用)
    sp_OAGetErrorInfo bitsCN.Com
    sp_OAGetProperty
    sp_OAMethod
    sp_OASetProperty
    sp_SetProperty
    sp_OAStop
    使用下面的存储过程:
    xp_makecab(dbo.xp_makecab ’c:\test.cab’,’mszip’,1,’C:\Inetpub\wwwroot\SQLInject\login.asp’,
    ’C:\Inetpub\wwwroot\SQLInject\securelogin.asp’)
    如果入侵者使用conn.asp,dbconn.asp,databaseconn.asp这类的设置文件,就能找出目录,再用上面的命令就能把 你的程式打包再下载,
    你的SQL密码将被一览无疑(建议连接密码文件加密):
    xp_makewebtask (用WEB作业得到WEBSHELL)
    xp_runwebtask
    xp_readerrorlog(读取出错的记录,但我们可能他来读取文件exec master.dbo.xp_readerrorlog 1,’c:\inetpub\wwwroot\dvbbs\conn.asp’)

    3. 程式的安全
    程式的安全问题危害到了MS SQL,下面是一些注意事项:(1)书写程式,带值输入应周详过滤如(’,;,=,update,select,insert,create,",--, exec, execute等等)用来执行指令的关键字。有人已研究出如果避过’分号来得到权限,不过如果你有语句中加入:
    (if instr(request("id"),",")>0 or instr(request("id"),"insert")> or instr(request("id"),";")>0 then ’根据以上提供的那些得、重复加上,这些举例)
    中国.网管联盟
    response.write "<script language=script>javascript:history.go(-1);</script>
    response.end
    end if
    )
    发现这些字符就跳回来出的页面,使得攻击者无法判断信息是否正确,通过页面变量直接取值的,请使用request.Querysring,可防止 入侵者使用POST:
    if instr(request.querysring("id"),",")>0 or instr(request.querystring("id"),"insert")> or instr(request.querystring("id"),";")>0 then ’根据以上提供的那些得、重复加上,这些举例)
    response.write "<script language=script>javascript:history.go(-1);</script>
    response.end
    end if
    (2)改掉预设的WEB虚拟路径,不要使用IIS装好的预设(系统所在碰碟)\Inetpub\wwwroot路径,网页目录最佳不要放在C盘。
    (3)利用 On Error Resume Next 排除网页出错,或使用:
    if Err.Number<>0 then
    response.write redirect url
    end if
    重定向到你指定的系统页面删除或修改默认的出错页面(重点是500出错页面),修改默认出错页面,让入侵者无法参考出错信息。
    bbs.bitsCN.com

    4.系统的设置
    (1)使用防火墙关闭TCP 1433/UDP 1434端口对外连接
    (2)升级最新的补丁(关注微软发布的补丁文件,是备及时修改,最新MS SQL 2000 SERVER有SP4补丁了)
    (3)检查系统的是否存在弱口令用户,一旦出现就要及时修改密码。
    最后,网站的安全还是要靠广大程式来一起维护,一时麻痹大意思将你的网站非常大的灾难,SQL INJECTIONS可谓真是防不胜防,这些方面也不单单是MS SQL,包括ORACLE、SYBASE、MYSQL等等,希望能创造出好的网络环境。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值